java面试题网

普通会员

183

帖子

7

回复

89

积分

楼主
发表于 2019-08-26 15:24:39 | 查看: 5020| 回复: 0

SQL92语法

SQL92语法

连接查询:也可以叫跨表查询,需要关联多个表进行查询

显示每个员工信息,并显示所属的部门名称

select ename, dname from emp, dept;

SQL> select ename, dname from emp, dept;

ENAME DNAME

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

SMITH ACCOUNTING

ALLEN ACCOUNTING

WARD ACCOUNTING

JONES ACCOUNTING

MARTIN ACCOUNTING

BLAKE ACCOUNTING

CLARK ACCOUNTING

SCOTT ACCOUNTING

KING ACCOUNTING

TURNER ACCOUNTING

ADAMS ACCOUNTING

JAMES ACCOUNTING

FORD ACCOUNTING

MILLER ACCOUNTING

SMITH RESEARCH

ALLEN RESEARCH

WARD RESEARCH

JONES RESEARCH

MARTIN RESEARCH

BLAKE RESEARCH

CLARK RESEARCH

SCOTT RESEARCH

KING RESEARCH

TURNER RESEARCH

ADAMS RESEARCH

JAMES RESEARCH

FORD RESEARCH

MILLER RESEARCH

SMITH SALES

ALLEN SALES

WARD SALES

JONES SALES

MARTIN SALES

BLAKE SALES

CLARK SALES

SCOTT SALES

KING SALES

TURNER SALES

ADAMS SALES

JAMES SALES

FORD SALES

MILLER SALES

SMITH OPERATIONS

ALLEN OPERATIONS

WARD OPERATIONS

JONES OPERATIONS

MARTIN OPERATIONS

BLAKE OPERATIONS

CLARK OPERATIONS

SCOTT OPERATIONS

KING OPERATIONS

TURNER OPERATIONS

ADAMS OPERATIONS

JAMES OPERATIONS

FORD OPERATIONS

MILLER OPERATIONS

已选择56行。

以上输出,不正确,输出了56条数据,其实就是两个表记录的成绩,这种情况我们称为:“笛卡儿乘积”,出现错误的原因是:没有指定连接条件

指定连接条件

select emp.ename, dept.dname from emp, dept where emp.deptno=dept.deptno;

也可以使用别名

select e.ename, d.dname from emp e, dept d where e.deptno=d.deptno;

SQL92语法_www.wityx.com

以上结果输出正确,因为加入了正确的连接条件

以上查询也称为 “内连接”,只查询相等的数据(连接条件相等的数据)

取得员工和所属的领导的姓名

select e.ename, m.ename from emp e, emp m where e.mgr=m.empno;

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

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 * 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

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, m.ename from emp e, emp m where e.mgr=m.empno;

ENAME ENAME

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

SMITH FORD

ALLEN BLAKE

WARD BLAKE

JONES KING

MARTIN BLAKE

BLAKE KING

CLARK KING

SCOTT JONES

TURNER BLAKE

ADAMS SCOTT

JAMES BLAKE

FORD JONES

MILLER CLARK

已选择13行。

以上称为“自连接”,只有一张表连接,具体的查询方法,把一张表看作两张表即可,如以上示例:第一个表emp e代码了员工表,emp m代表了领导表,相当于员工表和部门表一样


文章来自www.wityx.com,转载请注明出处!原文地址http://www.wityx.com/post/1055_1_1.html

您需要登录后才可以回帖 登录 | 立即注册

java面试题网www.wuliaokankan.cnjava建站系统提供技术支持V2.1 网站地图 © 2016-2018