SQL多表连接查询

来源:互联网 发布:unity3d 烟花粒子特效 编辑:程序博客网 时间:2024/06/05 18:49

1.简单连接

  简单连接是使用逗号将两个或多个表进行连接。其查询结果是通过笛卡尔积产生的表——就是由一个基表中每一行与另一个基表的每一行连接所生成的表。查询结果的行数是两个基表行数的积。而使用WHERE条件,可以有效过滤掉无意义的数据。

 表别名问题

    如果为表指定了别名,那么语句中的所有子句都必须使用别名。而不允许再使用实际的表名。

2.JOIN连接

select * from tableA join_type tableB [on(join_condition)] 其中的join_type指出连接类型,常用的连接包括内连接、自然连接、外连接和自连接。连接查询中的on(join_condition)指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等组成。

1)内连接

    inner join 或者join关键字。内连接在on子句中使用比较运算符时,在连接表的某些列之间进行比较,并列出表中与连接条件相匹配的数据行。同时使用内连接可以实现两个以上表的查询。eg:

select em.employee_id,dep.department_name,job_title

from employees em inner join jobs

 on   em.job_id = jobs.job_id

inner join departments dep

on em.department_id = dep.department_id

where em.job_id = 'IT_PROG'

 2)自然连接

即多表查询时会将具有相同名称的列进行连接。用户不需要明确指定进行连接的列。而在实际使用时候很少使用,因为多表之间即使有相同名称的列,但表达的意义可能不一样。

3)外连接

   使用内连接进行多表查询时,返回的查询结果集仅包含符合查询条件(where搜索条件或having条件)和连接条件的行。内连接消除了与另一个表中的任何行不匹配的行,而外连接扩展了内连接的结果集。外连接除了返回所有匹配的行外,还会返回一部分或全部不匹配的行,这主要取决于外连接的种类。左外连接(left outer join 或 left join),右外连接(right outer join 或 right join)和全外连接(full outer join或full join)三种。

    外连接不仅列出与连接条件相匹配的行,还列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行

     在执行完全外连接时,系统开销很大,因为会执行一个完全的左连接查询和右连接查询,然后再将结果集合并,并消除重复的记录行。

4)自连接

 有时候,用户可能拥有自引用式外键。自引用式外键意味着表中的一个列是该表主键的的一个外键。通常自连接时候在from中会两次指定同一个表,分别为表指定别名。eg:

select em1.last_name "manager" ,em2.last_name "employee"

from employees em1 left join employees em2

on em1.employee_id = em2.manager_id

order by em1.employee_id;

0 0
原创粉丝点击