SELECT
查询的步骤
1.查询的数据:即列名
2.数据来源:即表头
3.查询条件: 限制条件
SELECT * FROM 表名; à查询某个表中所有的记录的所有字段信息
SELECT 列名 FROM 表名; à 查询某个表中所有的记录的指定字段信息
SELECT 列名1,列名2 FROM 表名; 查询某个表中所有的记录的字段1,字段2
SELECT distinct 列名 FROM 表名; à去除重复记录
SELECT 表达式 FROM 表名; à查询表达式
SELECT xxx as 别名 FROM 表名 表别名 à使用别名,别名如果是英文默认大写,如果想要原样使用或者中文带空格,在别名的前后双引号("")
Distinct 修饰列名 表示去重。
单引号('')代表字符串
双引号("")原样输出结果字段名和值原样字符串输出
表达式|字符串都是伪列:不是表中真是存在的字段
字符串的拼接 ||
select 'a-'||'-b' from 表名;
虚表: oracle中不是真是存在的表,其中没有任何数据
like 模糊查询 %任意个任意字符 _任意一个字符
--姓名以A开头的所有人员信息
select * from 表头 where 姓名 like 'A%';
姓名中第二个字符为A的所有人员信息
select * from 表头 where 姓名 like '_A%';
--使用模糊匹配做精确匹配
select * from 表头 where 姓名 like 精确的名字;
select * from 表头 where 姓名 like '%C%%' escape('C'); --任意指定转义字符,需要使用escape() 中说明,此时C后面的%会采用它最本来的意义,C无实意
事务
commit; 类似保存
rollback; 回滚
in 匹配后面结果集中的任意一个数据,无法做区间判断
查询薪资为 1500 2000 2500 5000的员工信息
select * from 表头 where 薪资 in (1500,2000,2500,5000);
子查询 查询语句中嵌套查询语句
select *
from emp
where deptno in
(select deptno from dept where dname in ('SALES', 'ACCOUNTING'));
--exists 存在即保留,存在即合法
select *
from emp e
where exists (select deptno, dname
from dept d
where dname in ('SALES', 'ACCOUNTING')
and e.deptno = d.deptno);
如果exists后面的语句成立则执行前面的语句。
--排序 order by desc 降序 asc升序
--select * from 表名 where 行过滤条件 order by 排序字段; --默认升序
select * from emp order by sal asc;
单行函数
sysdate/current_date 以date类型返回当前的日期
add_months(d,x) 返回加上x月后的日期d的值
LAST_DAY(d) 返回的所在月份的最后一天
months_between(date1,date2) 返回date1和date2之间月的数目
next_day(sysdate,'星期一') 由此之后的下一个星期一
to_date(c,m) à 字符串以指定格式转换为日期
to_char(d,m) à 日期以指定格式转换为字符串
nvl(string1,string2) à 如果string1为null,则结果为string2的值
decode(condition,case1,express1,case2,express2,….casen,expressn, expressionm)
--分组 group by 分组字段
select *|字段.. from 表名 where 行过滤条件 group by 分组字段 having 组过滤信息 order by 排序字段;
执行流程:from--where--group by--having--select--order by
组函数
1)、count :统计记录数 count() -->* 或一个列名
2)、max, min: 最大值,最小值
3)、sum:求和
4)、avg:平均值
注意:
- 组函数仅在选择列表和Having子句中有效
2、出现组函数,select 只能有组函数或分组字段
说明:
l 1.组信息 与单条记录不能同时查询
l 2.组函数 不能用在where中,能使用的地方select having
l 3.null 不参与运算
TIPs:where :过滤行记录,不能使用组函数, having:过滤组 可以使用组函数