inner join(等值连接) 只返回两个表中联结字段相等的行 (inner可以省略不写) left join(左联接) 返回包括左表中的所有记录和(相加的意思)右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
自连接(self join)
需要的信息在一张表上,如何查得每个员工及其上司的工号和姓名
将一张表看做两张表,用表别名区分
其他相关资料
1 .WHERE子句中使用的连接语句,在数据库语言中,被称为 隐性连接 。INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接)WHERE 和INNER JOIN产生的连接关系,没有本质区别,结果也一样。 但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用 显性连接 了。
2 .无论怎么连接,都可以用join子句,但是连接同一个表的时候,注意要定义别名,否则产生错误!
a> inner join:理解为“有效连接”,两张表中都有的数据才会显示left join:理解为“有左显示”,比如on a.field=b.field,则显示a表中存在的全部数据及a\\b中都有的数据,A中有、B没有的数据以null显示
b> right join:理解为“有右显示”,比如on a.field=b.field,则显示B表中存在的全部数据及a\\b中都有的数据,B中有、A没有的数据以null显示
c> full join:理解为“全连接”,两张表中所有数据都显示,实际就是inner +(left-inner)+(right-inner)
3 .join可以分主次表 外联接有三种类型:完全外联,左联,右联.
完全外联包含两张表的所有记录.
左联是以左边的表为主,右边的为辅,右联则相反
4.一般要使得数据库查询语句性能好点遵循一下原则:
在做表与表的连接查询时,大表在前,小表在
不使用表别名,通过字段前缀区分不同表中的字段
查询条件中的限制条件要写在表连接条件前
尽量使用索引的字段做为查询条件
当在INNER JOIN加条件时在ON后面A.ID=B.ID AND A.ID=1和INNER JOIN加条件时在ON后面A.ID=B.ID WHERE A.ID=1有什么区别 ?
【
执行结果完全相同
但是个人认为写成inner join on A.ID=B.ID and A.ID=1这样的执行效率会比较高一些
在A.ID=B.ID WHERE A.ID=1这种情况下where语句会在连接后的结果集中进行筛选,而第一种情况下筛选是在连接之前执行的,在记录很多的情况下会看出不同
】
一.先看一些最简单的例子
例子
Table A
aid adate
1 a1
2 a2
3 a3
TableB
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同样的也有right join
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4