oracle两表子查询,Oracle02-查询(多表,子查询)

多表查询:

两个和两个以上表或是视图的查询。

SQL> select a1.ename,a1.sal,a2.dname from emp a1 ,dept a2 where a1.deptno=a2.deptno;

ENAME              SAL DNAME

---------- ----------- --------------

SMITH           800.00 RESEARCH

ALLEN          1600.00 SALES

WARD           1250.00 SALES

JONES          2975.00 RESEARCH

MARTIN         1250.00 SALES

BLAKE          2850.00 SALES

CLARK          2450.00 ACCOUNTING

SCOTT          3000.00 RESEARCH

KING           5000.00 ACCOUNTING

TURNER         1500.00 SALES

ADAMS          1100.00 RESEARCH

JAMES           950.00 SALES

FORD           3000.00 RESEARCH

MILLER         1300.00 ACCOUNTING

14 rows selected

首先是:

SQL> select a1.ename,a1.sal,a2.dname from emp a1 ,dept a2;

ENAME              SAL DNAME

---------- ----------- --------------

SMITH           800.00 ACCOUNTING

ALLEN          1600.00 ACCOUNTING

WARD           1250.00 ACCOUNTING

JONES          2975.00 ACCOUNTING

MARTIN         1250.00 ACCOUNTING

BLAKE          2850.00 ACCOUNTING

CLARK          2450.00 ACCOUNTING

SCOTT          3000.00 ACCOUNTING

KING           5000.00 ACCOUNTING

TURNER         1500.00 ACCOUNTING

ADAMS          1100.00 ACCOUNTING

JAMES           950.00 ACCOUNTING

FORD           3000.00 ACCOUNTING

MILLER         1300.00 ACCOUNTING

SMITH           800.00 RESEARCH

ALLEN          1600.00 RESEARCH

WARD           1250.00 RESEARCH

JONES          2975.00 RESEARCH

MARTIN         1250.00 RESEARCH

BLAKE          2850.00 RESEARCH

ENAME              SAL DNAME

---------- ----------- --------------

CLARK          2450.00 RESEARCH

SCOTT          3000.00 RESEARCH

KING           5000.00 RESEARCH

TURNER         1500.00 RESEARCH

ADAMS          1100.00 RESEARCH

JAMES           950.00 RESEARCH

FORD           3000.00 RESEARCH

MILLER         1300.00 RESEARCH

SMITH           800.00 SALES

ALLEN          1600.00 SALES

WARD           1250.00 SALES

JONES          2975.00 SALES

MARTIN         1250.00 SALES

BLAKE          2850.00 SALES

CLARK          2450.00 SALES

SCOTT          3000.00 SALES

KING           5000.00 SALES

TURNER         1500.00 SALES

ADAMS          1100.00 SALES

JAMES           950.00 SALES

FORD           3000.00 SALES

ENAME              SAL DNAME

---------- ----------- --------------

MILLER         1300.00 SALES

SMITH           800.00 OPERATIONS

ALLEN          1600.00 OPERATIONS

WARD           1250.00 OPERATIONS

JONES          2975.00 OPERATIONS

MARTIN         1250.00 OPERATIONS

BLAKE          2850.00 OPERATIONS

CLARK          2450.00 OPERATIONS

SCOTT          3000.00 OPERATIONS

KING           5000.00 OPERATIONS

TURNER         1500.00 OPERATIONS

ADAMS          1100.00 OPERATIONS

JAMES           950.00 OPERATIONS

FORD           3000.00 OPERATIONS

MILLER         1300.00 OPERATIONS

56 rows selected

产生了笛卡儿积,4*14=56;

然后:2个表添一个条件消除笛卡儿积(n张表要n-1个条件才能消除笛卡儿积)

SQL> select a1.ename,a1.sal,a2.dname from emp a1 ,dept a2 where a1.deptno=a2.deptno;

子查询:指嵌入在其他sql语句中的select语句。

注意:把条件多的放查询语句放到后面,sql从后往前。

单行子查询:

如:

查询和SMITH在一个部门的员工

1,查询SMITH所在部门:

SQL> select deptno from emp where ename='SMITH';

DEPTNO

------

20

2,

SQL> select * from emp where deptno =(select deptno from emp where ename='SMITH');

EMPNO ENAME      JOB         MGR HIREDATE            SAL        COMM DEPTNO

----- ---------- --------- ----- ----------- ----------- ----------- ------

7369 SMITH      CLERK      7902 1980/12/17       800.00                 20

7566 JONES      MANAGER    7839 1981/4/2        2975.00                 20

7788 SCOTT      ANALYST    7566 1987/4/19       3000.00                 20

7876 ADAMS      CLERK      7788 1987/5/23       1100.00                 20

7902 FORD       ANALYST    7566 1981/12/3       3000.00                 20

多行查询:

查询和部门10号工作相同的员工

1,查询部门10号的工作

SQL> select job from emp where deptno='10';

JOB

---------

MANAGER

PRESIDENT

CLERK

2,  SQL> select * from emp where  job in (select distinct job from emp where deptno='10' );   EMPNO ENAME      JOB         MGR HIREDATE            SAL        COMM DEPTNO ----- ---------- --------- ----- ----------- ----------- ----------- ------  7782 CLARK      MANAGER    7839 1981/6/9        2450.00                 10  7698 BLAKE      MANAGER    7839 1981/5/1        2850.00                 30  7566 JONES      MANAGER    7839 1981/4/2        2975.00                 20  7839 KING       PRESIDENT       1981/11/17      5000.00                 10  7934 MILLER     CLERK      7782 1982/1/23       1300.00                 10  7900 JAMES      CLERK      7698 1981/12/3        950.00                 30  7876 ADAMS      CLERK      7788 1987/5/23       1100.00                 20  7369 SMITH      CLERK      7902 1980/12/17       800.00                 20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值