超连接与嵌套连接_图文

联接查询
? 普通连接

? 超联接查询 ? 内联接查询 ? 左联接查询 ? 右联接查询 ? 全联接查询

普通连接 相当于 内联接
选课 学生

学生, 选课

普通连接形式 select * from 学生, 选课 where 学生.学号=选课.学号 and 成绩>80 内连接形式 select * from 学生 JOIN 选课 ON 学生.学号=选课.学号 where 成绩>80 select * from 学生 INNER JOIN 选课 ON 学生.学号=选课.学号

学生, 选课,课程 普通连接形式 SELECT …; FROM 学生, 选课,课程; WHERE学生.学号=选课.学号 and 选课.课程号=课程.课程号

内连接形式1 SELECT …; FROM 学生 JOIN 选课 JOIN 课程 ON 选课.课程号=课程.课程号; ON 学生.学号=选课.学号 注意:多个表用“JOIN”语句联接的顺序要与联接条件“ON”的顺序恰好相反。

内连接形式2 SELECT …;

FROM ( 学生 JOIN 选课 ON 学生.学号=选课.学号) JOIN 课程 ON 选课.课程号=课程.课程号

注意:筛选记录条件必须写在WHERE子句中

超联接----左联接(内连记录+左表不满足条件的记录)

select * from 学生

left JOIN 选课 ON 学生.学号=选课.学号

超联接----右联接(内连记录+右表不满足条件的记录)

select * from 学生 right JOIN 选课 ON 学生.学号=选课.学号

超联接----全联接(内连记录+左右表不满足条件的记录)

select * from 学生 full JOIN 选课 ON 学生.学号=选课.学号

练习(改错) 7.2.2

Student.学号

OPEN DATABASE sdb

ON

SELECT 学号,姓名,AVG(成绩) 平均成绩,COUNT(成绩) 选课门数;
FROM student JOIN sc OF student.学号 = sc.学号; WHERE 性别 = "女" AND AVG(成绩) >= 75; GROUP BY 学号 ; HAVING AVG(成绩) >= 75; ORDER BY 4 desc ; INTO TABLE three
Student.学号

练习(改错) 72.2.1

SELECT 部门表.部门号, 部门名, 销售表.商品号, 商品名,一季度利润 + 二季度利润 + 三季度利润 + 四季度利润 as 年销售利润; FROM 部门表, 销售表, 商品代码表 ; ON 销售表.商品号 = 商品代码表.商品号 ; JOIN JOIN ON 部门表.部门号 = 销售表.部门号; WHERE 销售表.年度 = "2006"; ORDER 1, 5; TO TABLE TABA BY 1,5 DESC
INTO

嵌套查询
当Where后条件中的值必须由令一个查询 语句得出时,须在Where中使用子查询。这种 机制叫嵌套查询。

嵌套查询—单值比较1

学生
学号 001 002 003 ... 姓名 李小华 王艳芳 吴海洋 ... 性别 入学成绩 女 525 女 510 男 560 ... ...

例1:查询比李小华的入学成绩高的学生的学号、姓名和入学成绩。
select 学号,姓名,入学成绩; from 学生; where 入学成绩> ( 525

)

单值
select 入学成绩 from 学生 where 姓名="李小华"

比较符号 = <> !=

>

<

>=

<=)

嵌套查询—单值比较2(统计单值)
学生
学号 001 002 003 ... 姓名 李小华 王艳芳 吴海洋 ... 性别 入学成绩 女 525 女 510 男 560 ... ...

例2:查询比平均入学成绩低的学生信息 select *; from 学生; where 入学成绩<

例3:查询比所有女生的入学成绩都高的学生信息 select *; from 学生; where 入学成绩

嵌套查询—多值比较1(all)
例4:查询比所有女生的入学成绩都高的学生信息 select *; from 学生; where 入学成绩 大于所有 女生的入学成绩 > all
大于所有 小于所有

学生
学号 001 002 003 ... 姓名 李小华 王艳芳 吴海洋 ... 性别 入学成绩 女 525 女 510 男 560 ... ...

( Select 入学成绩 from 学生; 多值(集合) Where 性别=“女” )

>all <all

>=all
<=all <>all

大于等于所有
小于等于所有 不等于所有

all 是全称量词

!=all

不等于所有

嵌套查询—多值比较2(any 或 some)
例5:查询与学生001的某一科成绩相等的,其他 学生的学号和课程号。 select 学号,课程号; from 课程; where 成绩 等于某一个 001的成绩 and 学号<>”001”

课程
学号 001 001 002 003 003 004 课程号 C001 C004 C001 C001 C003 C002 成绩 95 85 90 85 86 95

= any

( Select 成绩 from 课程 Where 学号 =“001” );

>any

大于某一个

< any

小于某一个

>= any 大于等于某一个 <= any 小于等于某一个

any 或 some 是存在量词

<> any 不等于某一个
!= any 不等于某一个

嵌套查询—多值比较3 (in)
学生
学号 001 002 003 姓名 李小华 王艳芳 吴海洋 性别 入学成绩 女 525 女 510 男 508

课程
学号 001 001 002 003 003 课程号 C001 C004 C001 C001 C003 成绩 95 85 90 92 86

例6:查询选修了C001课程的学生学号和姓名、性别。 select 学号,姓名,性别; from 学生; Where 学号 在 选修了C001课程的学号集合 in ( Select 成绩 from 课程 Where 学号 =“001” );

学号是选修了C001课程的学号中的某一个 方法2:in 换成 =any 方法3:连接查询

练习(改错) 60.2.2
*该命令文件用来查询与"姚小敏"同一天入住宾馆的每个客户的客户号、 身份证、姓名、工作单位。查询结果输出到表TABC中。 *该命令文件在第3行、第5行、第7行和第8行有错误,打开该命令文件,直 接在错误处修改,不可改变SQL语句的结构和短语的顺序,不允许增加、 删除或合并行。

OPEN DATABASE 宾馆 SELECT 客户.客户号,身份证,姓名,工作单位; FROM 客户 JOIN 入住 WHERE 客户.客户号=入住.客户号 WHERE 入住日期 IN; ON 入住日期; ( SELECT ; FROM 客户,入住; 客户.客户号=入住.客户号 AND 姓名 = "姚小敏" WHERE 姓名 = "姚小敏"); TO TABLE TABC INTO TABLE TABC

练习(改错) 48.2.1

SELECT 零件名称 FROM 零件信息 WHERE 零件号 IN ; = (SELECT 零件号 FROM 使用零件; GROUP BY 项目号 HAVING COUNT(项目号) = 3) ; 零件号 ORDER BY 零件名称 ; INTO FILE results

练习(改错) 39.2.2

SELECT COUNT((现价-买入价)*持有数量) ; FROM stock_sl ; SUM WHERE 股票代码 ; IN ; = (SELECT 股票代码 FROM stock_name ; WHERE "银行" LIKE 股票简称) "银行"$ 股票简称


相关文档

VF sql3 超连接与嵌套连接
查询语句(连接,嵌套)
09.数据库的连接和嵌套查询
vf7-sql连接和嵌套
数据库的连接和嵌套查询实验
计算机基础(13)-表格嵌套及超链接
实验二 表的连接和嵌套查询实验
数据库实验连接查询和嵌套查询
上海财经大学-SQL 连接和嵌套查询
sql连接、嵌套和集合查询
电脑版