1. 相等查询
SELECT emp.empno, emp.ename, emp.deptno, dept.deptno,dept.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. 第三范式
在第二范式的基础上,去除了传递依赖
传递依赖:是指一个或多个属性依赖于非主键的属性
由于是依赖于非主键的属性,故不是 部分依赖,
如果依赖的是复合主键的一个,则是 部分依赖
如果一个表只有一个主键,则其自动是第二范式的