Select
Form table alias
Where 条件表达式
Order by 排序字段列表
解析步骤:from where select order by
查询列(字段)
1、select distinct *|字段|表达式 as 别名 from 表表别名
SELECT * FROM表名; 查询某个表中所有的记录的所有字段信息
SELECT列名 FROM 表名; 查询某个表中所有的记录的指定字段信息
SELECT列名1,列名2 FROM 表名; 查询某个表中所有的记录的字段1 字段2
SELECT distinct列名 FROM 表名; 去除重复记录
SELECT表达式 FROM 表名; 查询表达式
SELECT xxx as别名 FROM 表名表别名 使用别名
2、去除重复(distinct)
使用distinct去重,确保查询结果的唯一性 :
select distinct deptno from emp; -- 去重
3、别名
使用别名便于操作识别 、隐藏底层信息。存在字段别名和表别名:
select ename as
"雇员姓名" from emp;
select ename
"雇员姓名" from
emp;
select ename 雇员姓名 from emp;
select ename as 雇员姓名 from emp;
select ename as
" Ename" from emp;
as: 字段别名可以使用as;表别名不能使用as
"":原样输出,可以存在空格与区分大小写
4、字符串
使用’’表示字符串( 注意区分”” ) ,拼接使用 ||
select 'my' from
emp;
select ename||'a'||'-->' info from emp;
5、伪列
不存在的列,构建虚拟的列
select empno, 1*2 as count,'cmj' as name,deptno from emp;
6、虚表
用于计算表达式,显示单条记录的值
select 1+1 from dual;
7、null
null 遇到数字参与运算的结果为 null,遇到字符串为空串。
select 1+null from dual;
select '1'||null from dual;
select 1||'2'||to_char(null) from dual;
select ename,sal*12+comm from emp;
select ename,sal*12+nvl(comm,0) from emp;
--nvl 内置函数,判断是否为 null, 如果为空,取默认值 0 ,否则取字段实际值
查询行(记录)
Where 过滤行记录条件,条件有:
a)、= 、 >、 <、 >=、 <=、 !=、 <>、 between and
b)、and 、or、 not、 union、 union all、 intersect 、minus
c)、null :is null、 is not null、 not is null
d)、like :模糊查询 % _ escape('单个字符')
f)、in 、 exists(难点) 及子查询
1、比较条件
= 、>、 <、 >=、 <=、 !=、 <>
2、且或非
and 、 or 、 not
3、null
Null不能使用条件判断,只能使用is;
4、集合操作
Union、Union All、Intersect、Minus
Union,并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;
Union All,全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect,交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规
则的排序;
Minus,差集( 减去重复 ) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
5、模糊查询(like)
模糊查询,使用通配符:
%:零个及以上(任意个数的)的字符
_:一个字符
遇到内容中包含 % _ 使用escape('单个字符')指定转义符
6、in与exists
in相当于使用or的多个等值,定值集合 ,如果存在子查询,确保类型相同、字段数为1,如果记录多,效率不高,用于一些少量定值判断上:
exists条件为true,存在记录则返回结果,后续不再继续比较查询,与查询的字段无关,与记录有关。
7、获取所有行的记录
select * from emp;
select * from emp where 1=1 ;
select * from emp where
ename like '%';
排序
使用 ORDER BY 排序,排序不是真实改变存储结构的顺序,而是获取的集合的顺序。
顺序 :asc(默认) desc
多字段: 在前面字段相等时,使用后面的字段排序
空排序: 降序为 desc,注意 null 为最后。
函数
函数分为系统内置函数 自定义函数;
根据函数的返回结果,我们将函数分为单行函数和多行函数:
[if !supportLists]1、 [endif]单行函数:一条记录返回一个结果
[if !supportLists]2、 [endif]多行函数 组函数 聚合函数:多条记录 返回一个结果
[if !supportLists]1、 [endif]日期函数
日期函数: 注意区分 db数据库时间,java应用服务器的时间。以一方为准
oracle以内部数字格式存储日期:年,月,日,小时,分钟,秒
sysdate/current_date以date类型返回当前的日期
add_months(d,x)返回加上x月后的日期d的值
LAST_DAY(d)返回的所在月份的最后一天
months_between(date1,date2)返回date1和date2之间月的数目
next_day(sysdate,'星期一') 下周星期一
[if !supportLists]2、 [endif]转换函数
to_date(c,m) 字符串以指定格式转换为日期
to_char(d,m) 日期以指定格式转换为字符串
[if !supportLists]3、 [endif]其它函数(保证类型兼容)
--1)、nvl nvl(string1,string2) 如果string1为null,则结果为string2的值
select ename, nvl(null,0) from emp;
select ename, nvl(to_char(comm),'hello')
from emp;
--2)、decode decode(condition,case1,express1,case2 , express2,….casen , expressn, expressionm)
select
ename,decode(deptno, 10,'十',20,'二十') from emp;
组函数
组函数|多行函数|聚合函数即多条记录返回一个结果。我们需要掌握如下几个组函数:
avg、sum、min、max、count
1)、count :统计记录数 count() -->* 或一个列名
2)、max min: 最大值最小值
3)、sum:求和
4)、avg:平均值
注意:
1、组函数仅在选择列表和Having子句中有效
2、出现组函数,select 只能有组函数或分组字段
说明:
组信息与单条记录不能同时查询
组函数不能用在 where中,能使用的地方 select having
null不参与运算
分组
分组:group by,将符合条件的记录进一步分组
过滤组:having,过滤组信息,表达式同where一致
结构:select distinct * | 字段 | 表达式 | 函数 as 别名
from 表 表别名
where 过滤行记录条件
group by 分组字段列表
having 过滤组
order by 字段列表asc | desc
解析步骤:
From 、 where 、 group、 having、select 、order by
注意:group by :分组
1)、select 出现分组函数,就不能使用 非分组信息,可以使用 group by 字段
2)、group by字段 可以不出现 select 中 ,反之select 除组函数外的,其他字段必须出现在group by 中
过滤组having :
where :过滤行记录,不能使用组函数, having:过滤组 可以使用组函数。