句Oracle 100款经典SQL语句收藏大全(oracle100常用语)

Oracle数据库是当今最流行的关系型数据库之一。SQL是Oracle数据库的重要组成部分,用于查询和管理数据库中的数据。在开发和管理Oracle数据库时,SQL语句是必不可少的工具。本文将为您介绍100个Oracle SQL语句,帮助您提高对Oracle数据库的管理。

1. 查看当前数据库名称

“`sql

select * from v$database;


2. 查看表空间的使用情况

```sql
SELECT A.TABLESPACE_NAME "表空间名称",
A.BYTES "表空间大小",
B.BYTES "已使用空间",
A.BYTES - B.BYTES "剩余空间",
ROUND((B.BYTES / A.BYTES) * 100, 2) || '%' "已使用比例"
FROM (SELECT TABLESPACE_NAME,
SUM(BYTES) BYTES
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME,
SUM(BYTES) BYTES
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME (+);

3. 查看当前用户

“`sql

select user from dual;


4. 查看用户下的表

```sql
select * from tab;

5. 查看表中的数据

“`sql

select * from 表名;


6. 查看表的结构

```sql
desc 表名;

7. 创建表

“`sql

create table 表名 (列名 数据类型 [约束条件], …);


8. 删除表

```sql
drop table 表名;

9. 修改表结构

“`sql

alter table 表名 [add|drop|modify] 列名 数据类型 [约束条件];


10. 统计表中记录数

```sql
select count(*) from 表名;

11. 从表中删除数据

“`sql

delete from 表名 where 条件;


12. 向表中插入数据

```sql
insert into 表名 (列1, 列2, 列3, ...) values (值1, 值2, 值3, ...);

13. 更新表中数据

“`sql

update 表名 set 列1 = 值1, 列2 = 值2, … where 条件;


14. 查找满足条件的数据(单表查询)

```sql
select 列1, 列2, ... from 表名 where 条件;

15. 查找满足条件的数据(多表查询)

“`sql

select 列1, 列2, … from 表1, 表2 where 表1.列 = 表2.列 and 条件;


16. 排序

```sql
select 列1, 列2, ... from 表名 order by 列1 [asc|desc], 列2 [asc|desc], ...;

17. 分组统计

“`sql

select 列1, count(列2), sum(列3), avg(列4), max(列5), min(列6) from 表名 group by 列1;


18. 子查询

```sql
select 列1, 列2, ... from 表名 where 列 in (select 列 from 子查询表名 where 条件);

19. 连接查询

“`sql

select 列1, 列2, … from 表1 [left|right|inner] join 表2 on 表1.列 = 表2.列 where 条件;


20. 联合查询

```sql
select 列1, 列2, ... from 表1 where 条件1 union [all] select 列1, 列2, ... from 表2 where 条件2;

21. 获取当前日期

“`sql

select sysdate from dual;


22. 字符串拼接

```sql
select 列1 || 列2 as 别名 from 表名;

23. 获取最大值

“`sql

select max(列名) from 表名;


24. 获取最小值

```sql
select min(列名) from 表名;

25. 获取总计

“`sql

select sum(列名) from 表名;


26. 获取平均数

```sql
select avg(列名) from 表名;

27. 获取指定范围内的随机数

“`sql

select dbms_random.value(最小值, 最大值) from dual;


28. 查找字段包含特定字符串的记录

```sql
select 列1, 列2, ... from 表名 where 列 like '%字符串%';

29. 查找字段以特定字符串开头的记录

“`sql

select 列1, 列2, … from 表名 where 列 like ‘字符串%’;


30. 查找字段以特定字符串结尾的记录

```sql
select 列1, 列2, ... from 表名 where 列 like '%字符串';

31. 查找字段为空的记录

“`sql

select 列1, 列2, … from 表名 where 列 is null;


32. 查找字段不为空的记录

```sql
select 列1, 列2, ... from 表名 where 列 is not null;

33. 查找字段等于某个值的记录

“`sql

select 列1, 列2, … from 表名 where 列 = 值;


34. 查找字段不等于某个值的记录

```sql
select 列1, 列2, ... from 表名 where 列 != 值;

35. 查找字段大于某个值的记录

“`sql

select 列1, 列2, … from 表名 where 列 > 值;


36. 查找字段小于某个值的记录

```sql
select 列1, 列2, ... from 表名 where 列

37. 查找字段大于等于某个值的记录

“`sql

select 列1, 列2, … from 表名 where 列 >= 值;


38. 查找字段小于等于某个值的记录

```sql
select 列1, 列2, ... from 表名 where 列

39. 查找两个日期之间的记录

“`sql

select 列1, 列2, … from 表名 where 列 between 开始日期 and 结束日期;


40. 查找指定行数的记录(取前n行)

```sql
select 列1, 列2, ... from 表名 where rownum

41. 查找分页数据

“`sql

select * from (select rownum rn, t.* from 表名 t where rownum = 开始行数;


42. 查找日期范围内的记录

```sql
select 列1, 列2, ... from 表名 where to_char(列, 'yyyy-MM-dd') between '开始日期' and '结束日期';

43. 查找指定月份的记录

“`sql

select 列1, 列2, … from 表名 where to_char(列, ‘yyyy-MM’) = ‘日期’;


44. 查找某一列中重复的记录

```sql
select 列, count(*) from 表名 group by 列 having count(*) > 1;

45. 统计今天、昨天、本周、上周、本月、上月的数据

“`sql

— 今天

select * from 表名 where trunc(列) = trunc(sysdate);

— 昨天

select * from 表名 where trunc(列) = trunc(sysdate – 1);

— 本周

select * from 表名 where trunc(列, ‘D’) >= trunc(sysdate, ‘D’) – 7 and trunc(列, ‘D’)

— 上周

select * from 表名 where trunc(列, ‘D’) >= trunc(sysdate, ‘D’) – 14 and trunc(列, ‘D’)

— 本月

select * from 表名 where to_char(列, ‘yyyy-MM’) = to_char(sysdate, ‘yyyy-MM’);

— 上月

select * from 表名 where to_char(列, ‘yyyy-MM’) = to_char(add_months(sysdate, -1), ‘yyyy-MM’);


46. 计算两个日期之间的天数

```sql
select to_date('日期1', '日期格式') - to_date('日期2', '日期格式') from dual;

47. 计算两个日期之间的月数

“`sql

select months_between(to_date(‘日期1’, ‘日期格式’), to_date(‘日期2’, ‘日期格式’)) from dual;


48. 格式化日期

```sql
select to_char(列, 'yyyy-MM-dd') as 别名 from 表名;

49. 把数字转换成中文

“`sql

with t as (select level lev from dual connect by level

select decode(lev, 1, ‘零’, 2, ‘壹’, 3, ‘贰’, 4, ‘叁’, 5, ‘肆’, 6, ‘伍’, 7, ‘陆’, 8, ‘柒’, 9, ‘捌’, 10, ‘玖’, 11, ‘拾’, 12, ‘佰’) from t;


50. 查找最大值对应的记录

```sql
select 列名 from 表名 where 列名 = (select max(列名) from 表名);

51. 查找最小值对应的记录

“`sql

select 列名 from 表名 where 列名 = (select min(列名) from 表名);


52. 查找第n大/小的记录

```sql
-- 查找第n大的记录
select 列名 from (select 列名, row_number() over (order by 列名 desc) rn from 表名) where rn = n;

-- 查找第n小的记录
select 列名 from (select 列名, row_number() over (order by 列名 asc) rn from 表名) where rn = n;

53. 查找前n大/小的记录

“`sql

— 查找前n大的记录

select * from (select 列名, row_number() over (order by 列名 desc) rn from 表名) where rn

— 查找前n小的记录

select * from (select 列名, row_number() over (order by 列名 asc) rn from 表名) where rn


54. 判断是否存在满足条件的记录

```sql
select count(*) from 表名 where 列 = 值;

55. 判断两个日期是否相等

“`sql

select case when to_char(日期1, ‘yyyy-MM-dd’) = to_char(日期2, ‘yyyy-MM-dd’) then ‘相等’ else ‘不相等’ end from dual;


56. 判断一个字符串是否是数字

```sql
select case when regexp_like(字符串, '^[0-9]+$') then '是数字' else '不是数字' end from dual;

57. 获取日期的星期几

“`sql

select to_char(日期, ‘D’) from dual;


58. 判断是否为闰年

```sql
select case when to_number(to_char(add_months(sysdate, 12), 'YYYY')) - to_number(to_char(sysdate, 'YYYY')) = 1 then '闰年' else '非闰年' end from dual;

59. 获取当前时间

“`sql

select sysdate from dual;


60. 获取当前时间的小时

```sql
select to_char(sysdate, 'HH24') from dual;

61. 获取当前时间的分钟

“`sql

select to_char(sysdate, ‘mi’) from dual;


62. 判断某个数是否为偶数

```sql
select case when mod(数, 2) = 0 then '偶数' else '奇数' end from dual;

63. 把秒数转换成时间格式

“`sql

select to_char(to_date(秒数, ‘sssss’), ‘hh24:mi:ss’) from dual;


64. 把时间格式转换成秒数

```sql
select (to_date(时间格式, 'hh24:mi:ss') - to_date('00:00:00', 'hh24:mi:ss')) * 86400 from dual;

65. 根据年份和月份生成日历

“`sql

with t as (select to_date(‘2022-09’, ‘yyyy-mm’) + level – 1 d from dual connect by level

select to_char(d, ‘dd’) as 日, decode(to_char(d, ‘D’), 1, ‘日’, 2, ‘一’, 3, ‘二’, 4, ‘三’, 5, ‘四’, 6, ‘五’, 7, ‘六’) as 星期 from t;


66. 计算两个经纬度之间的距离(单位:千米)

```sql
SELECT ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((LATITUDE1 * PI() / 180 - LATITUDE2 * PI() / 180) / 2), 2) + COS(LATITUDE1 * PI() / 180) * COS(LATITUDE2 * PI() / 180) * POW(SIN((LONGITUDE1 * PI() / 180 - LONGITUDE2 * PI() / 180) / 2), 2))), 2) AS 距离 FROM 表名;

67. 将字符串转换成日期

“`sql

select to_date(字符串, ‘日期格式’) from dual;


68. 将日期转换成字符串

```sql
select to_char(日期, '日期格式') from dual;

69. 把数字转换成罗马数字

“`sql

with t as (select level – 1 lev from dual connect by level

select column_value, replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(lev, 1, ‘I’), 2, ‘II’), 3, ‘III’), 4, ‘IV’), 5, ‘V’), 6, ‘VI’), 7, ‘VII’), 8, ‘VIII’), 9, ‘IX’), 10, ‘X’), 20, ‘XX’), 30, ‘XXX’), 40, ‘XL’), 50, ‘L’), 60, ‘LX’), 70, ‘LXX’), 80, ‘LXXX’), 90, ‘XC’), 100, ‘C’) from t;


70. 获取本年度的第几周

```sql
select to_char(sysdate, 'ww') from dual;

71. 获取本年度的第几天

“`sql

select to_char(sysdate, ‘DDD’) from dual;


72. 判断两个集合是否有交集

```sql
select case when exists(select * from 集合A where 列 in (select 列 from 集合B)) then '有交集' else '无交集' end from dual;

73. 把字符串按指定长度分割成数组

“`sql

with t as (select ‘abcdefg’ str from dual)

select substr(str, 1, 3) “1”, substr(str, 4, 3) “2”, substr(str, 7, 1) “3” from t;


74. 把字符串中的数字取出来并求和

```sql
select sum(regexp_replace('字符串', '[^0-9]+')) from dual;

75. 判断当前用户是否有指定权限

“`sql

select decode(count(*), 1, ‘有权限’, ‘无权限’) from user_tab_privs where grantee = user and table_name = ‘表名’ and privilege = ‘权限’;


76. 获取当前用户拥有的所有权限

```sql
select * from session_privs;

77. 创建索引

“`sql

create index 索引名称 on 表名 (列名);


78. 删除索引

```sql
drop index 索引名称;

79. 查看表的索引

“`sql

select * from user_indexes where table_name = ‘表名’;


80. 查看索引的使用情况

```sql
select * from v$segstat where obj# = (select index_id from user_indexes where index_name = '索引名称');

81. 查看当前会话的信息

“`sql

select * from v$session where sid = &sid;


82. 查看当前系统会话的信息

```sql
select * from v$session where username = 'SYSTEM';

83. 查看数据库的版本

“`sql


数据运维技术 » 句Oracle 100款经典SQL语句收藏大全(oracle100常用语)