多表进行连接查询 ,子查询等高级selece语句的查询
1、笛卡尔积
用第一个表的每一行与第二表中的每一行,进行连接。
因此结果集中的行数是两表汇总行数的乘积,两列之和。
但是包含了大量的无用的信息。
2、如果为表 指明了别名,则所有引用表名的地方都必须使用别名,不能使用表名
3、为表名设置别名时,不能使用as 关键字
4、查询多表时,必须使用“表名.同名字段” 进行限制 不同名时,字段名前加上表名,则查询效率会更高
5、使用join 关键字的连接查询
内连接:inner join
外连接:left | right| full outer join
交叉连接: cross join
on 关键字后面是连接条件 (一般会使用 同一张表 进行子查询 联立 )
6、内链接查询
未指明连接类型时,默认为内连接
查询出的结果集,所有行都要满足连接条件。
内链接包括:
等值内链接(),
不等值内链接(不常用),
自然连接,它是由是系统根据两表的同名字段自动 作等值比较的内链接。
7、外连接
左外连接(left join ) 也可以用 select a ,b from a.c = b.c(+)
右外连接(right join ) select a ,b from a.c (+) = b.c
完全外连接
8、union 集合运算
可以将多个查询结果集合并,形成一个结果集 会消除两个结果集中重复的行。
9、intersect
是取两个结果集的交集。只会同时存在两个结果集中的数据。
select a from table a where a >200
intersect
select b from table b where b>33
10、
单行子查询
指的是只返回单列单行数据。即返回一个值。
多行子查询
指的是子查询返回单列多行数据,即一组数组。 in not in ,any,all ,some
多列子查询
select ename ,job ,sal ,deptno from scott.emp where (deptno,job)=(select deptno,job from scott.emp where empno = 7316)