SQL外/完全/交叉/自/联合连接查询/模糊查询

1.外连接查询(left,right)

不但返回满足连接条件的所有记录,而且会返回部分不满足条件的记录

左外连接:不但返回满足连接条件的所有记录,而且会返回左表不满足连接条件的记录

右外连接:不但返回满足连接条件的所有记录,而且会返回右表不满足连接条件的记录

2.完全连接查询(full)

返回表中匹配的所有行记录

左表中那些在右表中找不到匹配的行的记录,这些记录的右边全为null

右表中那些在左表中找不到匹配的行的记录,这些记录的左边全为null

3.交叉连接查询(cross join)


4.自连接

//用非聚合函数,求薪水最高的员工的信息

select * from emp
where empno not in(
select distinct "E1".empno
from
emp "E1"
join
emp "E2"
on "E1".sal<"E2".sal

)

  select *  from emp where sal=(select max(sal) from emp)      //当临时表是单行单列时,可采用“=”

5.联合查询union:表间数据以纵向方式连接在一起,注意:以前所有连接是以横向方式连接。

//查询每个员工的所有信息、上司的姓名

select "E1".*,"E2".ename 
from emp "E1" 
join emp "E2" on "E1".mgr="E2".empno
union
select *,'已是最大老板'    //因为mgr是null,即没有上级
from emp
where mgr is null

联合注意事项:.若干个select子句要联合成功的话,必须满足两个条件:

                1.若干个select子句输出的列数必须是相等的

                2.若干个select子句输出列的数据类型至少是兼容的。

6.模糊查询
格式:
select 字段的集合from表名where某个字段的名字like匹配
select * from 表名 where name like .....

%:表示任意的零个或多个字符,如:%A%只要含有A就输出
_下划线:表示任意单个字符,如:_A%只要第位是A就输出
_[A-C]%:表示第二位是A,B,C就输出。
_[^A-C]%:表示第二位不是A,B,C就输出。
%\%% escape '\':第一和三个%表示任意字符,‘\%’则转义,代表%

lower(小写) max(最大) min(最小) avg(平均) count(总数)
9.分组group by
select deptno,job,avg(sal),count(*),sum(sal),min(sal) from emp group by deptno,job order by deptno
注意:使用group by 之后select中只能出现分组后的整体信息,不能出现组内的详细信息(被分组字段除外)。


10.having:对通过group by分组后的信息进行过滤
select comm,count(*) as "总计" from emp group by comm having count(*)='1'(having后不能用别名)

你可能感兴趣的:(数据库)