联合查询
交叉连接(笛卡尔积连接)、内连接、自连接、外连接(全连接、左外连接、右外连接)、自然连接
(1)交叉连接(笛卡尔积连接)
将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积.
语法:
select 列名,列名,...
from a表 cross join b表;
(2)内连接
内连接:是把两个表中符合条件的数据连接为一条数据,如果哪个表中存在不符合连接条件的数据,那么这些数据就会被过滤掉(不显示)
语法:
select 列名,...,列名
from a表 inner join b表 on 连接条件
inner join:中的inner可以省略不写
在查询字段的位置出现*,系统回去数据字典里面找到当前表
提取出来当前表的所有字段
无论多么复杂的语句都是先从from开始执行的
直接写列名的效率要比写*(星号)的效率高
*号的执行效率比写列名时的执行效率低,
(*在执行sql语句时,oracle会去查数据库中的数据字典,
查询这个张表都有哪些列,然后查出这张表的所有列的数据)
in:后面跟一个集合或者子查询
oracle中表示一个简单的集合 ,(元素,元素,元素,... 元素) 例如 (1,2,3,4,5) ('a','b','c','d')
--查询emp表中,工资是800,1600,或者3000的员工信息
select * from emp where sal in(800,1600,3000);
not in:和in是相反的
select * from emp where sal not in(800,1600,3000);
like:它只用在字符串列,表示对字符串进行模糊匹配
空值处理
nvl(a,b)
a:要进行空值处理的字段
b:要给它赋的值
select col_name,col_name,...,col_name
from 表名
where 条件
group by 分组列
having 条件
order by 排序列;
先from 再 where 再group by 再having 再 select 再order by;