Oracle中两个表的联查实战(oracle中2个表联查)

在Oracle数据库中,联查是一种非常常见和重要的数据操作方式。它可以让我们在查询数据时利用两个或多个表的数据来获取更多的信息。在本文中,我们将介绍如何在Oracle数据库中使用联查来连接两个表的数据,并通过一个实战示例来演示具体的操作步骤。

1. 创建两个测试表

我们需要在Oracle数据库中创建两个测试表,这两个表将用于我们的联查实例。以下是两个表的DDL语句:

CREATE TABLE DEPARTMENT (

DEPTNO NUMBER(2) PRIMARY KEY,

DEPTNAME VARCHAR2(14) NOT NULL,

LOCATION VARCHAR2(13) NOT NULL

);

CREATE TABLE EMPLOYEE (

EMPNO NUMBER(4) PRIMARY KEY,

ENAME VARCHAR2(10) NOT NULL,

JOB VARCHAR2(9) NOT NULL,

MGR NUMBER(4),

HIREDATE DATE NOT NULL,

SAL NUMBER(7,2),

COMM NUMBER(7,2),

DEPTNO NUMBER(2) NOT NULL,

CONSTRNT FK_EMP_DEPT FOREIGN KEY (DEPTNO)

REFERENCES DEPARTMENT (DEPTNO)

ON DELETE CASCADE

);

DEPARTMENT表表示一个公司的部门信息,其中DEPTNO是部门编号,DEPTNAME是部门名称,LOCATION是部门所在地。EMPLOYEE表则表示公司的员工信息,其中各个字段的意义如上所述,MGR表示员工的上级,DEPTNO表示员工所属的部门。

2. 插入测试数据

接下来,我们需要向DEPARTMENT和EMPLOYEE表中插入一些测试数据以便我们进行联查实例演示。以下是插入测试数据的脚本:

INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, LOCATION) VALUES (10, ‘ACCOUNTING’, ‘NEW YORK’);

INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, LOCATION) VALUES (20, ‘RESEARCH’, ‘DALLAS’);

INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, LOCATION) VALUES (30, ‘SALES’, ‘CHICAGO’);

INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, LOCATION) VALUES (40, ‘OPERATIONS’, ‘BOSTON’);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7369, ‘SMITH’, ‘CLERK’, 7902, TO_DATE(’17-12-1980′, ‘DD-MM-YYYY’), 800, NULL, 20);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7499, ‘ALLEN’, ‘SALESMAN’, 7698, TO_DATE(’20-2-1981′, ‘DD-MM-YYYY’), 1600, 300, 30);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7521, ‘WARD’, ‘SALESMAN’, 7698, TO_DATE(’22-2-1981′, ‘DD-MM-YYYY’), 1250, 500, 30);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7566, ‘JONES’, ‘MANAGER’, 7839, TO_DATE(‘2-4-1981’, ‘DD-MM-YYYY’), 2975, NULL, 20);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7654, ‘MARTIN’, ‘SALESMAN’, 7698, TO_DATE(’28-9-1981′, ‘DD-MM-YYYY’), 1250, 1400, 30);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7698, ‘BLAKE’, ‘MANAGER’, 7839, TO_DATE(‘1-5-1981’, ‘DD-MM-YYYY’), 2850, NULL, 30);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7782, ‘CLARK’, ‘MANAGER’, 7839, TO_DATE(‘9-6-1981’, ‘DD-MM-YYYY’), 2450, NULL, 10);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7788, ‘SCOTT’, ‘ANALYST’, 7566, TO_DATE(’19-4-1987′, ‘DD-MM-YYYY’), 3000, NULL, 20);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7839, ‘KING’, ‘PRESIDENT’, NULL, TO_DATE(’17-11-1981′, ‘DD-MM-YYYY’), 5000, NULL, 10);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7844, ‘TURNER’, ‘SALESMAN’, 7698, TO_DATE(‘8-9-1981’, ‘DD-MM-YYYY’), 1500, 0, 30);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7876, ‘ADAMS’, ‘CLERK’, 7788, TO_DATE(’23-5-1987′, ‘DD-MM-YYYY’), 1100, NULL, 20);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7900, ‘JAMES’, ‘CLERK’, 7698, TO_DATE(‘3-12-1981’, ‘DD-MM-YYYY’), 950, NULL, 30);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7902, ‘FORD’, ‘ANALYST’, 7566, TO_DATE(‘3-12-1981’, ‘DD-MM-YYYY’), 3000, NULL, 20);

INSERT INTO EMPLOYEE (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7934, ‘MILLER’, ‘CLERK’, 7782, TO_DATE(’23-1-1982′, ‘DD-MM-YYYY’), 1300, NULL, 10);

此时我们已经成功的创建了两个测试表,并且向这两个测试表中插入了一些测试数据。现在我们可以开始进行联查实例操作了。

3. Oracle两个表的联查实战

在实战操作中,我们将使用以下SQL语句通过INNER JOIN以及LEFT OUTER JOIN联查操作将DEPARTMENT表和EMPLOYEE表的数据进行联结,从而得到员工所属的部门信息。

— INNER JOIN

SELECT EMPLOYEE.EMPNO, EMPLOYEE.ENAME, EMPLOYEE.JOB, DEPARTMENT.DEPTNAME, DEPARTMENT.LOCATION

FROM EMPLOYEE

INNER JOIN DEPARTMENT ON EMPLOYEE.DEPTNO = DEPARTMENT.DEPTNO

ORDER BY EMPLOYEE.EMPNO DESC;

— LEFT OUTER JOIN

SELECT EMPLOYEE.EMPNO, EMPLOYEE.ENAME, EMPLOYEE.JOB, DEPARTMENT.DEPTNAME, DEPARTMENT.LOCATION

FROM EMPLOYEE

LEFT OUTER JOIN DEPARTMENT ON EMPLOYEE.DEPTNO = DEPARTMENT.DEPTNO

ORDER BY EMPLOYEE.EMPNO DESC;

在以上两个SQL语句中,我们先使用INNER JOIN和DEPARTMENT进行联查操作,查询出所有员工所属的部门名称和部门所在地。接着使用LEFT OUTER JOIN和DEPARTMENT进行联查操作,查询出所有员工所属的部门名称和部门所在地,其中如果员工所属的部门信息不存在,则结果集中将显示NULL。

4. 总结

通过以上联查操作实例,我们可以看到在Oracle数据库中,利用INNER JOIN和LEFT OUTER JOIN操作可以更加便捷的联结两个或多个表的数据,从而得到更为丰富的查询结果。这对于数据在关系型数据库中存储而言非常重要,同样也为我们进行一些数据的深度分析提供了很有利的基础,并且让我们更好的发现数据中的规律,从而进行更为深入的分析和决策。


数据运维技术 » Oracle中两个表的联查实战(oracle中2个表联查)