说明
表1 用 T1 表示
T1.T1CODE 表示编号
T1.T1NAME 表示名称
表2 用 T2表示
T2.T2CODE 表示编号
T2.T2NAME 表示名称
1.group by
GROUP BY必须得配合聚合函数来用,分组之后你可以
count() 计数
sum() 求和
avg() 平均数
max() 最大值
min() 最小值
HAVING 是对于GROUP BY对象进行筛选,where是聚合前的筛选,having是聚合后对筛选
count使用,查询对应编号有多少条数据
select s1.T1CODE,count(s1.T1CODE) codecount from T1 s1 group by T1CODE
having使用,查询编号总数数据大于四十的数据
select s1.T1CODE,count(s1.T1CODE) codecount from T1 s1 group by T1CODE having count(s1.T1CODE)>40
2.其他查询
连接查询:
连接查询是将两个或两个以上的表按照某个条件连接起来,从中选取需要的数据;
如:SELECT * from T1,T2; 返回结果将两个表的所有组合结果返回
1、内连接查询:
内连接查询是一种最常用的连接查询。内连接查询可以查询两个或者两个以上的表;
SELECT * from t1 b,t2 t where t.T2CODE=b.T1CODE;
或SELECT * from t1 ,t2 where t1.T1CODE=t2 .T2CODE;
也可这么写来查询需要的字段:SELECT t1Name,t2name from t1 ,t2 where t1 .T1CODE=t2.T2CODE;
注意:如果查询的字段(如id)中两个表都有时这种写法会出错,因为无法得知id是哪个表的字段,所以平时多表查询时要写别名
修改为:SELECT tb.bookName,tb.author,tby.id from t1 tb ,t2 tby where tb.id=tby.id;
2、外连接查询
外连接可以查出某一张表的所有信息;
SELECT 属性名列表 FROM 表名 1 LEFT|RIGHT JOIN 表名 2 ON 表名 1.属性名 1=表名 2.属性名 2;
•左连接查询:
可以查询出“表名 1”的所有记录,而“表名 2”中,只能查询出匹配的记录;如:
select * from t1tb left JOIN t2 tby on tb.bookTypeId=tby.id; 查询结果:
•右连接查询:
可以查询出“表名 2”的所有记录,而“表名 1”中,只能查询出匹配的记录;如:
select * from t1tb right JOIN t2 tby on tb.bookTypeId=tby.id; 查询结果:
•多条件连接查询
即where后面有多个条件and连接查询
子查询
1 、带 In 关键字的子查询
一个查询语句的条件可能落在另一个 SELECT 语句的查询结果中。
根据条件查询数据
select s1.t1code ind from t1 s1 where s1.t1code in('2','1')
根据另一个sql的条件查询数据
select s1.t1code ind from t1 s1 where s1.t1code in(
select t2code ind from t2
)
2 、带比较运算符的子查询
子查询可以使用比较运算符。
3 、带 (not)Exists 关键字的子查询
假如子查询查询到记录,则进行外层查询,否则,不执行外层查询;not exists表示内层没有内容时才查询外层
如:SELECT * from t1where EXISTS(select * from t2);//表示t2中返回的有内容时才执行外层t_book的查询
4 、带 Any 关键字的子查询
ANY 关键字表示满足其中任一条件;如:SELECT * FROM t1WHERE price>= ANY (SELECT price FROM t2);//表示筛选价格大于任意t2表中选出的价格的结果,即比最小的大的价格就满足条件
5 、带 All 关键字的子查询
ALL 关键字表示满足所有条件;如:SELECT * FROM t1WHERE price>= ALL (SELECT price FROM t2);//表示筛选价格大于所有t2表中选出的价格的结果,即比最大的价格大的才满足条件
合并查询
•UNION
使用 UNION 关键字是,数据库系统会将所有的查询结果合并到一起,然后去除掉相同的记录;
select s1.t1code ind from t1 s1
union select g.t2code ind from t2 g
•UNION ALL
使用 UNION ALL,不会去除掉相同的记录;
select s1.t1code ind from t1s1
union all select g.t2code ind from t2 g