小编给大家分享一下mysql子查询语句怎么写,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

mysql子查询语句是指在另一个查询语句中的SELECT子句,例句如“SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);”。

本文操作环境:Windows7系统、mysql5.7版、Dell G3电脑。

mysql 子查询语句:

1.子查询是指在另一个查询语句中的SELECT子句。

例句:

SELECT*FROMt1WHEREcolumn1=(SELECTcolumn1FROMt2);

其中,SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement),

SELECT column1 FROM t2 称为Sub Query[子查询]。

所以,我们说子查询是嵌套在外查询内部。而事实上它有可能在子查询内部再嵌套子查询。

子查询必须出现在圆括号之间。

行级子查询

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_goodsWHEREgoods_price>(SELECTROUND(AVG(goods_price),2)ASavg_priceFROMtdb_goods)ORDERBYgoods_priceDESC;

-- 查询类型为“超记本”的商品价格

SELECTgoods_priceFROMtdb_goodsWHEREgoods_cate='超级本';

-- 查询价格大于或等于"超级本"价格的商品,并且按价格降序排列

SELECTgoods_id,goods_name,goods_priceFROMtdb_goodsWHEREgoods_price=ANY(SELECTgoods_priceFROMtdb_goodsWHEREgoods_cate='超级本')ORDERBYgoods_priceDESC;

-- = ANY 或 = SOME 等价于 IN

SELECTgoods_id,goods_name,goods_priceFROMtdb_goodsWHEREgoods_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_nameSETgoods_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_nameSETbrand_name=brand_id;--Column'brand_name'infieldlistisambigous

-- 正确

UPDATEtdb_goodsASgINNERJOINtdb_goods_brandsASbONg.brand_name=b.brand_nameSETg.brand_name=b.brand_id;

-- 查看tdb_goods的数据表结构

DESCtdb_goods;

-- 通过ALTER TABLE语句修改数据表结构

ALTERTABLEtdb_goodsCHANGEgoods_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_goodsASgINNERJOINtdb_goods_catesAScONg.cate_id=c.cate_idINNERJOINtdb_goods_brandsASbONg.brand_id=b.brand_id\G;

-- 查询所有商品的详细信息(通过左外连接实现)

SELECTgoods_id,goods_name,cate_name,brand_name,goods_priceFROMtdb_goodsASgLEFTJOINtdb_goods_catesAScONg.cate_id=c.cate_idLEFTJOINtdb_goods_brandsASbONg.brand_id=b.brand_id\G;

-- 查询所有商品的详细信息(通过右外连接实现)

SELECTgoods_id,goods_name,cate_name,brand_name,goods_priceFROMtdb_goodsASgRIGHTJOINtdb_goods_catesAScONg.cate_id=c.cate_idRIGHTJOINtdb_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_typesASpLEFTJOINtdb_goods_typesASsONs.parent_id=p.type_idGROUPBYp.type_nameORDERBYp.type_id)ASt2ONt1.type_id=t2.type_idSETt1.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子查询语句怎么写”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!