Oracle基础学习
SQL的三种类型
DML(数据库操作语言):主要指的是数据库的查询与更新操作.
DDL(数据定义语言):主要指数据库对象的创建,删除
DCL(数据库控制语言):主要是进行权限的管理操作.
查询当前用户下有所有的表
select * from tab;
查看表结构
desc 表名称
简单查询
select [distinct] * | 列名称 [别名] , 列名称 [别名]
from 表名称 [别名] ;
以上操作语句首先执行的 from 字句,必须通过from子句确定数据源
select 对于数据的进行筛选操作
* 查询全部列
distinct 去除重复行,只有结果集的所有列都相同时,才会去除
where 字句 控制结果集的行
select [distinct] * | 列名称 [别名] , 列名称 [别名]
from 表名称 [别名]
[where 过滤条件]
执行顺序 : from - where - select
限定查询运算符号
关系运算: > < >= <= <> (和!=一个意思)
逻辑运算: and or not
范围运算: between .. and (包含between,包含and)
限定范围: in | not in (注意!如果 not in 中 包含 null 则不会查询出任何结果集.禁止使用)
空判断: is null | is not null
模糊查询 like _(匹配一个字符) %(任意个字符)
排序查询
默认情况下,查询出来的结果集是根据插入行的顺序进行排序的
select [distinct] * | 列名称 [别名] , 列名称 [别名]
from 表名称 [别名]
[where 过滤条件]
[order by 字段 [ asc(默认asc升序) | desc(降序) ] , 字段 [ ASC | DESC ] ]
执行顺序 : from - where - select - order by
单行函数(常用的)
字符串函数
字符串 upper(列 | 字符串) 将传入的字符串变成大写
字符串 lower(列 | 字符串) 将传入的字符串变成小写
字符串 initcap(列 | 字符串) 首字母转大写
数字 length(列 | 字符串)字符串长度
字符串 substr(列 | 字符串,开始索引,[ 长度 ])对字符串进行截取,如果没有传入长度,则从开始位置截取到结尾(开始索引从1开始,如果设置截取位置为 负数 则表示从字符串末尾截取,倒着截取)
字符串 replace(列 | 字符串,旧内容,新内容)对字符串的内容进行替换
数值函数
数字 round(列 | 数字 [ , 小数位])实现数据的四舍五入,指定保留小数位
数字 trunc(列 | 数字 [ ,小数位])实现数据的截取,不进位
数字 mod(列 | 数字)计算余数
日期函数
日期 add_months(列 | 日期, 月数)在指定日期上增加若干个月后的日期
数字 months_between(列 | 日期, 列 | 日期)返回两个日期之间有多少个月
日期 last_day(列 | 日期)取的指定日期所在月的最后一天
日期 next_day(列 | 日期, 星期X)返回指定日期的下一个周X的具体日期
转换函数
字符串 to_char(列 | 日期 | 数字,转换格式) 将日期或者数字格式化为指定结构的字符串
日期 to_date(列 | 字符串| 数字,转换格式) 按照指定的转换格式编写字符串后将其变为日期形式
数字 to_number(列 | 字符串)将字符串变为数字
通用函数
数字 nvl(列 | null,默认值)如果传入的内容是null,则使用默认数值处理,如果不是空则使用原始数值处理
数据类型 decode(列 | 字符串 | 数值,比较内容1,比较内容2...[,默认显示内容])设置的内容会与每一个比较内容进行比较,如果内容相同,则显示内容进行输出,如果不同则使用最后的默认信息输出(显示内容和比较内容需要成对出现)
多表查询
select [distinct] * | 列名称 [别名] , 列名称 [别名]
from 表名称 [别名] , 表名称 [别名] ... (笛卡尔积不会消除,只是在显示结果集时,隐藏了)
[where 过滤条件] A表表字段 = B表表字段
[order by 字段 [ asc(默认asc升序) | desc(降序) ] , 字段 [ ASC | DESC ] ]
执行顺序 : from - where - select - order by
(以上操作为内连接)
进行多表查询时我们需要对表进行主控方选择,以哪一个表为主
内连接(等值连接):所有满足条件的数据都会被显示出来
外连接(左外,右外,全外)控制左表与右边的数据是否全部显示
where A表表字段(+) = B表表字段 此为右外连接
where A表表字段 = B表表字段(+) 此为左外连接
标准版写法
表一 left | right | full | join 表二 on 去掉笛卡尔积
数据集合操作 (结果集的数据结构必须相同)
union 将两个结果集连接起来,会去除重复数据
结果A union 结果B
union all 将两个结果集连接起来,会 不 去除重复数据
结果A union all 结果B
intersect 将两个结果集连接起来 取交集
结果A intersect 结果B
minus 将两个结果集连接起来 取差集 (计算差集的方式是第一个集合 - 第二个集合)
结果A minus 结果B
分组查询
统计函数
count( * | [ distinct ] 字段 )
(*) 统计结果集个数, (字段) 统计不为 null 的数据个数 如果加上 distinct 则去除重复行
max(字段)
min(字段)
sum(字段)
avg(数字字段)
select [distinct] * | 列名称 [别名] , 列名称 [别名]
from 表名称 [别名] , 表名称 [别名] ... (笛卡尔积不会消除,只是在显示结果集时,隐藏了)
[where 过滤条件] A表表字段 = B表表字段
[group by 分组字段,分组字段]
[order by 字段 [ asc(默认asc升序) | desc(降序) ] , 字段 [ ASC | DESC ] ]
执行顺序 : from - where - group by - select - order by
限制一:在没有使用 group by 子句的时,如果使用了聚合函数 那么select 就不能带其他字段
限制二:在使用了 group by 子句后 select 只能使用聚合,和分组字段.
限制三:统计函数允许嵌套查询,但是嵌套后,select 不能再带有其他字段,统计字段也不能出现
select [distinct] * | 列名称 [别名] , 列名称 [别名]
from 表名称 [别名] , 表名称 [别名] ... (笛卡尔积不会消除,只是在显示结果集时,隐藏了)
[where 过滤条件] A表表字段 = B表表字段
[group by 分组字段,分组字段]
[order by 字段 [ asc(默认asc升序) | desc(降序) ] , 字段 [ ASC | DESC ] ]
[having 条件] (having可以使用聚合函数)
执行顺序 : from - where - group by - having - select - order by