多表查询操作

  多表查询操作

 

1.       相等查询

 

SELECT emp.empno, emp.ename, emp.deptno, dept.deptnodept.loc

 FROM emp, dept

 WHERE emp.deptno = dept.deptno ;

2.       不等查询

 

SELECT e.empno, e.ename, e.sal, s.losal, s.hisal, s.grade

FROM emp e, salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal ;

 

 

 

3.       自连接

 

SELECT e1.ename ||' 的老板是  '|| e2.ename

FROM emp e1, emp e2

WHERE e1.mgr = e2.empno ;

 

 

4.       外连接

 

· 左连接

        SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc

FROM emp e, dept d

WHERE e.deptno = d.deptno(+) ;

左连接是(+)在右边,表示以左边的为主,左边的所有记录都应给予显示

 

SQL> @1

 

     EMPNO ENAME          DEPTNO     DEPTNO LOC

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

      7782 CLARK              10         10 NEW YORK

      7839 KING               10         10 NEW YORK

      7934 MILLER             10         10 NEW YORK

      7369 SMITH              20         20 DALLAS

      7876 ADAMS              20         20 DALLAS

      7902 FORD               20         20 DALLAS

      7788 SCOTT              20         20 DALLAS

      7566 JONES              20         20 DALLAS

      7499 ALLEN              30         30 CHICAGO

      7698 BLAKE              30         30 CHICAGO

      7654 MARTIN             30         30 CHICAGO

      7900 JAMES              30         30 CHICAGO

      7844 TURNER             30         30 CHICAGO

      7521 WARD               30         30 CHICAGO

                                         40 BOSTON

 

 

 

· 右连接

        SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc

FROM emp e, dept d

WHERE e.deptno(+) = d.deptno ;

 

SQL> @1

 

     EMPNO ENAME          DEPTNO     DEPTNO LOC

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

      7782 CLARK              10         10 NEW YORK

      7839 KING               10         10 NEW YORK

      7934 MILLER             10         10 NEW YORK

      7369 SMITH              20         20 DALLAS

      7876 ADAMS              20         20 DALLAS

      7902 FORD               20         20 DALLAS

      7788 SCOTT              20         20 DALLAS

      7566 JONES              20         20 DALLAS

      7499 ALLEN              30         30 CHICAGO

      7698 BLAKE              30         30 CHICAGO

      7654 MARTIN             30         30 CHICAGO

      7900 JAMES              30         30 CHICAGO

      7844 TURNER             30         30 CHICAGO

      7521 WARD               30         30 CHICAGO

                                         40 BOSTON

 

15 rows selected.

 

SQL:1999语法(可能都不可以使用WHERE子句)

 

自然连接

 

SELECT e.empno, e.ename, e.job, d.loc, d.deptno

FROM emp e

CROSS JOIN dept d ;

 

自然连接,也即笛卡尔积,显示查询的全部56条记录 = 4 * 14

 

USING (不能够使用WHERE子句)

SELECT e.empno, e.ename, e.job, deptno, d.loc

FROM emp e

JOIN dept d

USING(deptno) ;

下列语句报错

SELECT e.empno, e.ename, e.job, d.deptno, d.loc

FROM emp e

JOIN dept d

USING(deptno) ;

 

注意:USING所引用的列前不能够出现表明

 

使用ON子句

 

SELECT e.empno, e.ename, e.job, d.deptno, d.loc

FROM emp e

JOIN dept d

ON e.deptno = d.deptno ;

 

左外连接(相当于左连接)其中不能够出现WHERE 子句

 

        SELECT e.empno, e.ename, e.job, e.deptno, d.deptno, d.loc

FROM emp e

LEFT OUTER JOIN dept d

ON e.deptno = d.deptno ;

 

 

SQL> SELECT e.empno, e.ename, e.job, e.deptno, d.deptno, d.loc

  2  FROM emp e

  3  LEFT OUTER JOIN dept d

  4  ON e.deptno = d.deptno ;

 

     EMPNO ENAME      JOB           DEPTNO     DEPTNO LOC

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

      7934 MILLER     CLERK             10         10 NEW YORK

      7839 KING       PRESIDENT         10         10 NEW YORK

      7782 CLARK      MANAGER           10         10 NEW YORK

      7902 FORD       ANALYST           20         20 DALLAS

      7876 ADAMS      CLERK             20         20 DALLAS

      7788 SCOTT      ANALYST           20         20 DALLAS

      7566 JONES      MANAGER           20         20 DALLAS

      7369 SMITH      CLERK             20         20 DALLAS

      7900 JAMES      CLERK             30         30 CHICAGO

      7844 TURNER     SALESMAN          30         30 CHICAGO

      7698 BLAKE      MANAGER           30         30 CHICAGO

      7654 MARTIN     SALESMAN          30         30 CHICAGO

      7521 WARD       SALESMAN          30         30 CHICAGO

      7499 ALLEN      SALESMAN          30         30 CHICAGO

 

14 rows selected.

 

 

右外连接

 

        SELECT e.empno, e.ename, e.job, e.deptno, d.deptno, d.loc

FROM emp e

RIGHT OUTER JOIN dept d

ON e.deptno = d.deptno ;

 

SQL> @1

 

     EMPNO ENAME      JOB           DEPTNO     DEPTNO LOC

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

      7782 CLARK      MANAGER           10         10 NEW YORK

      7839 KING       PRESIDENT         10         10 NEW YORK

      7934 MILLER     CLERK             10         10 NEW YORK

      7369 SMITH      CLERK             20         20 DALLAS

      7876 ADAMS      CLERK             20         20 DALLAS

      7902 FORD       ANALYST           20         20 DALLAS

      7788 SCOTT      ANALYST           20         20 DALLAS

      7566 JONES      MANAGER           20         20 DALLAS

      7499 ALLEN      SALESMAN          30         30 CHICAGO

      7698 BLAKE      MANAGER           30         30 CHICAGO

      7654 MARTIN     SALESMAN          30         30 CHICAGO

      7900 JAMES      CLERK             30         30 CHICAGO

      7844 TURNER     SALESMAN          30         30 CHICAGO

      7521 WARD       SALESMAN          30         30 CHICAGO

                                                   40 BOSTON

 

15 rows selected.

 

 

全外连接(查出两张表中的所有记录)

 

SELECT e.empno, e.ename, e.job, e.deptno, d.deptno, d.loc

FROM emp e

FULL OUTER JOIN dept d

ON e.deptno = d.deptno ;

 

 

范式:

1.       第一范式

所有满足要求的数据库表都必须要满足第一范式

 

2.       第二范式

在第一范式的基础上,去除了 部分依赖

       部分依赖,也即在一张表中,存在复合主键,并且有某些字段又依赖于复合主键的某一个 ,故应该拿出被依赖的复合主键,以及依赖于它的字段拿出来,重新做张表,并在原来的表中,使脱离的哪一个主键成为 外键

 

3 第三范式

       在第二范式的基础上,去除了传递依赖

       传递依赖:是指一个或多个属性依赖于非主键的属性

由于是依赖于非主键的属性,故不是 部分依赖,

如果依赖的是复合主键的一个,则是 部分依赖

 

如果一个表只有一个主键,则其自动是第二范式的

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值