连接查询
使用连接谓词指定的连接
连接谓词=连接条件,在WHERE子句中给出
格式:[<表名1>]<列名1><比较运算符>
[<表名2>]<列名2>
1、等值连接
表之间通过比较运算符=连接起来
SELECT student.*,score.*
FROM student,score
WHERE student.sno=score.sno;
2、自然连接
一种特殊的等值连接,在目标列中去除相同的字段名称为自然连接
多表连你姐,并采用别名缩写表名
SELECT a.sno,a.sname,b.cname
FROM student a,course b
WHERE a.sname=b.cname;
3、自连接
将同一个表进行连接称为自连接
例:查询选修1201课程的成绩高于学号为181002的成绩的学生
SELECT a.sno,a.cno,a.grade
FROM score a,score b
WHERE a.sno='1201' AND a.grade>b.grade AND b.sno='181002' AND b.cno='1201';
使用JOIN关键字指定的连接
格式:<表名><连接类型><表名> ON <条件表达式>
| <表名>CROSS JOIN<表名>
| <连接表>
连接类型有:[INNER|{LEFT|RIGHT|FULL}OUTER|CROSS] JOIN
说明:
- 在FROM子句中庸JOIN指定连接的多个表的表名,用ON子句指定连接条件
- 在连接类型中,INNER表示内连接,OUTER表示外连接,CORSS表示交叉连接
1、内连接 INNER JOIN
内连接按照ON所指定的连接条件合并两个表,返回满足条件的行。内连接是系统默认的,克省略INNER
例:查询学生的情况和选修课程的情况
SELECT *
FROM student INNER JOIN score ON student.sno=score.sno;
例:查询数学课程且分数在84分以上的学生信息(省略了INNER关键字)
SELECT a.sno,a.sname,b.grade,c.cname
FROM student a JOIN score b ON a.sno=b.sno JOIN course c ON b.cno=c.cno
WHERE c.cname='数学' AND b.grade >= 84;
2、外连接 OUTER JOIN
外连接的结果表不但包含满足连接条件的行,还包含相应表中的所有行
- 左外连接 LEFT OUTER JOIN
- 右外连接 RIGHT OUTER JOIN
- 完全外连接 FULL OUTER JOIN
注意:外连接智能对两个表进行
3、交叉连接 CROSS JOIN
例:查询员工和部门所有可能组合
SELECT EmplName,DeptName
FROM Employoe CROSS JOIN Department
集合查询
将两个或多个SQL语句的查询结果集合并起来,利用集合进行查询处理
集合操作符功能:
- UNION 并运算,返回所有和那个,不包括重复行
- UNION ALL 并运算,包括重复行
- INTERSECT 交运算
- MINUS 差运算 返回第一个表有但是第二个表每月的数据
格式:<SELECT查询语句>
{UNION|UNION ALL|INTERSECT|……}
<SELECT查询语句>
说明:不允许在复合查询包含的任何单独查询中使用ORDER BY子句