文章目录
1 序言
1.1 数据库与数据库管理软件
- 数据库(Database)
以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,它具有完整性、共享性。 - 数据库管理系统(Database Management System)
一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性完整性、共享性等。
1.2 数据存储的发展阶段
- 人工管理:数据保存在磁带上,顺序读写,不能共享,安全性差
- 文件系统:以文件方式存储在本地磁盘,数据访问相对独立,数据冗余
- 数据库:结构化数据模型,冗余度低,控制能力强
- 大数据:数据量大,分布式计算
1.3 关系型数据库
建立在关系模型的基础上,借助于集合代数等数学概念和方法来处理数据库中的数据。具有实体跟实体间的关系。
2 SQL
2.1 什么是SQL
- 结构化查询语言(Structured Query Language)
- 结构化:按照一定规则安排和处理对实体进行处理
2.2 SQL的各种基础语法
select、insert、update、delete等基础增删改查操作
2.2.1 select查询语句基础
- 投影:选择列
- 选择:选择行
- 连接:查询多表
- 基本SQL语句
select * from table
- 算数表达式和运算符优先级
select name,sal*12+100 from table
- NULL值 既不是0也不是空格,表示缺省值
- 列的别名
select name [as] "Name" from table
- 级联操作
select name||sal from table
(结果是将name与sal拼接在一起) - 消除重复行
select DISTINCT * from table
- 查询语句的限制
select * from table where 条件
- 将查询结果排序显示
select * from table order by 排序条目 [desc(降序)]
2.2.2 典型单行函数
- 字符函数
- 转小写
LOWER('字符串')
- 转大写
UPPER('字符串')
- 单词首字母大写
INITCAP('字符串')
- 字符串拼接
CONCAT('字符串1','字符串2')
- 取子串
SUBSTR('字符串',开始位置,结束位置)
- 获得字符串长度
LENGTH('字符串')
- 查找子串位置
INSTR('字符串','子串')
- 转小写
- 常用数字函数
- 四舍五入
ROUND(数字)
- 直接删除保留有效数字
TRUNC(数字,保留小数点后位数)
- 四舍五入
- 常用日期函数
- 获取当前系统时间
SYSDATE()
- 获取当前系统时间
- 常用转换函数
- 日期转字符
TOCHAR('日期','转换格式')
- 数字转字符
TOCHAR('数字','转换格式')
- 字符转数字
TONUMBER('字符')
- 字符转日期
TODATE('字符','日期格式')
- 日期转字符
2.2.3 典型分组函数(多行函数)
对多行数据进行汇总处理,统计等操作
- 分组函数
- 求最大值
MAX(字段)
- 求最小值
MIN(字段)
- 求平均值
AVG(数字型字段)
- 求和函数
SUM(求和字段)
- 计数
COUNT(*(任意一列))
- 求最大值
- 分组子句
- 按照字段进行分组
GROUP BY 字段
- 对分组查询结果进行限制(只能跟在GROUP BY后面)
HAVING 条件
- 对分组结果进行排序
ORDER BY 字段
- 按照字段进行分组
2.2.4 多表连接查询
- 自连接:表自己与自己建立的连接
- 等值连接:比较连接列的值显示最终结果
- 外连接
- 左外连接:以左表为准
FROM 表1,表2 WHERE 表1.数据 = 表2.数据(+)
- 右外连接:以右表为准
FROM 表1,表2 WHERE 表1.数据(+) = 表2.数据
- 全连接:显示所有记录
FROM 表1 FULL JOIN 表2 ON 表1.数据 = 表2.数据
- 左外连接:以左表为准
2.2.5 典型子查询
一个查询的输出是另一个查询的输入,也称为嵌套查询
编号 | 注意事项 |
---|---|
1 | 基于未知时考虑使用子查询 |
2 | 子查询要用括号包在里面 |
3 | 子查询放在主查询右边,提高可读性 |
- 单行子查询:返回结果为一行且只有一列的查询,通过算数运算符=><进行条件选择
- 多行子查询:返回结果有多行且只有一列的查询,通过in、any或者all进行条件选择
- 空值子查询:返回结果为NULL
2.2.6 表结构操作
-
创建表
CREATE TABLE 表名(列名 数据类型 约束
,…) -
数据类型
名称 表示 可变字符 VARCHAR2(字符串长度) 日期 yyyy-MM-dd HH:mm:ss 数值 NUMBER(m,n),m表示整数长度,n表示小数长度 布尔值 BOOLEAN,true或者false -
列约束与表约束
名称 表示 非空 Not NULL,不能为空值 ,不为表约束 唯一 unique,不能有重复值 主键 Primary Key,表示唯一索引 外键 Foreign Key,多张表中都存在 条件检查 Check,进行检查 -
增加列
ALTER TABLE 表名 ADD 列名 数据类型 约束
-
删除列
ALTER TABLE 表名 DROP COLUMN 列名
-
修改表名
ALTER TABLE 表名 RENAME TO 新表名
-
增加列名
ALTER TABLE 表名 RENAME COLUMN 列名 TO 新列名
-
删除表
DROP TABLE 表名 CASCADE CONSTRAINTS
-
查看表结构
DESCRIP 表名
2.2.7 数据操作语言(Data Manipulation Language, DML)
-
增加新行到表中
INSERT INTO 表名 (列名,...) VALUES(列,...)
编号 关键点 1 字符串与日期类型需要用引号包含 2 新增的数据要与列一一对应 -
修改表中的行
UPDATE 表名 SET 列名=新值 WHERE 条件
-
删除表中的行
DELETE FROM 表名 WHERE 条件
2.2.8 事务操作语句
-
事务
- 数据库的一系列操作单元集合,要么全部完成,要么取消,保证操作一致性。
- 执行数据操作语言(DML)时,事务开始
- commit或者rollback等操作、DDL或者DCL等操作、系统崩溃时标志事务结束
-
事务控制
事务命令 描述 Commit 提交事务 RollBack 回滚事务 SavePoint 事务标记点,可以使事务回滚到不同阶段 Roll Back to savepoint 回滚到标记点
2.3 SQL优化
处理 | 原因 |
---|---|
尽量避免使用* | *表示所有,耗费时间长,效率低 |
尽量使用表的别名 | 编写语句时更加便捷 |
小范围的查询子句尽量放在右边 | WHERE子句的连接顺序是从右向左,所以更加高效 |
尽量使用>=代替> | >=找到中间值直接就是目标值,效率高 |
用TRUNCATE代替DELETE | TRUNCATE是直接删除,不保存缓存区进行回滚,效率更高 |
尽量多使用COMMIT | 当使用命令较多而不提交时,会占用大量资源,降低效率,COMMIT会释放资源 |
避免在索引列上使用函数 | 如果直接对索引列进行数学运算,其索引功能没有发挥作用,效率低下 |