子查询的一些语句
实例:
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;