MySQL关联查询原理主要包括以下几个方面:
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
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/639324.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复