去重distinct
结果集中的多条数据完全相同(所有查询的结果中字段的值),才能去重
伪列:不是真实在表结构中存在的字段,但是允许查询,称他们为伪列
别名:(如果别名中存在小写字符、特殊符号、空格等,需“”) ” “表示原封不动使用/显示
给查询的字段起别名:select 字段1(as) 别名1 from 数据源
select 123+456 和 for amp;
给查询的表起别名:select 字段11 from 表 表别名,不能加as
select 123+456 for emp e;
select后可以查询字符串,只有’ '可以 表示字符串
字符串的拼接||,显示的结果每个员工姓名前都有sxt
select 'sxt'||ename "员工名称" from emp;
null值和数字运算,结果还是null
null值和字符串运算,结果是原串
处理null值的函数nvl(字段,值2),如果字段的值为null,结果为值2,如果字段的值不为null,结果还是这个字段的值
select ename,sal,comm "原奖金",nvl(comm,0)+1 "新奖金" from emp;
查询存在佣金|奖金的员工名称
select ename from emp where comm is not null;
select ename from emp where not comm is null;
虚表:不是真实存在的表,没有数据,没有字段 dual
select * from dual;
查询当前的日期 sysdate
select sysdate from dual;
执行顺序:from—Where—select
条件Where
查询20部门的员工信息
select * from emp where deptno = 20;
<>= > < >= <= != <>
查询 岗位 不是 CLERK 员工名称 部门编号,工资
select ename,deptno,sal from emp where job!='CLERK';
select ename,deptno,sal from emp where not job='CLERK';
select ename,deptno,sal from emp where job<>'CLERK';
模糊匹配like ‘%’ 任意个任意字符 “_” 一个任意字符
查询员工姓名中字符A开头员工信息
select * from emp where name like 'A%';
查询员工姓名中包含字符A的员工信息
select * from emp where name like '%A%';
查询员工姓名中第二个字母为A的员工信息
select * from emp where name like '_A%';
集合操作:
–Union,并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;
–Union All,全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;
–Intersect,交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
–Minus,差集(减去重复) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序
查询显示不存在雇员的所有部门号。
select deptno from dept Minus select distinct deptno from emp;
IN
in(值1,值2,值3…结果集) 结果集中的任意一个值只要匹配,就可以
查询工资为 1500, 2000, 2500, 5000的员工的信息
select * from emp where sal=1500 or sal=2000 or sal=2500 or sal=5000;
select * from emp where sal in (1500, 2000, 2500, 5000);
查询部门名称为 SALES 或 ACCOUNTING的部门编号
select deptno from dept where dname in ( 'SALES' , 'ACCOUNTING');
员工在 ↑部门的员工信息
select *
from emp
where deptno in
(select deptno from dept where dname in ('SALES', 'ACCOUNTING'))
查询 销售部(SALES) 中 工资大于1500的员工信息
select * from emp where deptno = (select deptno from dept where dname = 'SALES') and sal>1500;
查询工资比SMITH高的同一部门的员工信息
select *
from emp
where deptno = (select deptno from emp where ename = 'SMITH')
and sal > (select sal from emp where ename = 'SMITH');
exists() 存在即合法,存在即保留
select * from 表 where exists (结果集);
从from中拿出一条数据,去看where中exists后的结果集是否存在数据,如果有,则当前从from拿出的这条数据就能被保留在select后,如果没有就不保留
当工资有员工薪资>2000的时候,就查询所有的员工信息,如果不存在,就查询不到
select ename, sal
from emp
where exists (select ename, sal from emp e2 where e2.sal >= 2000);
与有奖金存在的员工 员工编号相等的员工信息
select empno, ename, sal,comm
from emp e1
where exists (select empno, ename, sal, comm
from emp e2
where comm is not null
and e1.empno = e2.empno);
与有奖金存在的员工部门编号相等的员工信息
select empno, ename, sal,deptno
from emp e1
where exists (select empno, ename, sal, comm,deptno
from emp e2
where comm is not null
and e1.deptno = e2.deptno );
排序
order by 排序字段1,排序字段2…
–select 数据 from 数据源 where 行过滤条件 order by 排序字段 desc降序|asc升序…;
–from–where–select–order by