MySql的连接查询

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

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`;

查询结果:

 

转载于:https://www.cnblogs.com/ITSeed/p/11167226.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值