exteact()提取给定日期中指定时间分类的值
select extract(year from sysdate) from dual
查询1980年入职的员工信息
select * from emp where extract(year from hiredate)=1980
判断字段的值是否为null
判断要使用is null或is not null
null值的运算操作
null与任何数字运算结果还为null
null与字符串拼接等于什么都没干
select ename,sal,comm,sal+comm from emp
空值函数
nvl(arg1,arg2)
当arg1为null,函数返回arg2的值
若不为null,则返回arg1本身。
所以该函数的作用是将null值替换为一个非null值
select ename,sal,nvl(comm,0) from emp
nvl2(arg1,arg2,arg3)
当arg1不为null,则函数返回arg2
当arg1为null,则函数返回arg3
该函数是根据一个值是否为null来返回两个不同结果
select ename,sal,nvl2(comm,'有绩效','没有绩效') from emp
SELECT ename, sal, job
FROM emp_fanchuanqi
WHERE
sal > 1250
AND
job = 'CLERK'
OR
job = 'SALESMAN'
AND优先级是高于OR的。
SELECT ename, sal, job
FROM emp_fanchuanqi
WHERE
job IN ('MANAGER','SALESMAN','CLERK')
SELECT empno, ename, job, sal, deptno
FROM emp
WHERE sal > ALL (2500,4000,4500);
>ANY 大于最小的
<ANY 小于最大的
>ALL 大于最大的
<ALL 小于最小的
与in的相同之处:给定一组数据进行比较
区别:in是与给定的数据进行等值或不等值比较
any和all是与给定数据进行范围比较
SELECT DISTINCT deptno,job
FROM emp_fanchuanqi
对单列去重,就一列的值没有重复的
对队列去重,可以达到的效果是,这几列的组合
是不重复的。
SELECT ename,sal,deptno
FROM emp_fanchuanqi
ORDER BY sal,deptno DESC
使用多列进行排序时,左面的列排序优先级高于
右面的列
以上面为例:
首先按照sal的升序排列,当sal的值相同时,按照
deptno的降序排列。若sal的值全表没有重复,那么
第二列的排序会被忽略。
order by 必须出现在最后的子句
聚合函数有叫多行函数,分组函数
聚合函数是对结果集某些字段的值进行统计的
SELECT AVG(comm)
FROM emp_fanchuanqi
聚合函数忽略空值 AVG count
SELECT AVG(NVL(comm,0))
FROM emp_fanchuanqi
COUNT:用于统计记录条数
SELECT COUNT(*)
FROM emp
WHERE deptno=20
SELECT
MAX(sal),MIN(sal),AVG(sal),SUM(sal)
FROM
emp_fanchuanqi
GROUP BY
deptno
group by 也可以根据多个字段分组,分组原则为这个几个字段值都相同的记录看做一组
当select子句中包含有聚合函数时,那么凡不在聚合函数中的其他单独字段都必须出现在
group by子句中,反过来则不是必须的
select max(sal),job from emp group by job
HAVING用于在进行分组查询后,二次过滤数据的
HAVING不能独立存在,必须跟在GROUP BY
之后。
HAVING中可以使用组函数的结果进行过滤
与WHERE的区别在于:
WHERE是用于第一次检索数据时过滤的。
HAVING是用于在检索后,进行二次过滤的
过滤分组的
SELECT
deptno,AVG(sal)
FROM
emp_fanchuanqi
GROUP BY
deptno
HAVING
AVG(sal)>1800
查询语句执行顺序(面试题)
1 from子句:执行顺序为从后往前,从右到左
数据量较少的表尽量放在后面
2 where子句;执行顺序为自下而上、从右到左
将能过滤掉最大数量记录的条件写在where子句的最右
3 group by--执行顺序从左往右分组
最好在group by钱使用where将不需要的记录在group by之前过滤掉
4 having子句:消耗资源
尽量避免使用 having会在检索出所有记录之后才对记过集进行过滤,需要排序等操作
5 select子句;少用*号,尽量取字段名称
消耗时间
6 order by子句:执行顺序从左到有排序,消耗资源