sql join怎么理解(SQL数据库基础系列之七)

本章主要讲解JOIN的用法。演示数据如下:表一T_Student学生信息表,表二T_Score学生成绩表。

sql join怎么理解(SQL数据库基础系列之七)(1)

T_Student学生信息表

sql join怎么理解(SQL数据库基础系列之七)(2)

T_Score学生成绩表

前面都是写的单个表的查询,下面介绍多个表的查询。在正常的业务逻辑中,数据都是按业务类型存放在不同表内,所以在实际的业务中我们会进程用到多表关联查询。有AB两张表,显示红色区域的数据。现在我们设定A表为T_StuNumber、B表为T_Score。

举例1:显示红色区域的数据。以C_StuNumber字段为比较字段。有两种写法,结果都是一样的。

sql join怎么理解(SQL数据库基础系列之七)(3)

求AB表的共有部分

sql join怎么理解(SQL数据库基础系列之七)(4)

关联条件

SELECT T_Student.C_StuNumber , T_Student.C_Name ,

T_Score.I_Art , T_Score.I_Math ,

T_Score.I_English , T_Score.I_Art

FROM T_Student , T_Score

WHERE T_Student.C_StuNumber = T_Score.C_StuNumber

或者这样写:

SELECT T_Student.C_StuNumber , T_Student.C_Name ,

T_Score.I_Art , T_Score.I_Math ,

T_Score.I_English , T_Score.I_Art

FROM T_Student INNER JOIN T_Score

ON T_Student.C_StuNumber= T_Score.C_StuNumber

sql join怎么理解(SQL数据库基础系列之七)(5)

例1-写法1

sql join怎么理解(SQL数据库基础系列之七)(6)

例1-写法2

举例2:显示红色区域的数据。查询T_Student表中所有学生的成绩,如果没有成绩的则缺省为NULL。需要使用JION

sql join怎么理解(SQL数据库基础系列之七)(7)

SELECT T_Student.C_StuNumber , T_Student.C_Name ,

T_Score.I_Art , T_Score.I_Math ,

T_Score.I_English , T_Score.I_Art

FROM T_Student LEFT JOIN T_Score

ON T_Student.C_StuNumber= T_Score.C_StuNumber

sql join怎么理解(SQL数据库基础系列之七)(8)

例2结果

举例3:显示红色区域的数据。以T_Score为基础查询成绩,没有成绩的学生不显示。

sql join怎么理解(SQL数据库基础系列之七)(9)

SELECT T_Student.C_StuNumber , T_Student.C_Name ,

T_Score.I_Art , T_Score.I_Math ,

T_Score.I_English , T_Score.I_Art

FROM T_Student RIGHT JOIN T_Score

ON T_Student.C_StuNumber = T_Score.C_StuNumber

sql join怎么理解(SQL数据库基础系列之七)(10)

例3结果

举例4:显示红色区域的数据。以T_StuNumber为基础查询,排除T_Score表中的学生。

sql join怎么理解(SQL数据库基础系列之七)(11)

SELECT T_Student.C_StuNumber , T_Student.C_Name ,

T_Score.I_Art , T_Score.I_Math ,

T_Score.I_English , T_Score.I_Art

FROM T_Student LEFT JOIN T_Score

ON T_Student.C_StuNumber = T_Score.C_StuNumber

WHERE T_Score.C_StuNumber IS NULL

sql join怎么理解(SQL数据库基础系列之七)(12)

例4结果

举例5:显示红色区域的数据。以T_Score为基础查询,排除T_StuNumber表中的学生。

sql join怎么理解(SQL数据库基础系列之七)(13)

SELECT T_Student.C_StuNumber , T_Student.C_Name ,

T_Score.I_Art , T_Score.I_Math ,

T_Score.I_English , T_Score.I_Art

FROM T_Student RIGHT JOIN T_Score

ON T_Student.C_StuNumber = T_Score.C_StuNumber

WHERE T_Student.C_StuNumber IS NULL

sql join怎么理解(SQL数据库基础系列之七)(14)

例5结果

举例6:显示红色区域的数据。显示T_StuNumber和T_Score两张表内所有的数据。

sql join怎么理解(SQL数据库基础系列之七)(15)

SELECT T_Student.C_StuNumber , T_Student.C_Name ,

T_Score.I_Art , T_Score.I_Math ,

T_Score.I_English , T_Score.I_Art

FROM T_Student FULL OUTER JOIN T_Score

ON T_Student.C_StuNumber = T_Score.C_StuNumber

sql join怎么理解(SQL数据库基础系列之七)(16)

例6结果

举例7:显示红色区域的数据。显示T_StuNumber和T_Score两张表中不重复的数据。

sql join怎么理解(SQL数据库基础系列之七)(17)

SELECT T_Student.C_StuNumber , T_Student.C_Name ,

T_Score.I_Art , T_Score.I_Math ,

T_Score.I_English , T_Score.I_Art

FROM T_Student FULL OUTER JOIN T_Score

ON T_Student.C_StuNumber = T_Score.C_StuNumber

WHERE T_Student.C_StuNumber IS NULL OR T_Score.C_StuNumber IS NULL

sql join怎么理解(SQL数据库基础系列之七)(18)

例7结果

总结:JOIN在多表联合查询中经常被使用,所以请仔细区分LEFT、RIGHT、INNER和FULL OUTER的使用区别。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页