sql的数据查询2

连接查询

(多表)连接查询

SELECT [ ALL|DISTINCT ]<目标列表达式1>[,<目标列表达式2>,... ]
FROM <表名或视图名1> [,<表名或视图名2> ,... ]
[ WHERE <元组选择条件表达式> ]

连接条件与元组选择条件进行AND(与)操作

缺少连接条件,在多表的广义笛卡尔积进行查询

案例:查询选修课程号为”C01”的学生学号和成绩

SELECT SNO,GRADE

FROM SC

WHERE CNO='C01';

案例:查询选修课程号为”C01”的学生姓名和成绩

SELECT SN,GRADE

FROM SC,S

WHERE CNO='C01' AND SC.SNO=S.SNO;

查询语句是在SC表和S表的广义笛卡尔积的结果进行的选择,并不是两个表自然连接的结果。因此在笛卡尔积的基础上筛选出两个表的学号sno值相同,同时课程号CNO = ‘C01’的元组

案例:查询选修“数据结构”课程的学生的学号、姓名和成绩

SELECT S.SNO,SN,GRADE

FROM S,SC,C

WHERE S.SNO=SC.SNO AND

C.CNO=SC.CNO AND

CN='数据结构';

注意:select子句中学号属性名sno前加上表名可以是S或SC,否则,无法识别SNO来自于哪张基本表,在语句执行时会报错

外连接查询

 在SQL语句中,外连接在FROM子句中指定,其语法规则如下:

 FROM  <左关系>  LEFT | RIGHT | FULL  [OUTER] JOIN<右关系>

               ON<连接条件>

说明:

• 左外连接:  LEFT [OUTER] JOIN

• 右外连接:  RIGHT [OUTER] JOIN

• 全外连接:  FULL [OUTER] JOIN

• 连接条件可包括对参与连接的关系进行元组选择的条件

案例:查询所有学生姓名及选修课程号为“C01”的成绩,没有选修该课程的学生,成绩显示为空

SELECT SN,GRADE

FROM S LEFT OUTER JOIN SC

ON SC.SNO=S.SNOANDCNO='C01' 

•常规连接查询也称为内连接查询, 在FROM子句中指定,其语法规则如下:

    FROM  <左关系> [ INNER] JOIN   <右关系>  ON <连接条件>

案例:查询选修“数据结构”课程的学生的学号、姓名和成绩

SELECT S.SNO, SN, GRADE

FROM (S INNER JOIN SC ON S.SNO=SC.SNO )

              INNER JOIN C   ON  C.CNO=SC.CNO

WHERE    CN='数据结构';

自身连接查询

案例:查询每门课程的间接先修课程号(即先修课程的先修课程号)

SELECT FIRST.CNO, SECOND.PC
 FROM C FIRST,  C SECOND
 WHERE  FIRST.PC=SECOND.CNO;

连接查询

SQL连接查询的典型格式:

        SELECT A1,A2,… ,Am

        FROM R1, R2, … ,Rn

        WHERE F

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容