设为首页 加入收藏

TOP

Oracle day03 连表查询(一)
2019-09-17 18:49:49 】 浏览:53
Tags:Oracle day03 连表 查询

为什么要表连接进行查询?

查询部门名称为SALES的员工信息

如何进行表的连接查询?

两种方式:Sql 1992 sql1999

sql1992
sql分类
    1.笛卡尔积 (表乘表)
    2.等值连接 表的连接条件使用“=”
    3.非等值连接 表的连接条件使用“>、>=、 <、<=、!=、any等”
    4.自连接 自己连接自己
    5.外连接
        1.左外连接,“(+)”在等号右边
        2.右外连接,“(+)”在等号左边
        3.“(+)”在哪一边的列,该表就补充null

--1992
--语法
/*

SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;


where后跟表的连接条件
连接类型:
      1.笛卡尔积 (表X表)

 select * from emp,dept;


      2.等值连接 (列=列)
             --查询员工的部门名称      

select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno

      3.非等值连接 (列!=列)
             --查询员工的薪水等级

select e.ename,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal

 


      4.自连接 (表自己连接自己)
            --查询员工上司的姓名:以"xxx的上司是xxx"方式显示

 select e1.ename||'的上司是'|| e2.ename from emp e1,emp e2 where e1.mgr = e2.empno

      5.外连接 (在满足一张表的内容都显示的基础上,连接另外一张表,如果连接匹配则正常显示,连接不匹配,另外一张表补null)

  select e.ename,d.dname from emp e, dept d where e.deptno = d.deptno (+

            “(+)” 在右边,我们称这次查询为“左外连接查询”
            “(+)” 在左边,我们成这次查询为“右外连接查询”
            “(+)” 在等号哪一边,哪张表就补null


--sql 1992 缺点一:表的连接条件和表的过滤放在了一起
--查询员工工资大于2000的部门名称

select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno and e.sal >2000

--sql 1992 缺点:外连接不太容易识别

 

sql1999
sql分类
    1.cross join  交叉连接 (笛卡尔积) ,不需要on关键字
    2.natural join  自然连接 (找两个表中相同的列,进行等值匹配),不需要on关键字
    3.inner join 内连接
        1)必须有on关键字,on表示连接条件
        2)inner关键字可以省略
    4.outer join 外连接,outer关键字可以省略
        1) left outer join
        2) right outer join
        3) full outer join

--sql 1999

语法:

select a.column,b.column from 表A 连接类型 join 表B on 连接条件


连接类型:
1.CROSS JOIN  交叉连接,就是笛卡尔积

select * from emp cross join dept

2.NATURAL JOIN  自然连接,找到两张表中具有相同名称列,进行等值连接

   select * from emp natural join dept

3.INNER JOIN  内连接 (inner关键字可以省略)
        --等值连接

  select e.ename,d.dname from emp e  INNER JOIN  dept d on e.deptno = d.deptno where e.sal > 2000


        --非等值连接

   select e.ename,s.grade from emp e INNER JOIN salgrade s on e.sal between s.losal and s.hisal


        --自连接

        select e1.ename || '的上司是' || e2.ename from emp e1 INNER JOIN emp e2 on e1.mgr = e2.empno

 


--外连接(outer关键字可以省略)
4.LEFT OUTER JOIN

 select * from emp e LEFT OUTER J
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle数据库常用SQL函数 下一篇说说MySQL索引

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目