3.1 SQL概述

3.1.1 SQL的产生与发展

目前没有一个数据库系统能够支持SQL标准的所有概念和特性

3.1.2 SQL特点

** 数据查询、数据操纵、数据定义、数据控制 **

  1. 综合统一
  2. 高度非过程化
  3. 面向集合的操作方式
  4. 以同一种语法结构提升多种使用方式
  5. 语言简洁
  6. 易学易用

3.1.3 SQL的基本概念

与数据库的三级模式两级映像相对应
![[Pasted image 20220611083125.png]]
外模式——视图和部分基本表
模式——基本表
内模式——存储文件(系统)

3.3.1 模式的定义与删除

  1. 定义模式
CREATE SCHEMA 模式名 AUTHORIZATION 用户名

CREATE SCHMA 模式名 AUTHORIZAITION 用户名 子句

如果没有指定模式名,则默认为用户名
子句:

CREATE TABLE //基本表
CREATE VIEW  //视图
GRANT        //定义授权
  1. 删除模式
DROP SCHMA 模式名 CASCADE|RESTRICT

CASCADE和RESTRICT必选其一
如果选择了CASCADE(级联)则删除该模式及其下属的所有内容
如果选择了RESTRICT(限制)则除非该模式下没有内容,否则拒绝执行该语句

3.1.2 基本表的定义、删除与修改

  1. 定义基本表
    创建了一个模式就是建立了一个数据库命名空间,首先要定义的就是基本表。

    CREATE TABLE 表名 (列名 数据类型 列级完整性约束,
    			     列名 数据类型 列级完整性约束,
    			     列名 数据类型 列级完整性约束,)
    
    CREATE TABLE Stu (
    	Sno VARCHAR(9) PRIMARY KEY, /*列级完整性约束,主键*/
    	Sname VARCHAR(20) UNIQUE   /*取唯一值*/  
    	Sgender VARCHAR(2) CHECK(Sgender in ('男','女')),
    	·
    	·)
    
  2. 数据类型

数据类型 含义
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. 模式与表
    每一个基本表都属于某个模式,一个模式可以有多个基本表。
    定义基本表时可以有三个方法定义其所属的模式

    1.在表名中明显地给出模式名

CREATE TABLE "S-T".Student(...) //Sdudent所属的模式是S-T	

2.在创建模式时同时创建表
3.设置所属的模式,这样在创建表名时不给出模式名

当用户创建基本表时若没有给出模式名,系统会根据所属的搜索路径来确定对象所属的模式
显示当前的搜索路径

SHOW search_path
  1. 修改基本表
ALTER TABLE <表名>                    
ADD 列名 <新列名><数据类型> [完整性约束] //ADD字句用于增加新列
ADD [表级完整性约束]
DROP [列名] 
DROP CONSTRTRAINT<完整性约束>
ALTER COLUMN<列名><数据类型>
  1. 删除基本表
DROP TABLE <表名> [RESTRICT| CASCADE];

RESTRICT:有限制条件:被删除的表不能被其他表的约束饮用、不能有视图、不能有触发器、不能有存储过程或函数
CACSADE:没有限制,删除表时相关的对象,例如视图都将一起被删除

  1. 删除某列
ALTER TABLE 表名 DROP COLUMN 列名
  1. 添加约束
//格式:
alter table 表格名称 add constraint 约束别名 约束类型 (列名)

约束类型
1. 主键约束
2. check约束:对数据进行限制(大小、类型)
3. unique约束:该列数据不重复(唯一约束)
4. 默认约束:设置此列数据的默认值

alter table 表名称 add constraint 约束别名 约束类型 默认值 for 列名
  1. 外键约束:即当前表的外键,引用外面另一个表的主键,每个值唯一且对应;要建立外键关系,首先要保证用来建立外键关系的列具有唯一性,即具有 UNIQUE 约束
alter table 表名 add constraint   约束别名   约束类型 (列名)   references 引用的表名称 (列名)
  1. 非空约束:一列值不为空

3.3.3 索引的建立与删除

表的数据量比较大时,查询操作会比较耗时,建立索引是加快插查询速度的有效手段。

3.4 数据查询

3.4.1 单表查询

  1. SELECT
    SELECT 语句用于从表中选取数据
    结果被存储在一个结果表中(称为结果集)
SELECT 列名 <目标表达式> FROM 表名 //目标表达式可以是列的属性或表达式(计算)

SELECT * FROM 表名               //全部列
- SELECT DISTINCT
	关键词DISTINCT用于去重
SELECT DISTINCT 列名 FROM 表名
  1. 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' 
  1. ORDER BY 子句

SQL用单引号来环绕字符串值

通配符:

  • % 表示任意长度的字符串
    a%b表示a开头b结尾的任意字符串
  • _表示任意单个字符
  1. ORDER BY
    ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 语句默认按照升序(ASC)对记录进行排序。

如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

  1. INSERT INTO
    用于向表格中插入新的行
INSTERT INTO 表名 VALUES (值1,值2,.....)
  1. UPDATE
    修改表中数据

    UPDATE 表名 SET 列名 = 新值 WHERE 列名 = 值
    
  2. DELETE

    删除行

    DELETE FROM 表名 WHERE 列名 = 值
    

    不删除表的情况下删除所有的行

    DELETE FROM table_name
    
    DELETE * FROM table_name