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

查询部门名称为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 JOIN dept d on e.deptno = d.deptno

5.RIGHT OUTER JOIN

  select * from emp e RIGHT OUTER JOIN dept d on e.deptno = d.deptno

6.FULL OUTER JOIN

 select * from emp e FULL OUTER JOIN dept d on e.deptno = d.deptno

--如何进行多表连接

--查询员工的姓名、薪水、部门名称及工资等级

select e.ename, e.sal, d.dname, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno
and e.sal between s.losal and s.hisal
select e.ename, e.sal, d.dname, s.grade
from emp e
join dept d
on e.deptno = d.deptno
join salgrade s
on e.sal between s.losal and s.hisal

Oracle day03 连表查询的更多相关文章

  1. Oracle笔记 多表查询

    Oracle笔记  多表查询   本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...

  2. Oracle的多表查询

    多表查询概念: 所谓多表查询,又称表联合查询,即一条语句涉及到的表有多张,数据通过特定的连接进行联合显示. 基本语法: select column_name,.... from table1,tabl ...

  3. oracle SQL多表查询

    SQL多表查询 1.集合理论 1.1 什么是集合 具有某种特定性质的事物的总体. 集合的特性:无序性.互异性.确定性. 一个集合可以小到从一个表中取出一行中的一列.              1 ro ...

  4. Oracle查询优化-多表查询

    --合并结果集 --1.union all UNION ALL--单纯合并 ; --2.union UNION --将重复结果集合并 ; --------------使用命令窗口执行,查看union与 ...

  5. Oracle之多表查询

    -多表查询 1.交叉连接 select * from t_class for update; select * from t_student for update; select for update ...

  6. oracle数据库单表查询

    今天给大家分享的是关于数据库的单表查询,像单表查询/多表查询/分组查询/子查询,这些方法的使用在实际项目过程中会经常用到,作为一名合格的测试人员如果不会数据库那肯定是不行的,行走江湖可能随时会面临被侮 ...

  7. oracle习题-emp表查询练习

    emp表查询练习 1 查询emp表的全部记录 Select * from emp; 2 查询出每个雇员的编号.姓名.基本工资 Select empno,ename,sal from emp; 3 查询 ...

  8. 关于oracle数据库 跨表查询建立 视图的方法

    工作中很多时候都会遇到需要将两个不同的表空间甚至数据库的表进行联合查询或者建立视图的情况. 不同的表空间查询我们可以通过在将要查询的表前面加上 表空间的对应的用户名来实现,如有两个表空间分别对应两个用 ...

  9. Oracle数据库多表查询,子查询,集合运算

    记得自己要敲o~~~ select * from bonus; select * from salgrade; from dual; --笛卡尔积:两张表的乘积 select * from emp,d ...

随机推荐

  1. Spring源码学习-容器BeanFactory(五) Bean的创建-探寻Bean的新生之路

    写在前面 上面四篇文章讲了Spring是如何将配置文件一步一步转化为BeanDefinition的整个流程,下面就到了正式创建Bean对象实例的环节了,我们一起继续学习吧. 2.初始化Bean对象实例 ...

  2. protobuf是什么?

      ProtoBuf (Google Protocol Buffer)是由google公司用于数据交换的序列结构化数据格式,具有跨平台.跨语言.可扩展特性,类型于常用的XML及JSON,但具有更小的传 ...

  3. su;su -;sudo;sudo -i;sudo su;sudo su - 之间的区别

    今天我们来聊聊su;su -;sudo;sudo -i;sudo su;sudo su -他们之间的区别. su :su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就 ...

  4. 0~5年一个Java程序员的晋升之路

    在程序界流行着一种默认的说法叫“黄金5年”,也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕变成可以以不变应万变 ...

  5. d3.js,初遇

    接触d3完全是由兴趣所致,废话不多说看代码: var dataArray = [23, 13, 21, 14, 37, 15, 18, 34, 30];这是这个图所需要的数据,其实这个柱状图最初不长这 ...

  6. 批处理修改IP

    1. 单次修改IP,批处理文件 newIP.bat @echo =========== Changing to IP : 222.192.41.%1 netsh interface ip set ad ...

  7. Python爬虫实践 -- 记录我的第一只爬虫

    一.环境配置 1. 下载安装 python3 .(或者安装 Anaconda) 2. 安装requests和lxml 进入到 pip 目录,CMD --> C:\Python\Scripts,输 ...

  8. [Swift]LeetCode962. 最大宽度坡 | Maximum Width Ramp

    Given an array A of integers, a ramp is a tuple (i, j) for which i < j and A[i] <= A[j].  The ...

  9. ubuntu---网络管理

    网络配置文件 在 /etc/network/interface auto eth0 iface eth0 inet static address x.x.x.x netmask 255.255.255 ...

  10. TensorFlow tf.gradients的用法详细解析以及具体例子

    tf.gradients 官方定义: tf.gradients( ys, xs, grad_ys=None, name='gradients', stop_gradients=None, ) Cons ...