目录
1.对表的增删改查......................................................................................................................................1
1.1 插入数据............................................................................................................................................1
1.2 更新数据............................................................................................................................................1
1.2.1 多表联合更新.......................................................................................................................... 1
1.3 删除数据............................................................................................................................................1
1.3.1 多表删除(使用连接)........................................................................................................1
1.4 查询语句执行顺序......................................................................................................................... 2
1.5 查询语句注意事项......................................................................................................................... 2
1.6 子查询................................................................................................................................................ 3
DDL 使用子查询................................................................................................................................4
子查询创建表.....................................................................................................................................4
DML 使用子查询...............................................................................................................................4
单行单列子查询................................................................................................................................ 4
多行单列子查询................................................................................................................................ 5
多列子查询......................................................................................................................................... 6
子查询在 FROM 部分....................................................................................................................6
1.7 关联查询............................................................................................................................................6
1.7.1 内连接........................................................................................................................................ 7
1.7.2 外连接........................................................................................................................................ 7
1.7.3 自连接........................................................................................................................................ 8
1.8 UNION 并集(合并重复) ...............................................................................................................9
1.9 分页查询............................................................................................................................................9
1.9.1Mysql 分页方式:.................................................................................................................11
2.DDL 数据库定义.................................................................................................................................. 12
2.1 约束.................................................................................................................................................. 12
2.2 索引.................................................................................................................................................. 13
2.3 序列.................................................................................................................................................. 14
2.4 视图(VIEW)..................................................................................................................................... 15
3.各种函数.................................................................................................................................................19
3.1 DECODE 函数...............................................................................................................................19
3.2 CASE 语句,.................................................................................................................................... 19
3.3 排序函数......................................................................................................................................... 20
3.3.1 ROW_NUMBERR() OVER().................................................................................................20
3.3.2 RANK() 函数..........................................................................................................................20
3.3.3 DENSE_RANK() 函数.......................................................................................................... 20
3.4ROLLUP() 分组函数..................................................................................................................... 21
3.5 字符串连接函数 concat............................................................................................................22
3.6 查询函数 字符串长度 length................................................................................................22
3.7 字符串转化为全大写,全小写,以及首字母大写..........................................................22
3.8 伪表:dual..................................................................................................................................... 22
3.9 去掉字符串两边,左侧,右侧的指定的重复字符........................................................... 23
3.10 补位函数.......................................................................................................................................23
3.11 截取函数 substr.........................................................................................................................23
3.12 instr(char1, char2[, n, m]) 函数.............................................................................................23
3.13 数字函数......................................................................................................................................23
3.14 trunc 截取数字函数(不进位).................................................................................................24
3.15 mod(m, n) 求余数.................................................................................................................... 24
3.16 ceil floor 向上,向下取整......................................................................................................24
3.17 日期...............................................................................................................................................24
3.18 NULL.............................................................................................................................................. 25
3.19 空值函数 NVL(arg1, arg2),................................................................................................... 25
3.20 NVL2(arg1, arg2, arg3)............................................................................................................ 26
4. UNION 并集(合并重复).................................................................................................................. 27
INTERSECT 交集.............................................................................................................................27
MINUS 差集.....................................................................................................................................27
5. plsql........................................................................................................................................................ 28
5.1 概念.................................................................................................................................................. 28
5.2 语法结构......................................................................................................................................... 28
5.3 pl/sql 包含元素.............................................................................................................................28
示例.....................................................................................................................................................28
5.4 常用符号......................................................................................................................................... 28
5.5 数据类型......................................................................................................................................... 28
5.6 常量.................................................................................................................................................. 29
5.7 变量.................................................................................................................................................. 29
5.8 PL/SQL 中控制语句.....................................................................................................................30
5.8.1 if 语句(三种)...........................................................................................................................30
5.8.2case 语句:............................................................................................................................. 31
5.8.4 循环(三种)............................................................................................................................. 32
5.8.4goto 及 null............................................................................................................................. 33
5.9 异常处理......................................................................................................................................... 34
5.9.1 异常分类................................................................................................................................. 34
5.9.2 未处理异常的情况...............................................................................................................34
5.9.3 使用异常的情况................................................................................................................... 34
6.存储过程.................................................................................................................................................36
7.触发器......................................................................................................................................................37
8.注意事项.................................................................................................................................................38
1.对表的增删改查
'xr',
'24',
'100000',
('15010730',
TO_DATE('1997-05-13',
1.1 插入数据
1.插入时必须满足插入约束,并且必须为主键和 NOT NULL 提供数据
2.增加数据时,数据必须与列顺序和个数保持一致,除非自己指定
3.建议全部用单引号括起来
4.插入日期建议使用 TO_DATE 自定义格式来插入时间
5.未使用 DEFAULT 来限定默认值,则为 NULL
INSERT INTO stu (id, name, age, salary, birth)
VALUES
'YYYY-MM-DD'));
SELECT * FROM stu
1.2 更新数据
UPDATE stu
SET age = '21', birth = TO_DATE('1997-05-13', 'YYYY-MM-DD')
where name = 'xr';
select * from stu
1.2.1 多表联合更新
update productinfo join priceinfo
on productinfo.pdtid = priceinfo.pdtid
set productinfo.pricecount = productinfo.pricecount + 1, priceinfo.realtimeprice =
100000
where productinfo.pdtid="5";
1.3 删除数据
1.delete 语句要加 where 限制条件,否则就是删除所有的数据
2.delete 可以用 RILLBACK 来回滚恢复数据
3.truncate 清 空 数 据 , 且 不 可 以 回 退 , 但 是 效 率 比 delete 高 TRUNCATE
TABLEtable_name
DELETE FROM stu
WHERE id = '15010731';
SELECT * FROM stu
ROLLBACK;
SELECT * FROM stu
1.3.1 多表删除(使用连接)
delete productinfo.*, priceinfo.*
from productinfo join priceinfo
1
on productinfo.pdtid = priceinfo.pdtid
where productinfo.pdtid = "11";
1.4 查询语句执行顺序
1.FROM 子句:执行顺序为从后往前,从右往左
数据量较小的表尽量放在后面
2.WHERE 子句:执行顺序自下而上,从左到右
将能过滤最大数量记录的条件写在 WHERE 子句的最右边
3.GROUP BY 子句:执行顺序从左往右
最好在 GROUP BY 前使用 WHERE 将不需要的记录在 GROUP BY 之前
过滤掉
能写在 WHERE 中的条件 就不要写在 HAVING 中
4.HAVING 子句:消耗资源,在检索出所有记录之后才对结果集进行过滤,需要
排序等操作
5.SELECT 子句,少用 * 号
6.ORDER BY 执行顺序 从左到右,消耗资源
1.5 查询语句注意事项
1.SELECT 可以使用 +-*/ 四则运算和函数,数字类型都可以运算,日期只能加
减操作
2.salary *1.2 sal 其中 sal 为 salary*1.2 的别名别名本身不区分大小写,可以用
“” 来区分
3.不等于 <>
4.AND 和 OR, AND 的优先级大于 OR,可以通过括号来提高 OR 的优先级
5.LIKE/NOT LIKE 模糊查询, % 代表 0 个或多个字符,_代表一个且只能为一个
字符
6.IN/NOT IN 判断是否在列表中,常用来判断子查询的结果
7.BETWEEN AND 判断在两者之间
8.IS NULL/IS NOT NULL 是否为空
9.ANY 满足一个一个即可, ALL 满足所有, 这两个都不能单独使用,需要配合单
行比较操作符来使用,常用于子查询
ANY(list) 大于列表中最小的,>ALL(list) 大于列表中最大的
10.DISTINCT 关键字,对查询结果指定字段进行去重,DISTINCT 必须只放在
SELECT 后面,否则会报缺少表达式错误
DISTINCT 后面跟一个就是筛选单个字段,跟多个就是筛选多个字段
筛选多个字段规则就是,将多字段组合起来看是否相同
11.ORDER BY [ASC|DESC] 升序|降序,默认为升序,必须出现在 SELECT 字句
的最下面
2
ORDER BY 子句中出现的字段一定要是 SELECT 中查询结果中的字段,
否则会报错(不是 SELECTed 表达式)
其中多个比较字段,按照先后顺序,前面的字段相等时,再根据下一个字段
的比较规则来进行比较
每个字段都可以单独指定排序规则
排序字段中含有 NULL 值,其中 NULL 值被视为 最大值
12.聚合函数,又叫多行函数,分组函数,用来对结果集某些字段的值进行统计,都忽
略 NULL 值
MAX/MIN 求给定字段的最大/最小值, AVG 求给定字段的平均值,
COUNT 返回查询结果中给定字段中不为 NULL 的记录数
如果在一个查询中使用了聚合函数,则任何不在聚合函数中的列或表达式都
必须出现在 GROUP BY 子句中,但是 GROUP BY
中可以有 SELECT 中未出现的列(字段)
查看表的记录数可以使用 SELECT COUNT(*) FROM table_name
13.GROUP BY 可以将结果集按照指定的字段值相同的记录看做一组,然后配合
聚合函数进行更细分的统计工作
如果在一个查询中使用了聚合函数,则任何不在聚合函数中的列或表达式都
必须出现在 GROUP BY 子句中,但是 GROUP BY
中可以有 SELECT 中未出现的列(字段)
GROUP BY 可以根据多个字段分组,分组原则为这几个字段值都相同的记
录看做一组
默认排序规则为升序,可以用 ORDER BY 进行排序
HAVING 和 GROUP BY 一起使用 时,可以使用 聚合函数,如 果不和
GROUP BY 一起使用,和 WHERE 功能一样,
HAVING 放在 GROUP BY 之后
14.WHERE 不能使用聚合函数,HAVING 配合 GROUP BY 可以使用聚合函数
综合实例:
SELECT DISTINCT name, salary*1.2 sal, MAX(id), name, job, age
FROM stu
WHERE (name LIKE 'x%') AND (salary >= 1000) AND (job IN(' 员 工 ')) AND
(salary BETWEEN 200 AND 200000)
AND (birth IS NOT NULL) AND (salary > ANY(100, 1000, 10000)) AND (salary <
ALL(1000000, 10000000))
GROUP BY name, job, age, salary*1.2, gender
ORDER BY age DESC, salary*1.2 DESC6
1.6 子查询
// 查询薪水比 CLARK 高的员工名字及薪水
3
SELECT ename, sal
FROM emp
WHERE sal > (SELECT sal FROM emp WHERE ename = 'CLARK')
// 查询和 CLARK 同职位的职工的名字和岗位
SELECT ename, job
FROM emp
WHERE job = (SELECT job FROM emp WHERE ename = 'CLARK')
SELECT ename, deptno
FROM emp
WHERE deptno = (SELECT deptno FROM emp WHERE ename = 'CLARK')
DDL 使用子查询
子查询创建表
1.子查询中的字段有别名则该表对应字段就使用该别名作为其字段名
2.当子查询中的一个字段有函数护着表达式,那么该字段必须用别名
CREATE TABLE employee
AS
SELECT e.ename, e.deptno, e.sal,
e.empno, e.mgr, e.job,
d.loc, d.dname
FROM emp e, dept d
WHERE d.deptno = e.deptno(+)
SELECT * FROM employee
DROP TABLE employee
DML 使用子查询
DELETE FROM employee
WHERE deptno = (SELECT deptno
FROM employee
WHERE ename = 'CLARK')
单行单列子查询
SELECT ename, job
FROM emp
WHERE deptno = (SELECT deptno
FROM emp
WHERE ename = 'CLARK')
4
多行单列子查询
1.使用多行比较操作符 IN, ALL, ANY, 其中 ALL 和 ANY 要配合单行比较操
作符 > >= <=一起使用
判断 = 时用 IN
查询工资大于 10 号部门任一工资的人员信息
SELECT ename, job, deptno, sal
FROM emp
WHERE sal > ANY(SELECT sal
FROM emp
WHERE deptno = 10)
// <> 表示不等于
AND deptno <> 10
查询同部门的不是 SALESMAN 的其他职位
SELECT ename, job, deptno, sal
FROM emp
WHERE deptno IN (SELECT deptno
FROM emp
WHERE job = 'SALESMAN')
AND job <> 'SALESMAN'
查询工资比 SALESMAN 和 CLERK 都高的员工信息
SELECT ename, job, sal
FROM emp
WHERE sal > ALL(SELECT sal
FROM emp
WHERE job IN ('SALESMAN', 'CLERK'))
EXISTS 后面跟一个子查询,当该子查询可以查询出只少一条信息时,则
EXISTS 为真
查询有员工的部门是哪些
SELECT deptno, loc
FROM dept d
WHERE EXISTS(SELECT * FROM emp e
WHERE e.deptno = d.deptno)
查询最低薪水比 30 号部门最低薪水高的部门
SELECT deptno, MIN(sal)
FROM emp e
GROUP BY deptno
HAVING MIN(sal) > (SELECT MIN(sal)
FROM emp
5