首页 > 数据库技术 > 详细

MySql的连接查询

时间:2019-07-11 09:04:34      阅读:112      评论:0      收藏:0      [点我收藏+]

若一个查询同时涉及到两个或者两个以上的表,则称之为连接查询。常见的包括:等值连接查询,自然连接查询,非等值连接查询,自身连接查询,外连接查询(左右连接)。

1.等值与非等值连接查询(内连接)。

技术分享图片(等值连接的图)

 

参考表数据库表:

技术分享图片技术分享图片(表1与表2做了外键关联)

等值连接概念:当连接运算符为=时为等值连接,相当于两表执行笛卡尔后,取两表连结列值相等的记录。

查询语句:

SELECT A.*, B.*
FROM student A INNER JOIN sc B
ON A.`sno`=B.`sno`;

另外一种写法:

SELECT student.* ,sc.*
FROM student , sc
WHERE student.`sno` = sc.`sno`;

两种写法除了语法上的差别,没有明显差距,主要方便了解。看了大多数博客上写的都是第一次,可能有一定优劣,有兴趣的可以自己去百度下。

查询结果都是一样:

技术分享图片

非等值连接概念:连接规则由等号以外的运算符组成。>,=,<,,>=,<=,<>,!=,between等。

这里只使用大于号">"比较两个表的连接列的值,相当于两表执行笛卡尔后,取一个表大于另一个表的连结列值的记录。(这两个表查询的结果并没有太大的意义,只是为了方便理解概念)

查询语句:

SELECT A.*, B.*
FROM student A INNER JOIN sc B
ON A.`sno`>B.`sno`;

另外一种写法:

SELECT student.* ,sc.*
FROM student , sc 
WHERE student.`sno` >sc.`sno`;

查询的结果仍然一样:

技术分享图片

自然连接:在等值连接中把重复的属性列去掉则为自然连接。(自然连接并不是自连接,两者要有一定区分度)

查询语句(仍然是两种写法,不过我懒的copy了 -_-):

SELECT student.* ,sc.`cno`,sc.`grade`
FROM student , sc
WHERE student.`sno` = sc.`sno`;

查询结果:

技术分享图片

 

2.外连接(左右连接)

左连接概念:指将左表的所有记录与右表符合条件的记录,返回的结果除内连接的结果,还有左表不符合条件的记录,并在右表相应列中填NULL。

技术分享图片

 

查询语句:

SELECT student.*,sc.`cno`,sc.`grade`
FROM student LEFT JOIN sc
ON student.`sno`=sc.`sno`;

技术分享图片

 

右外连接:指将右表的所有记录与左表符合条件的记录,返回的结果除内连接的结果,还有右表不符合条件的记录,并在左表相应列中填NULL。(画图功底太low,就不多此一举了 -_-)

查询语句:

SELECT student.*,sc.`cno`,sc.`grade`
FROM student RIGHT JOIN sc
ON student.`sno`=sc.`sno`;

技术分享图片

 

这里要提示一下:

on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。

而inner jion(内连接)没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

 

3.自身连接(自连接)

自身连接概述:连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,成为表的自身连接,也就是所谓的自连接。

自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候,是自己和自己连接,分别给父表和子表取两个不同的别名,然后附上连接条件。

这里以一个课程的数据库表来做实例。

技术分享图片

查询语句:

SELECT a.*,b.name
FROM SUBJECT a , SUBJECT b
WHERE a.`pno`=b.`cno`;

查询结果:

技术分享图片

有些课程没有先行课,因此我们可以用左关联结合自连接来查询,便于观察。

查询语句:

SELECT a.*,b.name
FROM SUBJECT a LEFT JOIN SUBJECT b
ON a.`pno`=b.`cno`;

查询结果:

技术分享图片

 

MySql的连接查询

原文:https://www.cnblogs.com/ITSeed/p/11167226.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!