连接
- 基本连接
- 内连接
- 外连接
- 左外连接
- 右外链接
- 全连接
- 交叉连接
- 自连接
基本连接
用户在进行基本链接操作时,可以遵循以下基本原则:
- SELECT 子句列表中,每个目标列前都要加上基本名称
- FROM子句应包括所有使用的基表
- WHERE子句应定义一个同等连接
SELECT A.姓名, A.性别, A.出生日期, A.民族, B.班级号, B.家庭住址
FROM 学生信息 A, 班级信息 B
WHERE A.所属班级 = B.班级编号
内连接
在内连接中,条件加在ON后 和 单独加在 WHERE后面效果相同
SELECT A.班级名, A.班级人数, B.姓名, B.联系方式
FROM 班级信息 A inner join 辅导员信息 B
ON A.辅导员 = B.辅导员编号 '创建等值连接的条件
WHERE B.性别 = '女' '可加入其他限定
外连接
内连接消除与另一个表的任何行不匹配的行
外连接会返回FROM子句中提到的至少一个表或视图中的所有行,只要这些行符合任何搜索条件
- 左外连接
'单纯的左外连接
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A LEFT OUTER join 辅导员信息 B
ON A.辅导员=B.辅导员编号
'当条件加在ON子句后面,如果不满足条件,会变空值
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A LEFT join 辅导员信息 B
ON A.辅导员=B.辅导员编号 and A.班级人数>20
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A LEFT join 辅导员信息 B
ON A.辅导员=B.辅导员编号
where A.班级人数>20
(当条件加在WHERE 子句中时,不符合条件的内容不会显示)
注: *左外连接可以省略 outer
- 右外链接
只是主从表进行互换,基本功能一致
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A RIGHT OUTER join 辅导员信息 B
ON A.辅导员=B.辅导员编号
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 辅导员信息 B RIGHT OUTER join 班级信息 A
ON A.辅导员=B.辅导员编号
- 全连接
全连接会显示所有匹配形式,信息情况
SELECT A.班级名,A.班级人数,B.姓名
FROM 辅导员信息 B CROSS JOIN 班级信息 A
WHERE A.辅导员=B.辅导员编号
'辅导员信息和班级信息调换,结果位置进行调换
SELECT A.班级名,A.班级人数,B.姓名
FROM 班级信息 A CROSS JOIN 辅导员信息 B
WHERE A.辅导员=B.辅导员编号
交叉连接
交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到 结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数
SELECT A.班级名,A.班级人数,B.姓名
FROM 班级信息 A CROSS JOIN 辅导员信息 B
'加入WHERE条件语句后,对结果进行筛选
SELECT A.班级名,A.班级人数,B.姓名
FROM 班级信息 A CROSS JOIN 辅导员信息 B
WHERE A.辅导员=B.辅导员编号
自连接
SELECT A.班级名,A.班级人数,B.班级名
FROM 班级信息 A, 班级信息 B
WHERE A.班级人数=B.班级人数
'进一步简化查询结果,精确查找
SELECT A.班级名,A.班级人数,B.班级名
FROM 班级信息 A, 班级信息 B
WHERE A.班级人数=B.班级人数 AND A.班级编号<>B.班级编号
'进一步精确查找
SELECT A.班级名,A.班级人数,B.班级名
FROM 班级信息 A, 班级信息 B
WHERE A.班级人数=B.班级人数 AND A.班级编号<>B.班级编号 AND A.班级名='艺术系2班'
查询
联合查询
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
UNION
SELECT '',SUM(分数),'合计'
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
SELECT '',avg(分数),'合计'
FROM 成绩信息 A 学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
ORDER BY 分数
使用子查询
SELECT A.成绩编号, A.分数, B.姓名
FROM 成绩信息 A, 学生信息 B
WHERE A.学生编号 = B.学号 AND A.课程编号 = '2' AND A.考试编号 = '0801'
AND B.学号 IN (
SELECT 学号 FROM 班级信息 A, 学生信息 B
WHERE A.班级编号= B.所属班级 AND A.班级编号 = '20050101'
)
嵌套子查询
SELECT A.成绩编号, A.分数, B.姓名
FROM 成绩信息 A, 学生信息 B
WHERE A.学生编号 = B.学号 AND A.课程编号 = '2' AND A.考试编号 = '0801'
AND B.学号 IN (
SELECT 学号 FROM 班级信息 A, 学生信息 B
WHERE A.班级编号= B.所属班级 AND A.辅导员 = 1
SELECT 辅导员编号 FROM 辅导员信息 where 姓名 = '王艳'
)
xml查询
声明 数据 xml
FOR XML 子句
将从数据库系统检索出的数据显示成xml的格式
EXISTS关键系查询
查看数据查询是否有结果
交查询INTERSECT
差查询EXCEPT