1.知识点:能够对比以下的录屏进行阅读

SQL> --等值连接
SQL> --查询员工信息: 员工号 姓名 月薪 部门名称
SQL> select empno,ename,sal,dname
2 from emp,dept
3 where emp.deptno=dept.deptno; SQL> --不等值连接
SQL> --查询员工信息: 姓名 月薪 工资级别
SQL> select ename,sal,grade
2 from emp e,salgrade s
3 where e.sal between s.losal and s.hisal; SQL> --外连接
SQL> -- 外连接解决的问题:当条件不成立时。任然希望在结果中包括不成立的记录
SQL> -- 左外连接: where d.deptno=e.deptno 当不成立时,等号左边代表的表的信息任然被包括
SQL> -- 写法: where d.deptno=e.deptno(+)
SQL> -- 右外连接: where d.deptno=e.deptno 当不成立时,等号右边代表的表的信息任然被包括
SQL> -- 写法:where d.deptno(+)=e.deptno
SQL> --按部门统计员工人数: 部门号 部门名称 人数
SQL> --错误的列子:没有员工的部门,没有显示
SQL> select d.deptno,d.dname,count(e.empno)
2 from dept d,emp e
3 where d.deptno=e.deptno
4 group by d.deptno,d.dname;
SQL> --上面这个样例改正版:使用了左外连接
SQL> select d.deptno,d.dname,count(e.empno)
2 from dept d,emp e
3 where d.deptno=e.deptno(+)
4 group by d.deptno,d.dname; SQL> --自连接
SQL> --查询员工信息:***的老板是***
SQL> select e.ename||'的老板是'||b.ename
2 from emp e,emp b
3 where e.mgr=b.empno;
SQL> --核心:利用表的别名。将同一张表视为多张表 SQL> --使用层次查询的原因:自连接不太适合操作大表
SQL> --层次查询:对同一张表的前后两次操作,进行连接
SQL> --层次查询:遍历一棵树
SQL> select level,empno,ename,mgr --level:伪列,Oracle自己主动加上的列。在层次查询中表示节点的深度
2 from emp
3 connect by prior empno=mgr --连接条件:上一次查询的empno = 下一次查询的mgr
4 start with mgr is null --从根開始遍历整个树(在这个样例中,根即为老板号为空)
5 order by 1;

2.在Sqlplus下实际运行的结果录屏:

SQL> host cls

SQL> --等值连接
SQL> --查询员工信息: 员工号 姓名 月薪 部门名称
SQL> desc dept
名称 是否为空? 类型
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13) SQL> select empno,ename,sal,dname
2 from emp,dept
3 where emp.deptno=dept.deptno; EMPNO ENAME SAL DNAME
---------- ---------- ----- --------------
7369 SMITH 800 RESEARCH
7499 ALLEN 1600 SALES
7521 WARD 1250 SALES
7566 JONES 2975 RESEARCH
7654 MARTIN 1250 SALES
7698 BLAKE 2850 SALES
7782 CLARK 2450 ACCOUNTING
7788 SCOTT 3000 RESEARCH
7839 KING 5000 ACCOUNTING
7844 TURNER 1500 SALES
7876 ADAMS 1100 RESEARCH EMPNO ENAME SAL DNAME
---------- ---------- ----- --------------
7900 JAMES 950 SALES
7902 FORD 3000 RESEARCH
7934 MILLER 1300 ACCOUNTING 已选择14行。 SQL> ed
已写入 file afiedt.buf 1 select empno,ename,sal,dname
2 from emp e,dept d
3* where e.deptno=d.deptno
SQL> / EMPNO ENAME SAL DNAME
---------- ---------- ----- --------------
7369 SMITH 800 RESEARCH
7499 ALLEN 1600 SALES
7521 WARD 1250 SALES
7566 JONES 2975 RESEARCH
7654 MARTIN 1250 SALES
7698 BLAKE 2850 SALES
7782 CLARK 2450 ACCOUNTING
7788 SCOTT 3000 RESEARCH
7839 KING 5000 ACCOUNTING
7844 TURNER 1500 SALES
7876 ADAMS 1100 RESEARCH EMPNO ENAME SAL DNAME
---------- ---------- ----- --------------
7900 JAMES 950 SALES
7902 FORD 3000 RESEARCH
7934 MILLER 1300 ACCOUNTING 已选择14行。 SQL> host cls SQL> --不等值连接
SQL> --查询员工信息: 姓名 月薪 工资级别
SQL> select * from tab; TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE SQL> select * from salgrade; GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999 SQL> select ename,sal,grade
2 from emp e,salgrade s
3 where e.sal between s.losal and s.hisal; ENAME SAL GRADE
---------- ----- ----------
SMITH 800 1
JAMES 950 1
ADAMS 1100 1
WARD 1250 2
MARTIN 1250 2
MILLER 1300 2
TURNER 1500 3
ALLEN 1600 3
CLARK 2450 4
BLAKE 2850 4
JONES 2975 4 ENAME SAL GRADE
---------- ----- ----------
SCOTT 3000 4
FORD 3000 4
KING 5000 5 已选择14行。 SQL> host cls SQL> --外连接
SQL> --按部门统计员工人数: 部门号 部门名称 人数
SQL> select d.deptno,d.dname,count(e.empno)
2 from dept d,emp e
3 where d.deptno=e.deptno
4 group by d.deptno,d.dname; DEPTNO DNAME COUNT(E.EMPNO)
---------- -------------- --------------
10 ACCOUNTING 3
20 RESEARCH 5
30 SALES 6 SQL> select * from dept; DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON SQL> select * from emp where deptno=40; 未选定行 SQL> /*
SQL> 外连接解决的问题:当条件不成立时。任然希望在结果中包括不成立的记录
SQL> 左外连接: where d.deptno=e.deptno 当不成立时,等号左边代表的表的信息任然被包括
SQL> 写法: where d.deptno=e.deptno(+)
SQL> 右外连接: where d.deptno=e.deptno 当不成立时。等号右边代表的表的信息任然被包括
SQL> 写法:where d.deptno(+)=e.deptno
SQL> */
SQL> select d.deptno,d.dname,count(e.empno)
2 from dept d,emp e
3 where d.deptno=e.deptno(+)
4 group by d.deptno,d.dname; DEPTNO DNAME COUNT(E.EMPNO)
---------- -------------- --------------
10 ACCOUNTING 3
40 OPERATIONS 0
20 RESEARCH 5
30 SALES 6 SQL> ed
已写入 file afiedt.buf 1 select d.deptno,d.dname,count(e.empno)
2 from dept d,emp e
3 where d.deptno=e.deptno(+)
4 group by d.deptno,d.dname
5* order by 1
SQL> / DEPTNO DNAME COUNT(E.EMPNO)
---------- -------------- --------------
10 ACCOUNTING 3
20 RESEARCH 5
30 SALES 6
40 OPERATIONS 0 SQL> host cls SQL> --自连接
SQL> --查询员工信息:***的老板是***
SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 13-7月 -87 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ----- ---------- ----------
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10 已选择14行。 SQL> select e.ename||'的老板是'||b.ename
2 from emp e,emp b
3 where e.mgr=b.empno; E.ENAME||'的老板是'||B.ENAME
----------------------------
FORD的老板是JONES
SCOTT的老板是JONES
JAMES的老板是BLAKE
TURNER的老板是BLAKE
MARTIN的老板是BLAKE
WARD的老板是BLAKE
ALLEN的老板是BLAKE
MILLER的老板是CLARK
ADAMS的老板是SCOTT
CLARK的老板是KING
BLAKE的老板是KING E.ENAME||'的老板是'||B.ENAME
----------------------------
JONES的老板是KING
SMITH的老板是FORD 已选择13行。 SQL> --自连接:利用表的别名,将同一张表视为多张表
SQL> --层次查询
SQL> --自连接不太适合操作大表
SQL>
SQL>
SQL>
SQL> --层次查询: 对同一张表的前后两次操作,进行连接
SQL> select level,empno,ename,mgr
2 from emp
3 connect by prior empno=mgr
4 start with mgr is null
5 order by 1; LEVEL EMPNO ENAME MGR
---------- ---------- ---------- ----------
1 7839 KING
2 7566 JONES 7839
2 7698 BLAKE 7839
2 7782 CLARK 7839
3 7902 FORD 7566
3 7521 WARD 7698
3 7900 JAMES 7698
3 7934 MILLER 7782
3 7499 ALLEN 7698
3 7788 SCOTT 7566
3 7654 MARTIN 7698 LEVEL EMPNO ENAME MGR
---------- ---------- ---------- ----------
3 7844 TURNER 7698
4 7876 ADAMS 7788
4 7369 SMITH 7902 已选择14行。 SQL> spool off

Oracle学习(五):多表查询的更多相关文章

  1. Oracle 数据库基础学习 (五) 多表查询

    多表查询:查询结果需要用到两个或者以上表,此时需要多表连接,产生多表查询 1.内连接(等值连接) 示例:将两个表内容连接显示 select * from dept d, emp e where d.d ...

  2. Oracle系列五 多表查询

    笛卡尔集笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. Oracle 连接 使用连接在多个表中查询数据 ...

  3. oracle学习 第二章 限制性查询和数据的排序 ——03

    这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7  怎样使用转义(escape)操作符 ...

  4. Oracle学习——dmp文件(表)导入与导出

    Oracle学习——dmp文件(表)导入与导出 2014-12-28      0个评论    来源:张文康 廊坊师范学院信息技术提高班 第九期   收藏    我要投稿 前言 关于dmp文件我们用的 ...

  5. oracle 10g 学习之多表查询、分组函数(6)

    笛卡尔集 l  笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l  为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...

  6. MyBatis学习总结(五)——关联表查询的实现

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  7. Oracle中的多表查询(笛卡尔积原理)

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

  8. Oracle数据库之七 多表查询

    七.多表查询 ​ 对于查询在之前已经学过了简单查询.限定查询.查询排序,这些都属于 SQL 的标准语句,而上一章的单行函数,主要功能是为了弥补查询的不足. ​ 而从多表查询开始就正式进入到了复杂查询部 ...

  9. Oracle学习笔记八 表空间

    表空间 表空间是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间 .   分区表 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下 ...

  10. Oracle学习总结_day01_day02_表的创建_增删改查_约束

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 更新: SELECT * FROM (SELECT R ...

随机推荐

  1. poj 3261 求可重叠的k次最长重复子串

    题意:求可重叠的k次最长重复子串的长度 链接:点我 和poj1743差不多 #include<cstdio> #include<iostream> #include<al ...

  2. java高并发程序设计模式-并发级别:阻塞、无障碍、无锁、无等待【转载】

    一般认为并发可以分为阻塞与非阻塞,对于非阻塞可以进一步细分为无障碍.无锁.无等待,下面就对这几个并发级别,作一些简单的介绍. 1.阻塞 阻塞是指一个线程进入临界区后,其它线程就必须在临界区外等待,待进 ...

  3. ZOJ 1015 弦图判定

    一些定义: 弦图是一种特殊图:它的所有极小环都只有3个顶点. 单纯点:该顶点与其邻接点在原图中的导出子图是一个完全图. 图G的完美消去序列:一个顶点序列a1a2a3...an,使得对于每个元素ai,a ...

  4. 高斯消元法求解异或方程组: cojs.tk 539.//BZOJ 1770 牛棚的灯

    高斯消元求解异或方程组: 比较不错的一篇文章:http://blog.sina.com.cn/s/blog_51cea4040100g7hl.html cojs.tk  539. 牛棚的灯 ★★☆   ...

  5. leetcode187. Repeated DNA Sequences

    https://leetcode.com/problems/repeated-dna-sequences/#/description   https://leetcode.com/problems/r ...

  6. [置顶] ubuntu server sudo出现sudo:must be setuid root 完美解决办法。

    1.开机按shift或esc先进行recovery模式 2.选择root命令行模式 3.先执行 #mount -o remount,rw / 这个很重要,网上找的很多资料都不全没有这步造成无法恢复成功 ...

  7. XmlnsDefinitionAttribute Is Pretty Nifty

    When we want to declaratively use our custom controls or reference the types we defined in XAML, we ...

  8. Linux系统中/dev/mtd与/dev/mtdblock的区别,即MTD字符设备和块设备的区别

    转:http://www.crifan.com/linux_system_in__dev__mtd_and__dev__mtdblock_distinction_character_devices_a ...

  9. PHP:同一件事,有太多的方式

    背景 刚接触PHP,发现PHP做一件事有太多的方式,挺灵活的,这或许是PHP的一种设计哲学,也有可能是语言演化的结果,下面举几个例子. 几个例子 在web中嵌入PHP代码. <?php  ?&g ...

  10. [翻译] Blocks and Variables

    Blocks and Variables https://developer.apple.com/library/ios/documentation/cocoa/conceptual/Blocks/A ...