多表查询

2018-09-20  本文已影响0人  Zdigi

等值连接

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  
上一篇下一篇

猜你喜欢

热点阅读