您好、欢迎来到现金彩票网!
当前位置:21点 > 子句 >

【进阶】MySQL中的连接查询

发布时间:2019-06-27 05:04 来源:未知 编辑:admin

  前面我们学习了MySQL的一些查询,但是都是针对一个表进行查询,当我们查询的表大于1个,则称为连接查询。连接查询是关系数据库中重要的查询方式,包括交叉连接、内连接、和外连接。

  交叉连接(CROSS JOIN)又称笛卡尔积,即把一张表的每一行与另一张表的每一行连接起来,返回两张表的每一行相连接后所有可能的搭配结果,其连接的结果会产生一些没有意义的记录,所以这种查询实际很少使用。

  说明:交叉连接返回的查询结果集的记录行数等于其所连接的两张表记录行数的乘积,例如tb_student表有10条记录,tb_score有10条记录,这两张表交叉连接后结果集的记录行数是10*10=100条。因此,对于存在大量数据的表,应该避免使用交叉连接。

  内连接(INNER JOIN)通过在查询中设置连接条件来移除交叉连接查询结果集中某些数据行。即在内连接查询中,只有满足条件的记录才能出现在结果集中。

  上面两种表示形式的差别在于:使用INNER JOIN 连接后,FROM子句中的ON子句可用来设置连接表的连接条件,而其他过滤条件则可以在SELECT语句中的WHERE子句中指定,而使用WHERE子句定义连接条件的形式,表与表之间的连接条件和查询时的过滤条件均在WHERE子句中指定。

  比较运算符主要有:=、、、=、=、!=(),“=”表示等值连接,其他都是非等值连接。

  PS.由于内连接系统默认的表连接,因而在FROM子句中可以省略关键字INNER,而只用关键字JOIN连接表。

  PS.可以看到,使用INNER JOIN实现多个表的内连接时,需要在FROM子句的多个表之间连续使用INNER JOIN或JOIN。

  某个表与自身进行连接,称为自表连接或自身连接,简称自连接。使用自连接时,需要为表指定多个不同的别名,且对所有查询字段的引用均必须使用表别名限定,否则SELECT操作会失败。

  自然连接(NATURAL JOIN)只有当连接字段在两张表中的字段名都相同是才可以使用,否则返回的是笛卡尔积的结果集,自然连接在FROM子句中使用关键字NATURAL JOIN。使用NATURAL JOIN进行自然连接时,不需要指定连接条件,系统自动两张表中相同的字段名来连接。

  #用自然连接查询每个学生及其选修课程的情况,要求显示学生学号、姓名、选修的课程号和成绩

  外连接首先将连接的两张表分为基表和参考表,然后再以基表为依据返回满足和不满足连接条件的记录,就好像是在参考表中增加了一条全部由空值组成的“万能行”,它可以和基表中所有不满足连接条件的记录进行连接。

  左外连接,也称左连接(LEFT OUTER JOIN 或 LEFT JOIN),用于返回该关键字左边表(基表)的所有记录,并用这些记录与该关键字右边表(参考表)中的记录进行匹配,如果左表的某些记录在右表中没有匹配的记录,就和右表中的“万能行”连接,即右表对应的字段值均被设置为空值NULL。

  #使用左连接查询所有学生及其选修课程的情况,包括没有选修课程的学生,要求显示学号、姓名、性别、班号、选修的课程号和成绩。

  右外连接,也称右连接(RIGHT OUTER JOIN 或 RIGHT JOIN),以右表为基表,连接方法与左外连接完全一样。即返回右表的所有记录,用这些记录与该关键字左边表(参考表)中的记录进行匹配,如果右表的某些记录在左表中没有匹配的记录,就和左表中的“万能行”连接,即左表对应的字段值均被设置为空值NULL。

  #使用右连接查询所有学生及其选修课程的情况,包括没有选修课程的学生,要求显示学号、姓名、性别、班号、选修的课程号和成绩。

  比较上面的两个连接,可以发现,都是以tb_student为基表,所以它们的查询结果相同。外连接可以在两个连接表没有任何匹配记录的情况下仍返回记录。

  上面就是今天的主题内容了,今天简单分享下MySQL中的连接查询,这对获取目标很有帮助,在工作中,我们常用的就是两个外连接,希望同学们仔细看一下。希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。

http://korinkorin.com/ziju/122.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有