Mysql中子查询的常用语句

子查询的一些语句


实例:

SELECT * FROM t1 WHERE column = (SELECT column FROM t2);

求平均数,并四舍五入保留两位小数:

SELECT ROUND(AVG(number),2) FROM table;

查询大于平均数的项,并且按照number的降序排列:

SELECT id,name,number FROM table WHERE number > 
(SELECT ROUND(AVG(number),2) FROM table ORDER BY number DESC;

查询大于或等于“某一类别的”的编号的其他行,并且按照number降序排列

SELECT id,name,number FROM table WHERE number >= 
SOME(SELECT number FROM table WHERE classify = "某一类")
ORDER BY number DESC;

查询结果分组

SELECT classify FROM table GROUP BY classify;

内连接

//查找id,name,classify_name,brand_name
//其中 classify_name字段在table_classify中,brand_name在table_brand中
//table中只保存对应的id

SELECT id,name,classify_name,brand_name FROM table AS a 
INNER JOIN table_classify AS b ON a.classify_id = b.clasify_id
INNER JOIN table_brand AS c ON a.brand_id = c.brand_id;

无限分类的数据表

/*比如在图书馆分类系统中,有父分类,子分类。组织起来的方式可以是,在一张表中存储
  所有的分类,然后每个分类的字段为id,classify,parent , 其中,parent字段是父
  分类的id号。这个时候要内连接表自身。*/

查询所有分类及其父分类

//采用左连接,显示所有分类,若没有父亲,即显示为NULL
SELECT s.id,s.classify,p.classify FROM table AS s 
LEFT JOIN table AS p ON s.parent = p.id;

查询所有分类及其子类

//有多个子类的类会占多行
SELECT p.id,p.classify,s.classify FROM table AS p 
LEFT JOIN table AS s ON s.parent = p.id;

查找所有分类及其子类的数目

//首先是结果为 父类编号,父类名,子类数目。
//结果就是按照父类名分组,并且显示该分组下的子类的数目
//并且结果按照父类的编号排序 默认从小到大

SELECT p.id,p.classify,COUNT(s.classify) AS childrenNum FROM table AS p
LEFT JOIN table AS s ON s.parent = p.id
GROUP BY p.classify ORDER BY p.id;

查找重复记录

//比如只有2个行是同样的name 那么结果集就是1行  并且是编号较小的那一行
SELECT id,name FROM table GROUP BY name HAVING COUNT(name) > 1;

删除重复记录

/*首先是子查询得到了上面的重复的结果集,然后当原表中的name等于重复表的name时
  就应该要删除掉,并且我们这里是删除掉编号更大的,保留编号最小的一个。*/

DELETE t1 FROM table AS t LEFT JOIN 
(SELECT id,name FROM table GROUP BY name HAVING COUNT(name) > 1 )
AS t2 ON t1.name = t2.name WHEREt1.id > t2.id;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值