3.1 SQL概述
3.1.1 SQL的产生与发展
目前没有一个数据库系统能够支持SQL标准的所有概念和特性
3.1.2 SQL特点
** 数据查询、数据操纵、数据定义、数据控制 **
- 综合统一
- 高度非过程化
- 面向集合的操作方式
- 以同一种语法结构提升多种使用方式
- 语言简洁
- 易学易用
3.1.3 SQL的基本概念
与数据库的三级模式两级映像相对应
![[Pasted image 20220611083125.png]]
外模式——视图和部分基本表
模式——基本表
内模式——存储文件(系统)
3.3.1 模式的定义与删除
- 定义模式
CREATE SCHEMA 模式名 AUTHORIZATION 用户名
CREATE SCHMA 模式名 AUTHORIZAITION 用户名 子句
如果没有指定模式名,则默认为用户名
子句:
CREATE TABLE //基本表
CREATE VIEW //视图
GRANT //定义授权
- 删除模式
DROP SCHMA 模式名 CASCADE|RESTRICT
CASCADE和RESTRICT必选其一
如果选择了CASCADE(级联)则删除该模式及其下属的所有内容
如果选择了RESTRICT(限制)则除非该模式下没有内容,否则拒绝执行该语句
3.1.2 基本表的定义、删除与修改
-
定义基本表
创建了一个模式就是建立了一个数据库命名空间,首先要定义的就是基本表。CREATE TABLE 表名 (列名 数据类型 列级完整性约束, 列名 数据类型 列级完整性约束, 列名 数据类型 列级完整性约束,) CREATE TABLE Stu ( Sno VARCHAR(9) PRIMARY KEY, /*列级完整性约束,主键*/ Sname VARCHAR(20) UNIQUE /*取唯一值*/ Sgender VARCHAR(2) CHECK(Sgender in ('男','女')), · ·)
-
数据类型
数据类型 | 含义 |
---|---|
CHAR(n),CHARACTER(n) | 长度为n的定长字符串 |
VARCHAR(N),CHARACTERVARYING(n) | 最大长度为n的变长字符串 |
CLOB | 字符串大对象 |
BLOB | 二进制大对象 |
INT,INTEGER | 长整数(4字节) |
SMALLINT | 短整数(2字节) |
BIGINT | 大整数(8字节) |
NUMERIC(p,d),DECIMAL(p,d),DEC(p,d) | 定点数,共p位数字,小数有d位 |
REAL | 取决于机器精度的单精度浮点数 |
DOUBLE PRECISION | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 可选精度浮点数,精度至少n位 |
BOOLEAN | 逻辑布尔量 |
DATA | 日期,包含年、月、日,格式为YYYY-MM-DD |
TIME | 时间,包含时、分、秒,格式为HH:MM:SS |
TIMESTAMP | 时间戳 |
INTERBVAL | 时间间隔 |
-
模式与表
每一个基本表都属于某个模式,一个模式可以有多个基本表。
定义基本表时可以有三个方法定义其所属的模式1.在表名中明显地给出模式名
CREATE TABLE "S-T".Student(...) //Sdudent所属的模式是S-T
2.在创建模式时同时创建表
3.设置所属的模式,这样在创建表名时不给出模式名
当用户创建基本表时若没有给出模式名,系统会根据所属的搜索路径来确定对象所属的模式
显示当前的搜索路径
SHOW search_path
- 修改基本表
ALTER TABLE <表名>
ADD 列名 <新列名><数据类型> [完整性约束] //ADD字句用于增加新列
ADD [表级完整性约束]
DROP [列名]
DROP CONSTRTRAINT<完整性约束>
ALTER COLUMN<列名><数据类型>
- 删除基本表
DROP TABLE <表名> [RESTRICT| CASCADE];
RESTRICT:有限制条件:被删除的表不能被其他表的约束饮用、不能有视图、不能有触发器、不能有存储过程或函数
CACSADE:没有限制,删除表时相关的对象,例如视图都将一起被删除
- 删除某列
ALTER TABLE 表名 DROP COLUMN 列名
- 添加约束
//格式:
alter table 表格名称 add constraint 约束别名 约束类型 (列名)
约束类型
1. 主键约束
2. check约束:对数据进行限制(大小、类型)
3. unique约束:该列数据不重复(唯一约束)
4. 默认约束:设置此列数据的默认值
alter table 表名称 add constraint 约束别名 约束类型 默认值 for 列名
- 外键约束:即当前表的外键,引用外面另一个表的主键,每个值唯一且对应;要建立外键关系,首先要保证用来建立外键关系的列具有唯一性,即具有 UNIQUE 约束
alter table 表名 add constraint 约束别名 约束类型 (列名) references 引用的表名称 (列名)
- 非空约束:一列值不为空
3.3.3 索引的建立与删除
表的数据量比较大时,查询操作会比较耗时,建立索引是加快插查询速度的有效手段。
3.4 数据查询
3.4.1 单表查询
- SELECT
SELECT 语句用于从表中选取数据
结果被存储在一个结果表中(称为结果集)
SELECT 列名 <目标表达式> FROM 表名 //目标表达式可以是列的属性或表达式(计算)
SELECT * FROM 表名 //全部列
- SELECT DISTINCT
关键词DISTINCT用于去重
SELECT DISTINCT 列名 FROM 表名
- WHERE
如需有条件地从表中选取数据,可将WHERE子句添加到SELECT语句
SELECT 列名 FROM 表名 WHERE 列 运算符 值
类型 | 内容 |
---|---|
比较 | = 、 > 、<、<>、!> 、!< |
范围 | BETWEEN AND、NOT NETWEEN AND |
确定集合 | IN , NOT IN |
字符匹配 | LIKE, NOT LIKE |
空 | IS NULL, IS NOT NULL |
多重条件 | AND OR NOT |
例:
1. 比较:
WHERE 属性名 < 数值
2. 确定范围
WHERE 属性 BETWEEN 下限 AND 上限 //在XX范围内
WHERE 属性 NOT BETWEEN 下限 AND 上限 //不在XX范围内
3. 确定集合
WHERE IN('属性','属性') //在集合内
WHERE NOT IN('属性','属性') //不在集合内
4. 字符匹配
[NOT] LIKE '匹配串' [ESCAPE '换码字符']
查找与匹配串相符的元组,匹配串可以是一个完整的字符串,也可以含有通配符%和_
- % 代表任意长度的字符串,例如a%b代表a开头b结尾的任意长度的字符串
- _ 代表任意单个字符,例如a_b代表a开头b结尾的长度为3的任意字符串
WHERE Sname LIKE '刘%' //所有‘刘’开头的元组
WHERE Sname LIKE '欧阳_' //‘欧阳’开头且字符长度为3的元组
WHERE Cname LIKE 'DB\_Design' ESCAPE'\' //查询的内容为‘DB_Design’,ESCAPE‘\’表示‘\’为换码字符,这样后面的‘—’就不会再被作为通配符处理
5. 空值查询
WHERE 属性名 IS NULL
WHERE 属性名 IS NOT NULL
6. 多重条件查询
逻辑运算符AND和OR可以用来连接多个查询条件
WHERE Sdept='CS' AND Sage<20
WHERE Sdept='CS' OR Sdept='MA'
- ORDER BY 子句
SQL用单引号来环绕字符串值
通配符:
- % 表示任意长度的字符串
a%b表示a开头b结尾的任意字符串 - _表示任意单个字符
- ORDER BY
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序(ASC)对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
- INSERT INTO
用于向表格中插入新的行
INSTERT INTO 表名 VALUES (值1,值2,.....)
-
UPDATE
修改表中数据UPDATE 表名 SET 列名 = 新值 WHERE 列名 = 值
-
DELETE
删除行
DELETE FROM 表名 WHERE 列名 = 值
不删除表的情况下删除所有的行
DELETE FROM table_name DELETE * FROM table_name