DQL数据查询 -- 连接查询

142 阅读4分钟

1、什么是连接查询?

从一张表中单独查询,称为单表查询

A表和B表联合起来查询数据,从A表取出一部分数据,从B表取出一部分数据,这种跨表查询,多张表联合起来查询数据,被称为连接查询

2、为什么要使用连接查询?

因为不同表之间的数据具有不同的用途和字段,连接查询可以将我们需要用到的两个表的不同字段进行关联,从而找到我们有用的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。

3、连接查询的分类?

根据语法的年代分类:

SQL92:1992年出现的语法

SQL99:1999年出现的语法

重点学习SQL99

根据表连接的方式分类:

内连接

等值连接

非等值连接

自连接

外连接

左外连接(左连接)

右外连接(右连接)

全连接(很少用,几乎不用)

注意事项:

当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积,这种现象被称为:笛卡尔积现象(笛卡尔发现的,这是一个数学现象)

通过笛卡尔积现象得出,表的连接次数越多效率越低,尽量避免表的连接次数

在进行表连接时,表起别名,很重要,效率问题

SQL92的缺点:结构不够清晰,表的连接条件,和后期进一步筛选的条件,都放在了where后面

SQL99的有点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后面继续添加where条件

怎么避免笛卡尔积现象?

连接时加条件,满足这个条件的筛选出来。

select name,auth from user,auth where user.auth_id = auth.auth_id;

内连接

1、等值与非等值连接查询

返回两个表中满足连接条件的数据;使用关键字 inner join 表示,也可以简写成 join。

用来连接两个表的条件称为连接条件或连接谓词,当连接运算符为 = 时,称为 等值连接 ,使用其他运算符时称为 非等值连接。

语法:

select 字段列表 from A表 inner join B表 on 连接条件;

注意事项:

inner 关键字可以省略

A表.列名 = B表.列名,等值连接

A表.列名 between B表.列名1 and B表.列名2,非等值连接

可用的连接运算符:>、<、=、>=、<=、!=、between等

其中最常用的是等值连接(=)

举例:

select a.name,b.auth_code from tableA join tableB on tableA.user_id = tableB.user_id; // 等值

select a.name,b.auth_code from tableA join tableB on tableA.user_id != tableB.user_id; // 非等值

外连接

分为左外连接、右外连接、全外连接;

左外连接(left outer join)首先返回左表中所有的数据;对于右表,返回满足连接条件的数据;如果没有相应的数据就返回空值。左外连接使用关键字 left outer join 表示,outer 可以省略,也可以简写成 left join。

右外连接(right outer join)首先返回右表中所有的数据;对于左表,返回满足连接条件的数据,如果没有相应的数据就返回空值。右外连接使用关键字 right outer join 表示,outer 可以省略,也可以简写成 right join。

带有left的是左外连接,又叫左连接,以左边的表为主表,右边的表为次表

带有right的是右外连接,又叫做右连接,以右边的表为主表,左边的表为次表

语法:

select 字段列表 from A表 [left | right] join B表 on 连接条件;

注意事项:

outer:可以省略,带着可读性要好一些

任何一个右连接都有左连接的写法,任何一个左连接都有右连接的写法

右外连接和左外连接可以相互转换

举例:

select a.id,a.name,b.price from tableA as a left join tableB as b on a.id = b.id; // 返回tableA表的所有数据,tableB表满足条件则返回数据,否则返回空值null

select a.id,a.name,b.price from tableA as a right join tableB as b on a.id = b.id; // 返回tableB表的所有数据,tableA表满足条件则返回数据,否则返回空值null

三张表。四张表怎么连接?

语法:

select

...

from

a

join

b

on

a和b的连接条件

join

c

on

a和c的连接条件

right join

d

on

a和d的连接条件

SQL中内连接和外连接可以混合,都可以出现