SQL知识点1 - oracle

1. SQL基本概念

SQL( Structured Query Language ):结构化查询语言

  • SQL分类:
    1. 数据查询语言( DQL ):从表中 检索数据(select)
    2. 数据操作语言( DML ):对表中数据进行 增(insert)、删(delete)、改(update)
    3. 事务处理语言( TPL ): 主要是对数据进行 提交(commit)、回滚(rollback)
    4. 数据控制语言( DCL ): 主要是对用户的权限 授权(grant)、回收(revoke)
    5. 数据定义语言( DDL ): 对数据库进行 创建(create)、删除(drop)、修改(alter)

  • 注意事项的语法:
    1. oracle的null:表示无效、无用、未赋值,未知的值
    2. oracle中的null操作: 任何与其进行算术操作,返回的值都是空值

2. 语法

  1. SQL语句的关键字不区分大小写,必须使用分号结束
  2. SQL语句有多条子句,尽量子句分行写 → 代码可读性
  3. 关键字尽量使用大写,其他语法元素(列名、表名等)则小写 → 代码可读性
(1) 列的普通检索、合并与算术操作
  1. 表中的列 与 算术操作列 进行 字符串合并输出 → 算术操作列必须必须打括号
  2. 别名加双引号表示按双引号的格式输出 - 区分大小写、可包含空格、特殊字符
  3. 原义字符(单引号):字符串字面量、日期
  4. 关键字distinct:消除重复行
select * from 表名            // 检索输出选中表的所有列数据

select distinct * from 表名  // 消除重复行

select 列名,列名  from 表名     // 检索输出选中表的所有指定列数据

select 列名 别名 from 表名        // 输出的列名为别名
select 列名 as 别名 from 表名    

select 列名+算术运算符+数字/单引号字面量(字符串) from  表名  // 对指定列的值进行算术计算

select 列名 || 列名  from 表名    // 把多个列的列值 “字符串形式”合并成一列  输出

select 列名 ||  '字符串' ||  (算术操作咧)  from 表名   // 合并算术操作列与其他列为一列

select  concat(列名,列名/算术操作列)  from 表名   // 合并列值为一列,concat只能写入两个参数

(2) 行的选择

注意:

  • 【】表示可有可无,不影响 有结果输出
  • { }表示里面内容必须有
  • | 表示输出的内容可以是其他另一个选项
  • 表达式:
    select 【 distinct 】 { * | column | expression | function  【别名】 } 
        from 表名 
        【where 条件表达式 】
        【order by 列名|表达式|列别名|列序号 【asc|desc】】

=、>=、<=
> 、<
<> (不等于)
between 下限 and 上限
in(集合元素)
like → 类似正则匹配
is null → 表空值无任何填写
and
or
not
desc 降序 → 空值排在最前
esc 默认升序
escape 转义字符
where使用的限定符
比较操作符
单词型特殊比较操作符
逻辑运算符
order by行的排序 - 必须写在整个语句最后

[外链图片转存失败(img-kFFm3ghZ-1568540199525)(en-resource://database/2224:1)]

  • 单词型比较操作符:
    1. like(模糊正则查询)
      • %: 代表0个或多个任意字符 → 不代表1个字符
      • _ : 仅代表一个任意字符
      • escape: 转义字符,(escape+特殊字符) → 即指明是特殊字符
select 列名 from 表名 where 列名 like  'a%b__3@_' escape '@ '
// 查询的是列值含有 首字母为a、且以 3_ 结尾的、并且倒数第5个字符为b的 行元素 
(3) 函数
单行函数( 变量|列名|表达式 ) → 可嵌套无数个单行函数

这些函数 可写在select、where、order by

lower(列名、表达式),upper(列名、表达式), initcap(列名、表达式) → 转为小写、大写、字符中的单词首字母大写
concat(列名|表达式, 列名|表达式) → 实参连接
substr(列名|表达式,开始index, 截取长度) → 截取字符串
length(列名|表达式) → 返回字符长度
instr(s1, s2, n1, n2)→ 寻找s2在s1的位置,n2第几出现的次数
lpad(s1,n1,s2)、rpad() → 用s2填充s1长度至n1
trim( 需被裁字符 from 字符1) → 去除字符1的头尾需被裁字符
replace(s1,s2,s3) → s1中的s2换成s3
round(列名|表达式, 保留小数位数) → 四舍五入
trunc(列名|表达式, 保留小数位数) → 单纯只是裁减
mod(m, n) → m/n的余数
属性sysdate → 返回window系统设置的日期
months_between(date1,date2) → 返回两者间隔的月数
add_months(date, n) → 日期加上月数后的新日期
next_day(date, '星期几')/last_day → 下一个日期,当月最后一个日期
round(date, 格式) → 指定的格式后一位进行四舍五入
extract(year/month/day from date) → 截取年份/月份/或者天数
to_char(date, ''日期格式)
to_nmber
to_date('日期字符串','根据字符串写日期格式')
nvl(列名|表达式,替代字符) → 参数1为空则替代字符替代
nvl2(列名|表达式,字符1,字符2) → 参数1为null则返回字符2,否则字符1
nvllif(参数1,参数2) → 两参相等返回nll,否则返回参数1
coalesce(无限个参数) → 返回首次不为null的参数
when then → 可写区间范围
decode then → 具体的数字
单行函数
字符
数值
日期
转换
通用

分组函数、多行函数 – 只能嵌套两层

语法:
  select 列|分组函数 from 表名
   where 行筛选条件
   group by 列名
   having 分组函数的条件
   order by 列名|分组函数表达式列

执行顺序

from(选表) --> where(选符合行) --> group by(行分组) --> having(选符合组) --> select(选输出的列) --> order by(排序行)

函数的语法以及注意事项

分组group by 列名有什么都需要写上去,除了分组函数

select deptno, ename, avg(count)
   from emp
   group by deptno , ename     //分组字段后面所要写的列: 表显示的全部列,除了分组函数
//错误书写,会报错   // group by deptno   

没有写 group by 则不能直接 写除了分组函数以为的其他列

select max(sal) from emp;   
// select ename, max(sal) from emp    错误,无group by 则不能在输入其他的列

不能在where子句里写 有关分组函数的条件语句,有关分组函数条件的语句只能写在having 里面

select deptno, max(sal) 
    from emp
    // where  max(sal) > 30  则直接报错,分组函数条件语句需写在having后面
    group by deptno
    having max(sal) > 30;
    

分组函数
min(列名) - 最小值
max(列名) - 最大值
sum(列名) - 求和
avg(列名) - 平均数
count(列名) - 行数

注意 分组函数参数里面可以添加 distinct 去重

select count( distinct deptno ) from emp   // 输出有员工的部门数量

注意 avg 只计算有值的列值,空值则忽略不计,为了避免出现平均算少的情况,需要使空值默认有值

select avg(nvl(sal, 0))  from emp;      //行数有多少则除以多少,反映所有行的平均情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值