SQL语句(3)--- 多表连接/子查询/合并查询
2020-11-21 11:51 EniNiemand 阅读(572) 评论(0) 编辑 收藏 举报- NATURAL JOIN:自然连接------两张连接表中要有同样的列名,列里面的值要一致,列的数据类型要一致
- USING :使用连接表里的一个相同的字段来连接
- natural join 和using 不能同时出现在一个select语句中
- ON:将不同列名称的列放到一起,但类型要一致。ON子句中的where---连接之后再过滤 ON子句中的and------过滤之后再连接
- SELF JOIN:自连接
- 非等值连接:就是之前的between and ,将需要比较的字段放到一个范围之中
- 左外/右外/全连接
- 左外连接 LEFT OUTER JOIN:以左边的表为基准,与右边的表进行比较,对比不上则设为空
- 右外连接 RIGHT OUTER JOIN:以右边的表为基准,与左边的表进行比较,对比不上则设为空
- 子查询
- 非关联子查询:子查询语句可以单独拿出来执行
- all:大于最大,小于最小
- any:大于最小,小于最大
- 关联子查询:子查询语句不可以单组拿出来执行
- 例句: update testemp t set t.sal=(select e.sal from emp e where t.empno=e.empno)
- EXISTS 不关注子查询select后面选择的字段,只关注子查询中的where条件语句是否满足,适用于子查询数据比较大的查询
- IN 对子查询select后面选择的字段是敏感的,如下SQL语句,使用与主查询数据比较大的查询
1 SQL> select ename,deptno from test where deptno in (select deptno from test where ename='SCOTT');
2
3 ENAME DEPTNO
4 -------------------- ----------
5 SMITH 20
6 JONES 20
7 SCOTT 20
8 ADAMS 20
9 FORD 20
10
11 SQL> select ename,deptno from test where deptno in (select empno from test where ename='SCOTT');
12
13 no rows selected
14
15 SQL>
- 合并查询
- UNION:A并B,查看所有内容(剔除重复行)默认排序
- UNION ALL:查看所有内容(包括重复行)不排序
- INTERSECT:查看A与B相交的部分内容 默认排序
- MINUS:差集 ---- 调换A与B的位置,最终的结果是不一样的 默认排序
- 注意事项:
- 合并查询时,字段的数量必须一样,如果不同,要不全,数据类型要一致且顺序对应(大类型相同即可),优先级是自然顺序
- order by 语句只会依据第一个select 语句中的字段排序
- order by 语句只能出现一次且只能出现在最后
- order by 排序字段如有别名时就不能使用实际名