MySQL多表联查_关联查询
联合查询
1、概念:联合查询用于合并两个或多个SELECT语句的结果集,通过UNION操作符可以实现这一目的。
2、语法:
“`sql
SELECT column_list FROM table1
UNION
SELECT column_list FROM table2;
“`
3、注意事项:
列数和数据类型必须匹配。
默认会去除重复记录,使用UNION ALL可以保留所有记录。
4、示例:
“`sql
SELECT name, age FROM staff1 WHERE origo=’重庆’
UNION
SELECT name, age FROM user;
“`
交叉连接(笛卡尔积)
1、概念:交叉连接返回两个表的笛卡尔积,即所有可能的行组合。
2、语法:
“`sql
SELECT * FROM table1, table2;
“`
3、注意事项:由于结果集大小为两表行数的乘积,通常不适用于大数据量的表。
4、示例:
“`sql
SELECT user.name, career.name FROM user, career;
“`
内连接查询
1、概念:内连接只返回两个表中存在匹配关系的记录。
2、语法:
“`sql
SELECT * FROM table1 [INNER] JOIN table2 ON table1.column = table2.column;
“`
3、隐式与显式内连接:隐式使用逗号分隔表名,显式使用JOIN关键字。
4、示例:
“`sql
SELECT u.name, c.name FROM user u INNER JOIN career c ON u.career_id = c.id;
“`
外连接查询
1、概念:外连接返回左表或右表中的所有记录,以及满足匹配条件的交集部分。
2、语法:
左连接:SELECT * FROM left_table LEFT JOIN right_table ON condition;
右连接:SELECT * FROM left_table RIGHT JOIN right_table ON condition;
3、示例:
“`sql
SELECT u.name, c.name FROM user u LEFT JOIN career c ON u.career_id = c.id;
“`
自连接查询
1、概念:自连接是一张表与其自身的连接。
2、语法:
“`sql
SELECT * FROM table AS alias1, table AS alias2 WHERE alias1.column = alias2.column;
“`
3、示例:
“`sql
SELECT e1.name AS employee_name, e2.name AS manager_name FROM employee e1, employee e2 WHERE e1.manager_id = e2.id;
“`
子查询规则
1、概念:子查询是在另一个SQL语句内部的SELECT语句。
2、分类:标量子查询、相关子查询等。
3、示例:
“`sql
SELECT name FROM employee WHERE salary > (SELECT AVG(salary) FROM employee);
“`
FAQs
Q1: 如何在MySQL中进行多表查询?
A1: 在MySQL中,可以使用JOIN关键字进行多表查询,要查询用户和其职业信息,可以使用以下语句:
“`sql
SELECT u.name, c.name FROM user u INNER JOIN career c ON u.career_id = c.id;
“`
Q2: 什么是笛卡尔积,如何使用?
A2: 笛卡尔积是两个表所有可能的行组合,虽然可以通过CROSS JOIN生成,但其结果集会非常大,因此在实际应用中需谨慎使用。
“`sql
SELECT * FROM user CROSS JOIN career;
“`
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1101112.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复