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

查询部门名称为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. 清理 zabbix 历史数据, 缩减 mysql 空间

    zabbix 由于历史数据过大, 因此导致磁盘空间暴涨,  下面是结局方法步骤 1. 停止 ZABBIX SERER 操作 [root@gd02-qa-plxt2-nodomain-web-95 ~] ...

  2. 实验5 Spark SQL编程初级实践

    今天做实验[Spark SQL 编程初级实践],虽然网上有答案,但都是用scala语言写的,于是我用java语言重写实现一下. 1 .Spark SQL 基本操作将下列 JSON 格式数据复制到 Li ...

  3. Vue 学习笔记 — css属性计算的问题

    简书 今天在使用Vue时遇到一个问题:在切换css内联属性时某些特殊属性的计算会有问题,无法得到预期的结果. 例子: https://jsfiddle.net/blqw/cLwau40z/ 上面的页面 ...

  4. Java高级特性--自定义一个StringBuilder的类

    案例讲解--自定义一个StringBuilder的类 一:案例设计介绍 自义一个M定yStringBuilder来实现StringBuilder的功能 二:案例设计 实现append()方法追加字符串 ...

  5. dpkg: 处理软件包 xxx (--configure)时出错 解决办法

    第一步:备份 $ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bk 第二步:新建 $ sudo mkdir /var/lib/dpkg/info 第三步 ...

  6. python-类的定制

    1.看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的.__slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让cl ...

  7. docker常用指令01

    1.进入交互式界面 docker run (--name=xx命名)-i -t ubuntu /bin/bash docker run --name=con1 -i -t ubuntu /bin/ba ...

  8. 1.MySQL(一)

    数据库简介 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 RDBMS 即关系数据库管理系统(Relational Database Management System) 1.特 ...

  9. Spring Boot 2.0 教程 | 配置 Undertow 容器

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 文章首发于个人网站 https://ww ...

  10. child_process 子进程

    创建子进程,使其可以在进程中执行操作,应用系统命令等.nodejs创建子进程有四种方法,分别是spawn,fork,exec,execFile. 区别 : 格式 : spawn和execFile的格式 ...