Mysql中子查询的常用语句

来源:互联网 发布:淘宝装修怎么弄全屏 编辑:程序博客网 时间:2024/05/24 05:31

子查询的一些语句


实例:

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中只保存对应的idSELECT id,name,classify_name,brand_name FROM table AS a INNER JOIN table_classify AS b ON a.classify_id = b.clasify_idINNER JOIN table_brand AS c ON a.brand_id = c.brand_id;

无限分类的数据表

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

查询所有分类及其父分类

//采用左连接,显示所有分类,若没有父亲,即显示为NULLSELECT 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 pLEFT JOIN table AS s ON s.parent = p.idGROUP 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;