多表查詢
(1) 笛卡爾積
一個表的每一行和第二張表的每一行串連
select* from 表一名,表二名
(2) 等值串連
Select * from emp e,dept d where e.deptno=d.deptno
(3) 非等值串連
Select * from emp e,dept d where e.deptno between ‘01’ and ‘09’
(4) 內串連和外串連
內串連:將滿足條件的多表串連結果顯示,不滿足條件的不顯示
Select ename, job, e.deptno, d.DEPTNO from emp e INNER JOIN dept d where e.deptno=d.deptno
外串連:將滿足條件的多表串連結果顯示,不滿足條件的也顯示 左外串連 右外串連 mysql不支援全外串連
左外串連
Select ename, job, e.deptno, d.DEPTNO from emp e LEFT OUTER JOIN dept d on e.deptno=d.deptno
右外串連
Select ename, job, e.deptno, d.DEPTNO from emp e RIGHT OUTER JOIN dept d USING(DEPTNO) where e.deptno>'01'
(5) 自串連
SELECT * FROM emp d,emp f WHERE d.EMPNO=f.MGR
(6) 分組函數
最小數: MIN()
最大數: MAX()
求和: SUM()
平均數: AVG()
計數: COUNT()
(7) 分組查詢 GROUP BY
SELECT DEPTNO,count(JOB) FROM emp GROUP BY DEPTNO;
分組函數不能放在 where 子句中可以在 having 句中
(8) 6 個關鍵詞的執行順序
FROM WHERE GROUPBY HAVING SELECT ORDER BY
子查詢
(1) 子查詢用小括弧括起來
SELECT ename FROM emp WHERE (SELECT SAL FROM emp WHERE ENAME='jack')<sal
(2) WHERE子句中的子查詢,子查詢可以包括分組函數
子查詢可以在 WHERE HAVING FROM UPDATE的SET
分組函數可以在 SELECT HAVING GROUP BY
SELECT ename FROM emp WHERE (SELECT SAL FROM emp WHERE ENAME = 'jack' ) < salSELECT ename, empno, sal FROM emp WHERE sal = (SELECT MIN(SAL) FROM emp )
(3) 多行子查詢運算子
IN
查詢每個部門工資最低的員工姓名,員工編號,員工薪資
SELECT ename, empno, sal from emp where sal in (SELECT MIN(sal) FROM emp GROUP BY deptno)
ANY 只要滿足結果任意一行即可
查詢大於所有部門最低工資的員工姓名,員工編號,員工薪資
SELECT ename, empno, sal from emp where sal >ANY (SELECT MIN(sal) FROM emp GROUP BY deptno)
ALL
SELECT ename, empno, sal from emp where sal >ALL (SELECT MIN(sal) FROM emp GROUP BY deptno)
(4)相互關聯的子查詢
SELECT dname, (SELECT count(empno) from emp WHERE emp.deptno=dept.deptno GROUP BY emp.deptno ) FROM dept