连接检索备忘

等值与非等值连接查询

WHERE 子句指定连接条件
use pangu
select distinct orders.p_id, p_name
from orders, products
where orders.p_id = products.p_id

FROM 子句中用 JOIN 连接符指定连接条件
use pangu
select distinct orders.order_id, p_name
from orders join products on orders.p_id = products.p_id

 非等值连接查询

> >= < <= !=   BETWEEN…AND等

自连接查询
select a.emp_id, a.e_name, b.emp_id, b.e_name, a.hire_date
from employee a join employee b        /*  用 a 和 b 指定了表的两个别名 */
on a.emp_id!=b.emp_id and a.hire_date = b.hire_date
where a.e_name < b.e_name
order by a.hire_date

 外部连接查询
在内部连接中 参与连接的表的地位是平等的 与内部连接相对的方式称为外部连接 Outer Join 在外部连接中 参与连接的表有主从之分 以主表的每行数据去匹配从表的数据列 符合连接条件的数据将直接返回到结果集中  对那些不符合连接条件的列 将被填上 NULL 值后再返回到结果集中
以主表所在的方向区分外部连接 主表在左边 则称为左外部连接 主表在右边 则称为右外部连接
use pangu
select a.order_id, b.f_name,c.p_name
from orders a left join firms b on a.firm_id = b.firm_id
          right join products c on c.p_id = a.p_id
order by a.o_date

运行结果如下
order_id      f_name           p_name
-------- --------------------------------------------------  --------------------
NULL        NULL           管理经验
NULL        NULL           财务报告
00010109     010101           路由器
00021011      神通             网卡

嵌套查询

1、用谓词 EXISTS 连接子查询
例  查询单笔订货量超过 7000 单位的产品名称
use pangu
select p_name
    from products
    where exists  /*  测试订货表中是否存在有单笔订货量超过 7000 单位的产品 */
      (select p_id
       from orders
       where p_id = products.p_id and o_quantity > 7000)
order by p_id

---------看不懂!

2、用 HAVING 子句连接子查询
例  查询平均工资低于公司平均工资的部门编号 名称及其平均工资
use pangu
select department.dept_id, d_name, avg(e_wage) as avg_wage
from department, employee
where department.dept_id = employee.dept_id
group by department.dept_id, d_name
having avg(e_wage) <
      (select avg(e_wage)
       from employee)
order by avg_wage

合并查询

合并查询就是使用 UNION 操作符将来自不同查询的数据组合起来 形成一个具有综合信息的查询结果 UNION 操作会自动将重复的数据行剔除 必须注意的是 参加合并查询的各子查询的使用的表结构应该相同 即各子查询中的数据数目和对应的数据类型都必须相同
例 查询各部门的负责人的编号 姓名
use pangu
select emp_id as  编号, e_name as  名称
from employee
where job_level = '2'
union
select chief_id, d_name
from department
order by 1    /*  按第一列排序 */

你可能感兴趣的:(连接)