当前位置:首页 > 行业动态 > 正文

mysql的关联查询

MySQL关联查询是通过多个表之间的共同字段进行连接,从而获取所需数据的一种查询方式。

MySQL关联查询原理主要包括以下几个方面:

mysql的关联查询  第1张

1、笛卡尔积

2、内连接(INNER JOIN)

3、左连接(LEFT JOIN)

4、右连接(RIGHT JOIN)

5、全连接(FULL JOIN)

6、子查询

7、自连接

下面分别详细介绍这些概念及其原理。

1、笛卡尔积

笛卡尔积是指在一个二维表中,将行与行进行组合,得到一个新的二维表,有两个表A和B,它们的结构如下:

表A:

id | name

1  | A
2  | B 

表B:

id | age

1  | 18
2  | 20 

A和B的笛卡尔积为:

id_A | id_B | name | age

1     | 1     | A    | 18
1     | 2     | A    | 20
2     | 1     | B    | 18
2     | 2     | B    | 20 

2、内连接(INNER JOIN)

内连接是两个或多个表根据某个条件进行连接,返回满足条件的记录,有两个表A和B,它们的结构如下:

表A:

id | name

1  | A
2  | B 

表B:

id | age

1  | 18
2  | 20 

使用内连接查询A和B的记录,条件为A.id = B.id:

SELECT A.id, A.name, B.age
FROM A INNER JOIN B ON A.id = B.id; 

结果为:

id | name | age

1  | A    | 18
2  | B    | 20 

3、左连接(LEFT JOIN)

左连接是两个或多个表根据某个条件进行连接,返回满足条件的记录,如果某个表中没有满足条件的记录,则返回NULL,有两个表A和B,它们的结构如下:

表A:

id | name

1  | A
2  | B 

表B:

id | age

1  | 18 

使用左连接查询A和B的记录,条件为A.id = B.id:

SELECT A.id, A.name, B.age
FROM A LEFT JOIN B ON A.id = B.id; 

结果为:

id | name | age

1  | A    | 18
2  | B    | NULL 

可以看到,B表中没有满足条件的记录,所以返回NULL。

4、右连接(RIGHT JOIN)

右连接是两个或多个表根据某个条件进行连接,返回满足条件的记录,如果某个表中没有满足条件的记录,则返回NULL,与左连接相反,右连接会返回右边表中没有满足条件的记录,有两个表A和B,它们的结构如下:

表A:

SELECT id, name FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name, age (假设有age字段) FROM A; id, name 
0