作者: | 来源:互联网 | 2023-09-25 19:15
文章目录
- 1. SQL基本概念
- 2. 语法
- (1) 列的普通检索、合并与算术操作
- (2) 行的选择
- (3) 函数
- 单行函数( 变量|列名|表达式 ) → 可嵌套无数个单行函数
- 分组函数、多行函数 — 只能嵌套两层
1. SQL基本概念
SQL( Structured Query Language ):结构化查询语言
- SQL分类:
- 数据查询语言( DQL ):从表中 检索数据(select)
- 数据操作语言( DML ):对表中数据进行 增(insert)、删(delete)、改(update)
- 事务处理语言( TPL ): 主要是对数据进行 提交(commit)、回滚(rollback)
- 数据控制语言( DCL ): 主要是对用户的权限 授权(grant)、回收(revoke)
- 数据定义语言( DDL ): 对数据库进行 创建(create)、删除(drop)、修改(alter)
- 注意事项的语法:
- oracle的null:表示无效、无用、未赋值,未知的值
- oracle中的null操作: 任何与其进行算术操作,返回的值都是空值
2. 语法
- SQL语句的关键字不区分大小写,必须使用分号结束
- SQL语句有多条子句,尽量子句分行写 → 代码可读性
- 关键字尽量使用大写,其他语法元素(列名、表名等)则小写 → 代码可读性
(1) 列的普通检索、合并与算术操作
- 表中的列 与 算术操作列 进行 字符串合并输出 → 算术操作列必须必须打括号
- 别名加双引号表示按双引号的格式输出 – 区分大小写、可包含空格、特殊字符
- 原义字符(单引号):字符串字面量、日期
- 关键字distinct:消除重复行
select * from 表名
select distinct * from 表名
select 列名,列名 from 表名
select 列名 别名 from 表名
select 列名 as 别名 from 表名
select 列名+算术运算符+数字/单引号字面量(字符串) from 表名
select 列名 || 列名 from 表名
select 列名 || '字符串' || (算术操作咧) from 表名
select concat(列名,列名/算术操作列) from 表名
(2) 行的选择
注意:
- 【】表示可有可无,不影响 有结果输出
- { }表示里面内容必须有
- | 表示输出的内容可以是其他另一个选项
- 表达式:
select 【 distinct 】 { * | column | expression | function 【别名】 }
from 表名
【where 条件表达式 】
【order by 列名|表达式|列别名|列序号 【asc|desc】】
- 单词型比较操作符:
- like(模糊正则查询)
- %: 代表0个或多个任意字符 → 不代表1个字符
- _ : 仅代表一个任意字符
- escape: 转义字符,(escape+特殊字符) → 即指明是特殊字符
select 列名 from 表名 where 列名 like 'a%b__3@_' escape '@ '
(3) 函数
单行函数( 变量|列名|表达式 ) → 可嵌套无数个单行函数
这些函数 可写在select、where、order by
分组函数、多行函数 – 只能嵌套两层
语法:
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 则不能直接 写除了分组函数以为的其他列
select max(sal) from emp;
不能在where子句里写 有关分组函数的条件语句,有关分组函数条件的语句只能写在having 里面
select deptno, max(sal)
from emp
group by deptno
having max(sal) > 30;
注意 分组函数参数里面可以添加 distinct 去重
select count( distinct deptno ) from emp
注意 avg 只计算有值的列值,空值则忽略不计,为了避免出现平均算少的情况,需要使空值默认有值
select avg(nvl(sal, 0)) from emp;