- 等值连接
- 表别名
- 多表等值连接
- 自然连接、USING子句、ON子句
- 自关联
- 非等值连接
等值连接
select table1.column, table2.column
from table1, table2
where table1.column1 = table2.column2
其中select子句中可选择多个表的多个字段,from子句中表名字段来自多个表,而where子句为连接条件,table1.column1 = table2.column2 即具体的连接条件
表别名
为了提高性能、避免字段名冲突,在多表连接查询的select子句中,应该以“表名字.字段名”的方式命名
select e.first_name,j.job_title,e.salary
from employees e,jobs j
where e.job_id = j.job_id
多表等值连接
select e.first_name,j.job_title,d.department_name,e.salary
from employees e,jobs j,departments d
where e.job_id=j.job_id and e.department_id = d.department_id
自然连接、USING子句、ON子句
自然连接
select e.first_name,j.job_title,e.salary
from employees e NATURAL JOIN jobs j
注意的是,如果两个表的字段名相同,但数据类型不同,用自然连接会返回一个错误
自然连接会同时对字段名和类型相同的字段进行等值连接(如果有多个字段相同,会同时对这些字段进行等值连接)
USING 子句
select e.first_name,j.job_title,e.salary
from employees e JOIN jobs j
USING(job_id)
注意,不能在连接字段(如job_id)前面加上表的前缀
ON子句
select e.first_name,j.job_title,e.salary
from employees e JOIN jobs j
ON(e.job_id=j.job_id)
ON子句更加灵活,用于连接的两个字段,其字段名可以不同
自关联
select e.first_name 员工名字,b.first_name 老板名字
from employees e,employees b
where e.manager_id = b.employee_id
非等值连接
select e.first_name,e.salary,eg.e_grade
from employees e, egrade eg
where e.hire_date BETWEEN eg.hire_start AND eg.hire_end
网友评论