一、 自连接查询:自身与自身连接,可以将需要两次查询的语句综合成一条语句一次执行成功。
例:要查询出张三做在院系的所有学生信息,常规要两次:1.查询张三所在的院系;2.查询这个院系的学生信息。
自连接实现功能:
Select st1.*
from student as st1,student as st2
where st2.姓名=’张三’ and st1.所属院系=st2.所属院系
为什么要用st2.姓名=’张三’做为条件,而不用st1.姓名=’张三’?我分析的原因是返回的结果是st1的记录,设置了条件将会将记录变为1条,所以不能对st1做限制。
二、 内连接查询:特点:只返回两个表中相互匹配的内容。内连接包括等值连接、自然连接、不等连接,自连接也是内连接的一种。
1. 等值连接:连接规则由“=”号组合而成并且列出所有查询的字段(*)。
2. 自然连接:在等值连接的基础上,查询出需要的字段,将(*)替换为需要显示的字段。
3. 不等值连接:连接规则由等号以外的运算符组成。>,=,<,,>=,<=,<>,!=,between等。
三、 外连接查询:外连接是值将不匹配的内容也包含进去。包含左外连接、右外连接、全外连接三种。
1. 左外连接:使用(*=或left outer join)将左边表中的所有数据以及右边表中的匹配的数据查询出来。
Select * from student1 as st1,student2 as st2 where st1.学号*=st2.学号
或者
Select * from student1 as st1 Left Outer Join student2 as st2 On st1.学号=st2.学号
2. 右外连接:使用(=*或者right outer join)将右边表中的全部数据以及左表中的匹配的数据查询出来。
Select * from student1 as st1,student2 as st2 where st1.学号=*st2.学号
或者
Select * from student1 as st1 right outer join student2 as st2 on st1.学号=st2.学号
3. 全外连接:使用full outer join将两个表的所有数据都查询显示出来。
实验一下,建立两个表,表结构和数据如图:
两个表结构一样图SQL17-1:
表1数据图SQL17-2:
表2数据图SQL17-3:
用右外连接查询语句做实验:
Select * from student1 as st1,student2 as st2 where st1.学号=*st2.学号
查询截图SQL17-4:
Select * from student1 as st1 right outer join student2 as st2 on st1.学号=st2.学号
查询截图SQL17-5:
查询结果和预料的一样,完全正确,成功了。
四、 交叉连接查询:交叉连接查询就是无规则连接查询的两个写法:
1. select * from t1,t2
2. select * from t1 cross join t2 这里使用了cross join关键字
五、 组合查询:union查询,和连接查询不同的是UNION会将查询的记录纵向排列,并去除重复的记录。保留不重复的记录,可以用UNION ALL。
组合查询规则
1. 查询的字段数量要相同,如果数量不同,可以用NULL代替缺少的字段。
2. 字段类型要兼容,相同位置字段类型不同会出现错误。
语法:select 字段……
Union
Select 字段……
Union
Select字段……
举例:得到一个复杂的考试成绩统计汇总样式表
Select 学号,课号,考试成绩 from score
Union
Select 学号,’ 总成绩:’,sum(考试成绩)
From score
Group by 学号
Union
Select 学号,’平均分:’,avg(考试成绩)
From score
Group by 学号
组合查询只能有一个Order by 子句,对查询的组合结果进行排序,以第一个SELECT子句的字段组为参照标准,没有Order by 子句的默认情况下,会按照第一个SELECT自己的字段升序排列。