当我们需要的数据需从两张及以上的表中查询出来时,这时就需要连接查询。
语法:
SELECT
<字段>
FROM
<表名>
WHERE
<表名 1 >.<字段> = <表名 2 >.字段;
例子:
# 查询员工和对应的部门名。
SELECT
last_name,
department_name
FROM
employees,
departments
WHERE
employees.department_id = departments.department_id;
# 查询员工名、工种号、工种名。
SELECT
last_name,
employees.job_id,
job_title
FROM
employees,
jobs
WHERE
employees.job_id = jobs.job_id;
# 查询有奖金的员工名、部门名。
SELECT
last_name,
department_name
FROM
employees,
departments
WHERE
departments.department_id = employees.department_id
AND employees.commission_pct IS NOT NULL;
# 查询城市名中第二个字符为 o 的部门名和城市名。
SELECT
department_name,
city
FROM
departments,
locations
WHERE
departments.location_id = locations.location_id
AND city LIKE '_o%';
# 查询每个城市的部门个数。
SELECT
COUNT(*) AS 数量,
city
FROM
locations,
departments
WHERE
locations.location_id = departments.location_id
GROUP BY
city;
# 查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资。
SELECT
department_name,
departments.manager_id,
MIN( salary )
FROM
departments,
employees
WHERE
departments.department_id = employees.department_id
AND employees.commission_pct IS NOT NULL
GROUP BY
department_name,
departments.manager_id;
# 查询每个工种的工种名和员工的个数,并且按员工的个数降序。
SELECT
job_title,
COUNT(*)
FROM
employees,
jobs
WHERE
employees.job_id = jobs.job_id
GROUP BY
job_title
ORDER BY
COUNT(*) DESC;
# 查询员工名、部门名和所在的城市。
SELECT
last_name,
department_name,
city
FROM
employees,
departments,
locations
WHERE
employees.department_id = departments.department_id
AND departments.location_id = locations.location_id;
# 查询员工的工资和工资级别(非等值连接)。
SELECT
salary,
grade_level
FROM
employees,
job_grades
WHERE
salary BETWEEN job_grades.lowest_sal
AND job_grades.highest_sal;
自连接,连接的两张表都是同一张表。是一种特殊的等值连接。
例子:
# 自连接
# 查询员工名和上级的名称
SELECT
e.employee_id,
e.last_name,
m.employee_id,
m.last_name
FROM
employees AS e,
employees AS m
WHERE
e.manager_id = m.manager_id;
参考: