Mysql数据库中子查询的使用
废话不多说了,直接个大家贴mysql数据库总子查询的使用。
代码如下所述:
</pre><prename="code"class="sql">1.子查询是指在另一个查询语句中的SELECT子句。 例句: SELECT*FROMt1WHEREcolumn1=(SELECTcolumn1FROMt2); 其中,SELECT*FROMt1...称为OuterQuery[外查询](或者OuterStatement), SELECTcolumn1FROMt2称为SubQuery[子查询]。 所以,我们说子查询是嵌套在外查询内部。而事实上它有可能在子查询内部再嵌套子查询。 子查询必须出现在圆括号之间。 行级子查询 SELECT*FROMt1WHERE(col1,col2)=(SELECTcol3,col4FROMt2WHEREid=10); SELECT*FROMt1WHEREROW(col1,col2)=(SELECTcol3,col4FROMt2WHEREid=10); 行级子查询的返回结果最多为一行。 优化子查询 --创建数据表 CREATETABLEIFNOTEXISTStdb_goods( goods_idSMALLINTUNSIGNEDPRIMARYKEYAUTO_INCREMENT, goods_nameVARCHAR(150)NOTNULL, goods_cateVARCHAR(40)NOTNULL, brand_nameVARCHAR(40)NOTNULL, goods_priceDECIMAL(15,3)UNSIGNEDNOTNULLDEFAULT0, is_showBOOLEANNOTNULLDEFAULT1, is_saleoffBOOLEANNOTNULLDEFAULT0 ); --写入记录 INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('R510VC15.6英寸笔记本','笔记本','华硕','3399',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('Y400N14.0英寸笔记本电脑','笔记本','联想','4899',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('G150TH15.6英寸游戏本','游戏本','雷神','8499',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('X550CC15.6英寸笔记本','笔记本','华硕','2799',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('X240(20ALA0EYCD)12.5英寸超极本','超级本','联想','4999',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('U330P13.3英寸超极本','超级本','联想','4299',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('SVP13226SCB13.3英寸触控超极本','超级本','索尼','7999',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('iPadminiMD531CH/A7.9英寸平板电脑','平板电脑','苹果','1998',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('iPadAirMD788CH/A9.7英寸平板电脑(16GWiFi版)','平板电脑','苹果','3388',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('iPadminiME279CH/A配备Retina显示屏7.9英寸平板电脑(16GWiFi版)','平板电脑','苹果','2788',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('IdeaCentreC34020英寸一体电脑','台式机','联想','3499',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('Vostro3800-R1206台式电脑','台式机','戴尔','2899',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('iMacME086CH/A21.5英寸一体电脑','台式机','苹果','9188',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('AT7-7414LP台式电脑(i5-3450四核4G500G2G独显DVD键鼠Linux)','台式机','宏碁','3699',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('Z220SFFF4F06PA工作站','服务器/工作站','惠普','4288',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('PowerEdgeT110II服务器','服务器/工作站','戴尔','5388',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('MacProMD878CH/A专业级台式电脑','服务器/工作站','苹果','28888',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('HMZ-T3W头戴显示设备','笔记本配件','索尼','6999',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('X3250M4机架式服务器2583i14','服务器/工作站','IBM','6888',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('玄龙精英版笔记本散热器','笔记本配件','九州风神','',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('HMZ-T3W头戴显示设备','笔记本配件','索尼','6999',DEFAULT,DEFAULT); INSERTtdb_goods(goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff)VALUES('商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT); --求所有电脑产品的平均价格,并且保留两位小数,AVG,MAX,MIN、COUNT、SUM为聚合函数 SELECTROUND(AVG(goods_price),2)ASavg_priceFROMtdb_goods; --查询所有价格大于平均价格的商品,并且按价格降序排序 SELECTgoods_id,goods_name,goods_priceFROMtdb_goodsWHEREgoods_price>5845.10ORDERBYgoods_priceDESC; --使用子查询来实现 SELECTgoods_id,goods_name,goods_priceFROMtdb_goods WHEREgoods_price>(SELECTROUND(AVG(goods_price),2)ASavg_priceFROMtdb_goods) ORDERBYgoods_priceDESC; --查询类型为“超记本”的商品价格 SELECTgoods_priceFROMtdb_goodsWHEREgoods_cate='超级本'; --查询价格大于或等于"超级本"价格的商品,并且按价格降序排列 SELECTgoods_id,goods_name,goods_priceFROMtdb_goods WHEREgoods_price=ANY(SELECTgoods_priceFROMtdb_goodsWHEREgoods_cate='超级本') ORDERBYgoods_priceDESC; --=ANY或=SOME等价于IN SELECTgoods_id,goods_name,goods_priceFROMtdb_goods WHEREgoods_priceIN(SELECTgoods_priceFROMtdb_goodsWHEREgoods_cate='超级本') ORDERBYgoods_priceDESC; --创建“商品分类”表 CREATETABLEIFNOTEXISTStdb_goods_cates( cate_idSMALLINTUNSIGNEDPRIMARYKEYAUTO_INCREMENT, cate_nameVARCHAR(40) ); --查询tdb_goods表的所有记录,并且按"类别"分组 SELECTgoods_cateFROMtdb_goodsGROUPBYgoods_cate; --将分组结果写入到tdb_goods_cates数据表 INSERTtdb_goods_cates(cate_name)SELECTgoods_cateFROMtdb_goodsGROUPBYgoods_cate; --通过tdb_goods_cates数据表来更新tdb_goods表 UPDATEtdb_goodsINNERJOINtdb_goods_catesONgoods_cate=cate_name SETgoods_cate=cate_id; --通过CREATE...SELECT来创建数据表并且同时写入记录 --SELECTbrand_nameFROMtdb_goodsGROUPBYbrand_name; CREATETABLEtdb_goods_brands( brand_idSMALLINTUNSIGNEDPRIMARYKEYAUTO_INCREMENT, brand_nameVARCHAR(40)NOTNULL )SELECTbrand_nameFROMtdb_goodsGROUPBYbrand_name; --通过tdb_goods_brands数据表来更新tdb_goods数据表(错误) UPDATEtdb_goodsINNERJOINtdb_goods_brandsONbrand_name=brand_name SETbrand_name=brand_id; --Column'brand_name'infieldlistisambigous --正确 UPDATEtdb_goodsASgINNERJOINtdb_goods_brandsASbONg.brand_name=b.brand_name SETg.brand_name=b.brand_id; --查看tdb_goods的数据表结构 DESCtdb_goods; --通过ALTERTABLE语句修改数据表结构 ALTERTABLEtdb_goods CHANGEgoods_catecate_idSMALLINTUNSIGNEDNOTNULL, CHANGEbrand_namebrand_idSMALLINTUNSIGNEDNOTNULL; --分别在tdb_goods_cates和tdb_goods_brands表插入记录 INSERTtdb_goods_cates(cate_name)VALUES('路由器'),('交换机'),('网卡'); INSERTtdb_goods_brands(brand_name)VALUES('海尔'),('清华同方'),('神舟'); --在tdb_goods数据表写入任意记录 INSERTtdb_goods(goods_name,cate_id,brand_id,goods_price)VALUES('LaserJetProP1606dn黑白激光打印机','12','4','1849'); --查询所有商品的详细信息(通过内连接实现) SELECTgoods_id,goods_name,cate_name,brand_name,goods_priceFROMtdb_goodsASg INNERJOINtdb_goods_catesAScONg.cate_id=c.cate_id INNERJOINtdb_goods_brandsASbONg.brand_id=b.brand_id\G; --查询所有商品的详细信息(通过左外连接实现) SELECTgoods_id,goods_name,cate_name,brand_name,goods_priceFROMtdb_goodsASg LEFTJOINtdb_goods_catesAScONg.cate_id=c.cate_id LEFTJOINtdb_goods_brandsASbONg.brand_id=b.brand_id\G; --查询所有商品的详细信息(通过右外连接实现) SELECTgoods_id,goods_name,cate_name,brand_name,goods_priceFROMtdb_goodsASg RIGHTJOINtdb_goods_catesAScONg.cate_id=c.cate_id RIGHTJOINtdb_goods_brandsASbONg.brand_id=b.brand_id\G; --无限分类的数据表设计 CREATETABLEtdb_goods_types( type_idSMALLINTUNSIGNEDPRIMARYKEYAUTO_INCREMENT, type_nameVARCHAR(20)NOTNULL, parent_idSMALLINTUNSIGNEDNOTNULLDEFAULT0 ); INSERTtdb_goods_types(type_name,parent_id)VALUES('家用电器',DEFAULT); INSERTtdb_goods_types(type_name,parent_id)VALUES('电脑、办公',DEFAULT); INSERTtdb_goods_types(type_name,parent_id)VALUES('大家电',1); INSERTtdb_goods_types(type_name,parent_id)VALUES('生活电器',1); INSERTtdb_goods_types(type_name,parent_id)VALUES('平板电视',3); INSERTtdb_goods_types(type_name,parent_id)VALUES('空调',3); INSERTtdb_goods_types(type_name,parent_id)VALUES('电风扇',4); INSERTtdb_goods_types(type_name,parent_id)VALUES('饮水机',4); INSERTtdb_goods_types(type_name,parent_id)VALUES('电脑整机',2); INSERTtdb_goods_types(type_name,parent_id)VALUES('电脑配件',2); INSERTtdb_goods_types(type_name,parent_id)VALUES('笔记本',9); INSERTtdb_goods_types(type_name,parent_id)VALUES('超级本',9); INSERTtdb_goods_types(type_name,parent_id)VALUES('游戏本',9); INSERTtdb_goods_types(type_name,parent_id)VALUES('CPU',10); INSERTtdb_goods_types(type_name,parent_id)VALUES('主机',10); --查找所有分类及其父类 SELECTs.type_id,s.type_name,p.type_nameFROMtdb_goods_typesASsLEFTJOINtdb_goods_typesASpONs.parent_id=p.type_id; --查找所有分类及其子类 SELECTp.type_id,p.type_name,s.type_nameFROMtdb_goods_typesASpLEFTJOINtdb_goods_typesASsONs.parent_id=p.type_id; --查找所有分类及其子类的数目 SELECTp.type_id,p.type_name,count(s.type_name)ASchildren_countFROMtdb_goods_typesASpLEFTJOINtdb_goods_typesASsONs.parent_id=p.type_idGROUPBYp.type_nameORDERBYp.type_id; --为tdb_goods_types添加child_count字段 ALTERTABLEtdb_goods_typesADDchild_countMEDIUMINTUNSIGNEDNOTNULLDEFAULT0; --将刚才查询到的子类数量更新到tdb_goods_types数据表 UPDATEtdb_goods_typesASt1INNERJOIN(SELECTp.type_id,p.type_name,count(s.type_name)ASchildren_countFROMtdb_goods_typesASp LEFTJOINtdb_goods_typesASsONs.parent_id=p.type_id GROUPBYp.type_name ORDERBYp.type_id)ASt2 ONt1.type_id=t2.type_id SETt1.child_count=t2.children_count; --复制编号为12,20的两条记录 SELECT*FROMtdb_goodsWHEREgoods_idIN(19,20); --INSERT...SELECT实现复制 INSERTtdb_goods(goods_name,cate_id,brand_id)SELECTgoods_name,cate_id,brand_idFROMtdb_goodsWHEREgoods_idIN(19,20); --查找重复记录 SELECTgoods_id,goods_nameFROMtdb_goodsGROUPBYgoods_nameHAVINGcount(goods_name)>=2; --删除重复记录 DELETEt1FROMtdb_goodsASt1LEFTJOIN(SELECTgoods_id,goods_nameFROMtdb_goodsGROUPBYgoods_nameHAVINGcount(goods_name)>=2)ASt2ONt1.goods_name=t2.goods_nameWHEREt1.goods_id>t2.goods_id;
好了,关于mysql中子查询的使用就给大家介绍这么多,希望对大家有所帮助!