关系数据库标准语言SQL--多表查询
[日期:2010-08-30 10:04:18] [字体:大 中 小]
一、联接查询
联接:通过某种条件把多个表联接联接成为一个表
1、两个表的联接查询
情景:明确告诉查询体来自于两个表
select 查询体 from 表1,表2 where 表1.字段=表2.字段 [and 查询条件]
注释:(1)查询体来自于表1和表2
(2)表1.字段=表2.字段是两个表联接查询必备的联接条件,用此来保证在这两个表中有相同的数据记录存在。
(3)联接条件和查询条件必须用 AND 运算符连接
(4)联接查询是可以为表定义别名,格式为:表名 别名
(5)若字段名不唯一,必须加以限定,限定格式是 别名.字段名
例1:从xuesheng和chengji中查询每个学生的姓名,民族和该学生的数学、英语
和信息技术成绩
select 姓名,民族,数学,英语,信息技术 from xuesheng,chengji where xuesheng.学号=chengji.学号
例2: 从xuesheng和chengji 表中找出所有1982年出生的汉族学生记录。查询结果包括学号、姓名、数学、英语和信息技术5个字段,记录按照数学成绩降序排序
select xuesheng.学号,姓名,数学,英语,信息技术 from xuesheng,chengji where xuesheng.学号=chengji.学号 and year(出生日期)=1982 and 民族=\"汉\" order by 数学 desc
2、三个表的联接查询
a)明确告诉从三个表中查询数据
select 查询体 from 表1,表2,表3 where 表1.字段=表2.字段 and 表2.字段=表3.字段
(1) 一般情况下,表2是作为中间表出现的,它既能与表1建立联接又能与表3建立联接。
(2) 三个表联接查询时,需要两个联接条件,但必须用AND 连接起来。
b)明确告诉从两个表中查询数据,但这两个表无法建立联接。此时,必须引入第三个表作为中间媒介表来负责将三个表联接成为一个表,然后再查询数据。
select 查询体 from 表1,表2,表3 where 表1.字段=表2.字段 and 表2.字段=表3.字段
例3:查询每个学生的学号,姓名,选课名称和成绩
select 学生.学号,姓名,课程名,成绩 from 学生,选课,课程;
where 学生.学号=选课.学号 and 选课.课程号=课程.课程号
例4: 查询每个学生的姓名和选课名称
select 学生.学号,姓名,课程名from 学生,选课,课程;
where 学生.学号=选课.学号 and 选课.课程号=课程.课程号
二、嵌套查询(内外层嵌套查询)
情景:查询体只来自于一个表中,但相关的查询条件却涉及到其他的表。
1、某表中某字段值属于/不属于数据集合
select 查询体 from 表1 where 字段 [not] in(select 字段 from 表2)
(1) 查询体只能来自于表1
(2) 内层查询执行速度快于外层查询速度
(3) 外层查询要利用内层查询得到的数据集合
(4) IN 相当于集合运算符 ∈
例:查询选过课的学生信息
select * from 学生 where;
学号 in(select distinct 学号 from 选课)
例:查询没有选过课的学生信息
select * from 学生 where;
学号 not in(select distinct 学号 from 选课)
2、从一个表里找出所有记录中的最大或最小信息
select * from 表 where 字段=(select max(字段)|min(字段) from 表)
(1)内外层查询中数据源是同一个表
(2)计算最大或最小值的字段与外层查询参与比较的字段应是同一个字段
3、在一个表中按某个属性相同划分组别,然后在各组内找出本组中的最大或最小信息
select * from 表 A where 字段=(select max(字段)|min(字段) from 表 B WHERE B.字段=A.字段)
(1) 内层查询要利用外层查询提供的条件
(2) 外层查询使用内层查询得到的结果进行比较运算
(3) 内层查询中的 B.字段=A.字段是一种变相的分组
(4) 这种查询是典型的内外层互相关嵌套查询
三、超级联接查询(考虑最全、类型最多的联接)
select 查询体 from 表1[full|left|right|inner] join 表2 on 表1.字段=表2.字段
[where 查询条件][group by][order by][into|to]
(1) on承接联接条件,where 承接查询条件
(2) where group by order by 三个子句出现的次序
(3) full join 所联接表的数据全部出现在查询结果中
(4) left join 侧重于左表
(5) right join 侧重于右表
(6) inner join=join 只有满足联接条件的数据才出现在查询结果中
因篇幅问题不能全部显示,请点此查看更多更全内容