mysql--子查询、连表查询
在 MySQL 中,子查询和连表查询(又叫联接查询)是两种常见的数据查询方式。
子查询(Subquery)
1.标量子查询:
SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
--这个查询查找那些薪水高于平均薪水的员工。
2.列子查询:
SELECT name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');
--这个查询查找所有在 "New York" 办公地点的部门中的员工。
3.行子查询
SELECT name FROM employees WHERE (department_id, job_id) = (SELECT department_id, job_id FROM departments WHERE location = 'New York' LIMIT 1);
--这个查询查找所有与特定部门和工作匹配的员工。
2. 连表查询(Join)
连表查询(Join)是将多个表按某些条件连接在一起查询的方式。MySQL 支持多种类型的联接操作,包括 INNER JOIN
、LEFT JOIN
、RIGHT JOIN
和 FULL OUTER JOIN
。
- INNER JOIN:返回两个表中符合连接条件的记录(交集)。
- LEFT JOIN:返回左表所有记录和右表匹配的记录,如果右表没有匹配的记录,结果中会包含
NULL
。 - RIGHT JOIN:返回右表所有记录和左表匹配的记录,如果左表没有匹配的记录,结果中会包含
NULL
。
INNER JOIN:
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;
这个查询返回员工和他们所属部门的名字,只有那些在部门中有记录的员工才会被返回。
LEFT JOIN:
以左驱动表employees为主
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;
这个查询返回所有员工的名字以及他们所属部门的名字。如果某个员工没有部门,会显示 NULL
。
RIGHT JOIN:
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id;
这个查询返回所有部门的名字以及部门中所有员工的名字。如果某个部门没有员工,会显示 NULL
。