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 d WHERE 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 d ON(e.deptno=d.deptno); --使用ON消除笛卡尔积
SELECT * FROM emp e LEFT OUTER JOIN dept d USING (deptno); --使用USING消除笛卡尔积
右外连接:
SELECT * FROM emp e RIGHT OUTER JOIN dept d ON(e.deptno=d.deptno); --使用ON消除笛卡尔积
SELECT * FROM emp e RIGHT OUTER JOIN dept d USING (deptno); --使用USING消除笛卡尔积
全外连接:
SELECT * FROM emp e FULL OUTER JOIN dept d ON(e.deptno=d.deptno); --使用ON消除笛卡尔积
SELECT * FROM emp e FULL OUTER JOIN dept d USING (deptno); --使用USING消除笛卡尔积