小言_互联网的博客

MySQL编程笔记:连接查询

369人阅读  评论(0)

连接是区别关系与非关系系统的最重要的标志。通过连接运算符可以实现多个表查询。连接查询主要包括内连接、外连接等。

假设有Student和Grade两个表如下:

| sID | sName  | sDept || gID | gCourse    | gScore |

|1|Paul|CS|    |1|Math|87||2|Oliver|MS|    

 |2|English|95||3|Jack|SE|    

 |3|Physics|76|

|4|Robin|CS|    |7|Philosophy|76|

内连接

内连接(INNER JOIN)使用比较运算符进行表间列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录。

当比较操作符是=时,称为等值连接:

SELECT * FROM Student INNER JOIN Grade ON Student.sID = Grade.gID;

等价于

SELECT * FROM Student,Grade WHERE Student.sID = Grade.gID;

结果如下:

| sID |sName| sDept |gID| gCourse |gScore|

|1| Paul  |CS|  1 |Math|    87 |

|  2 |Oliver| MS    |2| English |95|

|3| Jack  |SE|  3 |Physics|    76 |

可以看出,在内连接查询中,只有满足条件的记录才能出现在结果关系中。

外连接

与内连接不同的是,外连接返回的查询结果集中不仅包含符合连接条件的行,而且还包括左表(左连接)、右表(右连接)或两个表(全外连接)中的所有数据行。

左连接

LEFT JOIN(左连接),即LEFT OUTER JOIN,返回左表的全部记录,即使右表中没有对应匹配记录。

SELECT * FROM Student LEFT JOIN Grade ON Student.sID = Grade.gID;

结果如下:

| sID |sName| sDept |gID| gCourse |gScore|

|1| Paul  |CS|    1 |Math|    87 |

|  2 |Oliver| MS    |2| English |95|

|3| Jack  |SE|    3 |Physics|    76 |

|  4 |Robin| CS    |NULL| NULL    |NULL|

右连接

RIGHT JOIN(右连接),即RIGHT OUTER JOIN,返回右表的全部记录,即使左表中没有对应匹配记录。

SELECT * FROM Student RIGHT JOIN Grade ON Student.sID = Grade.gID;

结果如下:

| sID  |sName| sDept |gID| gCourse    |gScore|

|1| Paul  |CS|  1 |Math|    87 |

|    2 |Oliver| MS    |2| English    |95|

|3| Jack  |SE|  3 |Physics|    76 |

| NULL |NULL| NULL  |7| Philosophy |76|

全连接

FULL JOIN(全连接),即FULL OUTER JOIN,返回左表、右表的全部记录,即使没有对应的匹配记录。

**注意:**MySQL不支持FULL JOIN,不过可以通过UNION关键字来合并 LEFT JOIN 与 RIGHT JOIN来模拟。

SELECT * FROM Student LEFT JOIN Grade ON Student.sID = Grade.gID

UNION SELECT * FROM Student RIGHT JOIN Grade ON Student.sID = Grade.gID;

结果如下:

| sID |sName| sDept |gID| gCourse |gScore|

|    1 | Paul  | CS    |    1 | Math      |    87 |

|    2 | Oliver | MS    |    2 | English    |    95 |

|    3 | Jack  | SE    |    3 | Physics    |    76 |

|    4 | Robin  | CS    | NULL | NULL      |  NULL |

|NULL| NULL  |NULL|    7 |Philosophy|    76 |

另外,如果在一个连接查询中涉及到的两个表是同一个表,这种查询称为自连接查询。为了防止产生二义性,自连接查询中通常对表使用别名。


自学C/C++编程难度很大,如果你想更快提升自己的编程能力和编写项目的水平,欢迎一起共同成长!

小编在主页上传了一些学习C/C++编程的视频教程,有兴趣或者正在学习的小伙伴一定要去看一看哦!会对你有帮助的~

分享(源码、项目实战视频、项目笔记,基础入门教程)

学:

学:


转载:https://blog.csdn.net/weixin_45713725/article/details/115796809
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场