当我们需要的数据需从两张及以上的表中查询出来时,这时就需要连接查询。
语法:
SELECT<字段>FROM<表名>WHERE<表名 1 >.<字段> = <表名 2 >.字段;
例子:
# 查询员工和对应的部门名。SELECTlast_name,department_nameFROMemployees,departmentsWHEREemployees.department_id = departments.department_id;# 查询员工名、工种号、工种名。SELECTlast_name,employees.job_id,job_titleFROMemployees,jobsWHEREemployees.job_id = jobs.job_id;# 查询有奖金的员工名、部门名。SELECTlast_name,department_nameFROMemployees,departmentsWHEREdepartments.department_id = employees.department_idAND employees.commission_pct IS NOT NULL;# 查询城市名中第二个字符为 o 的部门名和城市名。SELECTdepartment_name,cityFROMdepartments,locationsWHEREdepartments.location_id = locations.location_idAND city LIKE '_o%';# 查询每个城市的部门个数。SELECTCOUNT(*) AS 数量,cityFROMlocations,departmentsWHERElocations.location_id = departments.location_idGROUP BYcity;# 查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资。SELECTdepartment_name,departments.manager_id,MIN( salary )FROMdepartments,employeesWHEREdepartments.department_id = employees.department_idAND employees.commission_pct IS NOT NULLGROUP BYdepartment_name,departments.manager_id;# 查询每个工种的工种名和员工的个数,并且按员工的个数降序。SELECTjob_title,COUNT(*)FROMemployees,jobsWHEREemployees.job_id = jobs.job_idGROUP BYjob_titleORDER BYCOUNT(*) DESC;# 查询员工名、部门名和所在的城市。SELECTlast_name,department_name,cityFROMemployees,departments,locationsWHEREemployees.department_id = departments.department_idAND departments.location_id = locations.location_id;# 查询员工的工资和工资级别(非等值连接)。SELECTsalary,grade_levelFROMemployees,job_gradesWHEREsalary BETWEEN job_grades.lowest_salAND job_grades.highest_sal;
自连接,连接的两张表都是同一张表。是一种特殊的等值连接。
例子:
# 自连接# 查询员工名和上级的名称SELECTe.employee_id,e.last_name,m.employee_id,m.last_nameFROMemployees AS e,employees AS mWHEREe.manager_id = m.manager_id;
参考:
