五月:Oracle数据库总结(二)

一、排序 Order by

语法:order by 列名1,列名2 asc
---------升序排列,如果不加排列规则的默认排序方法,先以列名1排序,再以列名2排序,可以只写一个列名
order by 列名1,列名2 desc
---------降序排列,先以列名1排序,再以列名2排序,可以只写一个列名

--书写顺序
select 需要展示的列名
from 表名
where 条件
order by 用来排序的列名

二、哑表

哑表:oracle 数据库内部提供的一个用于测试的只有一行一列的哑表,用于我们进行语法测试,叫做 dual 表

下面是获取系统时间语句的测试:

--获取当前系统时间 年月日 时分秒 
select sysdate from dual
--获取当前系统时间 年月日 时分秒 毫秒
select systimestamp from dual

三、单行函数

函数的三要素:函数名、参数、返回值

具体语句:

--1.length 求长度
select length('xxx') from dual
  --常用于(查询名字长度超过5个字符的员工)
select * from employees where length(first_name) > 5

--2.mod 求余数 (上次说不能用 % 求余数/取模)
select mod(10,3) from dual 

--3.nvl 空值处理
select nvl(5,55) from dual     --输出结果 5
select nvl(null,55) from duall --输出结果 55

--4.to_char 将数据转换成字符串的格式,最常用的是将日期类型换成字符串
--  oracle 数据格式化处理:yyyy-mm-dd  hh:m1:ss 
--						 yyyy-mm-dd  hh24:m1:ss
--			  (因为oracle不区分大小写,所以注意月份和分钟的区别)
--  java 数据格式处理:yyyy-MM-dd  hh:mm:ss  (java区分大小写,MM和mm可以代表不同的含义)
select sysdate from dual
select to_char(sysdate,'yyyy-mm-dd') from dual

--5.to_date 将date对象转化成字符串
select sysdate from dual
select to_date('2020-02-20','yyyy-mm-dd') from dual
--注意:需要比较时间时,需要转化为同种类型再进行比较

四、组函数

组函数也可以叫做聚合函数,组函数和单行哈数的区别是,单行函数不会对查询结果的函数长生影响
可以通过组函数处理,多行函数会变成一行
常用的组函数:
max() --求最大值
min() --求最小值
avg() --求平均值
sum() --求和
count() --求总行数

select max(salary) from employees -- 查询最高的工资 
select min(salary) from employees -- 查询最低的工资 
select avg(salary) from employees -- 查询平均工资 
select sum(salary) from employees -- 求和
select count(*) from employees    -- 求总行数
--注意

五、分组 group by

通过 group by 关键词指定根据哪些列进行分组,可以将相同的数据合并成一行(组),在分组之后可以配合组函数进行组内数据统计

--统计每个部门下的员工人数
select department_id ,count(*)
from employees 
where department_id is not null -- 有一个员工的没有部门编号,给排除掉 
group by department_id

六、 Having

和group by 配合使用,对分组之后的数据进行筛选
having 和 where 都有筛选的功能, where 是在分组之前,having是在分组之后

select department_id ,count(*) c
from employees 
group by department_id
having count(*) > 30

七、 SQL的书写顺序、执行顺序

—— 书写顺序

select 列名1,列名2
from 表名
where 筛选条件
group by 列名
having 筛选条件
order by 列名

——执行顺序

⑤select 列名1,列名2
①from 表名
②where 筛选条件
③group by 列名
④having 筛选条件
⑥order by 列名

八、伪列

建表的时候并不存在,通过查询可以获取的列,在oracle中称之为伪列
oracle中的两个伪列:rowid ,rownum
rowid:可以表示一行数据在硬盘上的物理位置

——rowid

select rowid,t1.* from employees t1
-- 通过rowid可以直接定位硬盘数据,效率高,可读性差 select * from employees t1 where t1.rowid = 'AAAC9EAAEAAAABXAAA'
-- 其实通过员工编号(主键),底层会用到rowid,效率也很高,常用 select * from employees t1 where t1.employee_id = 100

——rownum

rownum这个伪列可以给查询结果进行编号,从1开始,依次递增
rownum的应用场景:查询前n条

select * fromwhere rownum <= n

rownum可以出现的位置:
1.select 语句里
2.where 条件里

九、子查询(嵌套查询)

一个SQL语句的查询结果可以作为另外一个SQl语句中的一部分

1、子查询结果是一行一列

-- 需求:查询工资高于公司平均工资的员工信息
select * from employees where salary > ( 
	select avg(salary) from employees
)

2、子查询结果是多行一列

使用 in 关键字,由于内层查询会返回多行

select * from employees where salary in ( 
	select salary from employees where first_name = 'Steven' 
)

3、子查询结果是多行多列

如果子查询结果是多行多列,可以将它当做一张表进行查询
这个表只存在于内存缓冲区中

-- 将一个SQL语句的查询结果,当成一张虚拟表看待 
select * from ( 
	select * from employees 
	where salary > 13000 
) t1

——分页查询

何为分页查询:表中数据量比较大,不能一次查询展示,需要通过分页 完成
分页查询 = rownum + 子查询

--查询第6到10行
select * from (
	select rownum rn,t1.*
	from employees t1
)t2 where t2.rn >= 6 and t2.rn <= 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值