SQL:1999基本语法
SELECT [DISTINCT] * | 列名称 [AS]别名,........FROM 表名称1 [别名1][CROSS JOIN表名称2 别名2]|[NATURAL JOIN表名称2 别名2][ JOIN表名称2 别名2 USING (关联列名称)][ JOIN表名称2 别名2 on (关联条件)][LEFT | RIGHT | FULL OUTER JOIN 表2 ON (关联条件)][WHERE 条件(s)][ORDER BY 排序的字段 1,ASC| DESC,排序的字段2 ASC| DESC,....]
- 交叉连接(CROSS IN)
语法:
SELECT [DISTINCT] * | 列名称 [AS]别名,........FROM 表名称1 [别名1][CROSS JOIN表名称2 别名2]|[WHERE 条件(s)][ORDER BY 排序的字段 1,ASC| DESC,排序的字段2 ASC| DESC,....]
使用交叉连接门生笛卡尔积
SELECT * FROM emp e CROSS JOIN dept d;
使用where消除
SELECT * FROM emp e CROSS JOIN dept dWHERE e.deptno=d.deptno;
- 自然连接(NATURAL JOIN)
语法:
SELECT [DISTINCT] * | 列名称 [AS]别名,........FROM 表名称1 [别名1][NATURAL JOIN表名称2 别名2][WHERE 条件(s)][ORDER BY 排序的字段 1,ASC| DESC,排序的字段2 ASC| DESC,....]
使用自然连接
SELECT * FROM emp NATURAL JOIN dept;--自然连接可以直接消除笛卡尔积
- USING子句
语法:
SELECT [DISTINCT] * | 列名称 [AS]别名,........FROM 表名称1 [别名1] [ JOIN表名称2 别名2 USING (关联列名称)][WHERE 条件(s)][ORDER BY 排序的字段 1,ASC| DESC,排序的字段2 ASC| DESC,....]
使用USING子句
SELECT * FROM emp JOIN dept USING (deptno);--USING后字段要用()
- ON子句
语法:
SELECT [DISTINCT] * | 列名称 [AS]别名,........FROM 表名称1 [别名1] [ JOIN表名称2 别名2 on (关联条件)][WHERE 条件(s)][ORDER BY 排序的字段 1,ASC| DESC,排序的字段2 ASC| DESC,....]
使用ON子句:
SELECT * FROM emp e JOIN dept d ON (e.deptno=d.deptno) ;--ON后是条件--()可以省略
- 外连接
语法:
SELECT [DISTINCT] * | 列名称 [AS]别名,........FROM 表名称1 [别名1][LEFT | RIGHT | FULL OUTER JOIN 表2 ON (关联条件)][WHERE 条件(s)][ORDER BY 排序的字段 1,ASC| DESC,排序的字段2 ASC| DESC,....]
左外连接:
SELECT * FROM emp e LEFT OUTER JOIN dept dON(e.deptno=d.deptno);--使用ON消除笛卡尔积
SELECT * FROM emp e LEFT OUTER JOIN dept dUSING (deptno);--使用USING消除笛卡尔积
右外连接:
SELECT * FROM emp e RIGHT OUTER JOIN dept dON(e.deptno=d.deptno);--使用ON消除笛卡尔积
SELECT * FROM emp e RIGHT OUTER JOIN dept dUSING (deptno);--使用USING消除笛卡尔积
全外连接:
SELECT *FROM emp e FULL OUTER JOIN dept dON(e.deptno=d.deptno);--使用ON消除笛卡尔积
SELECT *FROM emp e FULL OUTER JOIN dept dUSING (deptno);--使用USING消除笛卡尔积