首页 > 其他 > 详细

多表查询

时间:2019-09-10 11:35:40      阅读:69      评论:0      收藏:0      [点我收藏+]

等值连接:

  表先做笛卡尔积,在进行筛选,筛选条件为等值筛选

  查询员工名字以及部门

    select s1.last_name,s2.name from s_emp s1,s_dept s2 where s1.dept_id=s2.id;

    (量表的公共字段必须声明表名,非公共字段可以不写,为提高可读性,建议都写)

不等值连接

  where后面条件用非等于号连接(<,>,<>,!=,>=,<=)

自连接

  自己连接自己

    select s1.last_name,s2.last_name manager from s_emp s1,s_emp s2 where s1.manager_id=s2.id;

外连接(sql92):

  左外连接

    select s1.last_name,s2.name from s_emp s1,s_dept s2 where s1.dept_id=s2.id(+);

    显示所有员工名字与其对应的部门,以及没有部门的员工名字(s1单独存在,在s2中没有id与s1中的dept_id对应)

  右外连接

    select s1.last_name,s2.name from s_emp s1,s_dept s2 where s1.dept_id(+)=s2.id;

    显示所有员工名字与其对应的部门,以及没有员工的部门名字(s2单独存在,在s1中没有dept_id与s2中的id对应)

自然连接(sql99):

  笛卡尔积:(cross join 专门用来查看笛卡尔积)

    select * from s_emp cross join s_dept;

  筛选:

  等值筛选(要筛选的字段名必须相同)

    (natural join 按照两表所有同名同值字段进行筛选)

    select * from s_emp natural join s_dept;

  (inner join…using(字段))按照指定字段名相同去筛选

    select * from s_emp inner join s_dept using (id);

    按照两表的id值相同进行筛选

  (inner join…on 字段a=字段b)按照指定字段进行筛选(字段名不需要相同)

    select  * from s_dept s1 inner join s_emp s2 on s1.id=s2.dept_id;

    查找s_emp的idept_id与s_dept的id

外连接(outer join)outer可以省略

  左外连接

    select  * from s_dept s1 left outer join s_emp s2 on s1.id=s2.dept_id;

    显示所有员工名字与其对应的部门,以及没有部门的员工名字(s1单独存在,在s2中没有id与s1中的dept_id对应)

  右外连接

    select  * from s_dept s1 right outer join s_emp s2 on s1.id=s2.dept_id;

    显示所有员工名字与其对应的部门,以及没有员工的部门名字(s2单独存在,在s1中没有dept_id与s2中的id对应)

  全外连接

    select  * from s_dept s1 full outer join s_emp s2 on s1.id=s2.dept_id;

       显示所有员工名字与其对应的部门,以及没有员工的部门名字和没有部门的员工名字

多表查询

原文:https://www.cnblogs.com/haoyujun135/p/11495973.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!