SQL> --等值连接
SQL> --查询员工信息:员工号 姓名 月薪 部门名称
SQL> desc dept名称 是否为空? 类型----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------DEPTNO NOT NULL NUMBER(2)DNAME VARCHAR2(14)LOC VARCHAR2(13)SQL> set linesize 100
SQL> desc dept名称 是否为空? 类型----------------------------------------------------- -------- ------------------------------------DEPTNO NOT NULL NUMBER(2)DNAME VARCHAR2(14)LOC VARCHAR2(13)SQL> select e.empno,e.ename,e.sal,d.dname2 from emp e,dept d3 where e.deptno=d.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> --不等值连接
SQL> --查询员工信息:员工号 姓名 月薪 工资级别
SQL> select * from salgrade;GRADE LOSAL HISAL
---------- ---------- ---------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 SQL> select e.empno,e.ename,e.sal,s.grade2 from emp e,salgrade s3 where e.sal between s.losal and s.hisal;EMPNO ENAME SAL GRADE
---------- ---------- ---------- ---------- 7369 SMITH 800 1 7900 JAMES 950 1 7876 ADAMS 1100 1 7521 WARD 1250 2 7654 MARTIN 1250 2 7934 MILLER 1300 2 7844 TURNER 1500 3 7499 ALLEN 1600 3 7782 CLARK 2450 4 7698 BLAKE 2850 4 7566 JONES 2975 4 EMPNO ENAME SAL GRADE
---------- ---------- ---------- ---------- 7788 SCOTT 3000 4 7902 FORD 3000 4 7839 KING 5000 5 已选择 14 行。SQL> host clsSQL> --外连接
SQL> --按部门统计员工人数:部门号 部门名称 人数
SQL> select d.deptno 部门号,d.dname 部门名称,count(e.empno) 人数2 from emp e,dept d3 where e.deptno=d.deptno4 group by d.deptno,d.dname;部门号 部门名称 人数
---------- -------------- ---------- 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 e.deptno=d.deptno不成立的时候,等号左边的表任然包含在最后的结果中
SQL> 写法:where e.deptno=d.deptno(+)
SQL> 右外连接:当where e.deptno=d.deptno不成立的时候,等号右边的表任然包含在最后的结果中
SQL> 写法: where e.deptno(+)=d.deptno
SQL> */
SQL> select d.deptno 部门号,d.dname 部门名称,count(e.empno) 人数2 from emp e,dept d3 where e.deptno(+)=d.deptno4 group by d.deptno,d.dname;部门号 部门名称 人数
---------- -------------- ---------- 10 ACCOUNTING 3 40 OPERATIONS 0 20 RESEARCH 5 30 SALES 6 SQL> host clsSQL> --自连接
SQL> --查询员工信息: 员工的名字 老板的名字
SQL> set linesize 200
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 19-4月 -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 23-5月 -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> --自连接:通过表的别名,将同一张表视为多张表
SQL> select e.ename 员工的名字,b.ename 老板名字2 from emp e,emp b3 where e.mgr=b.empno;员工的名字 老板名字
---------- ----------
FORD JONES
SCOTT JONES
JAMES BLAKE
TURNER BLAKE
MARTIN BLAKE
WARD BLAKE
ALLEN BLAKE
MILLER CLARK
ADAMS SCOTT
CLARK KING
BLAKE KING 员工的名字 老板名字
---------- ----------
JONES KING
SMITH FORD 已选择 13 行。SQL> select count(*)2 from emp e,emp b;COUNT(*)
---------- 196 SQL> --自连接:不适合操作大表
SQL> --层次查询
SQL> select level,empno,ename,mgr2 from emp3 connect by prior empno=mgr4 start with mgr is null5 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> /*
SQL> 第一层: start with mgr is null
SQL> 第二层: where mgr= 7839---> (7566,****,***)
SQL> 第三层: where mgr in (7566,****,***)
SQL> ****
SQL> */
SQL> spool off
详细解决方案
Oracle数据库(五)多表查询
热度:82 发布时间:2023-09-20 22:40:59.0
相关解决方案
- oracle 分页排序,ssi,该怎么处理
- oracle 最近的时间(而不是前一天的时间) 跪求sql语句 。解决方法
- oracle,该怎么解决
- 在 Hibernate3 查询不到 Oracle 11g 里的记录
- oracle 安装时出现 java tm 异常
- android访问其他数据库(如:oracle、MySql等),希望大家给点建议!解决方案
- oracle 安插 LONG VARCHAR 类型数据
- ORACLE 一条SQL的有关问题
- oracle loadjava如何用
- oracle,该如何处理
- C# + SQL server +oracle QQ交流群142703980解决方法
- 怎么跟踪winform应用程序发送到数据库的sql(oracle、mssql)
- , 每次玩ASP都会遇到一些恶心的有关问题, 这次是:未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运,该怎么解决
- 求解:gridview行值的计算并绑定有关问题(asp.net+oracle)
- Oracle.DataAccess 执行多条sql语句,该如何解决
- VS10连接Oracle的有关问题:"Oracle.DataAccess.Client.OracleConnection"的类型初始值设定项引发错误
- System.Data.OleDb.OleDbException: 未找到 Oracle 客户端和网络组件。
- asp.net oracle 参数化 模糊查询出错,该怎么处理
- Oracle-参数查询有关问题
- oracle,insert 语句插入一条记录后要求,返回主键id値。解决思路
- Oracle 10g下的SQL语句,有点难度.请~[同时向朋友们道歉~]
- 月统计(oracle)解决办法
- 在线紧急等一sql语句(oracle),该怎么处理
- 面试问,为什么jsp+oracle,asp+sql server这样来搭配?该如何处理
- oracle 连接数据库该如何写语句的
- System.Data.OracleClient requires Oracle client software version 8.1.7 or greater
- oracle 防sql注入有关问题!
- 求 Oracle Database Server 'TNS Listener'远路数据投毒漏洞 补丁
- oracle 客户端链接服务端的方式?该如何解决