标准数据库语言SQL-基础入门(详细版总结)

本文详细介绍了SQL语言的基本概要、特点及主要操作,包括数据定义、查询、操纵和控制。讨论了SQL的动词如CREATE、SELECT、UPDATE、DELETE,以及完整性约束如主键、唯一性约束、非空值约束。此外,还涵盖了数据表的创建、修改和删除,以及索引的使用。内容还包括视图的创建、更新和删除,以及数据操纵的插入、修改和删除操作。

申明:以下内容是对课本知识和老师课堂内容的总结,若有侵权请与笔者联系,笔者会及时处理。

 

#   关系数据库标准语言—SQL
##  3.1 SQL语言的基本概要和特点
###  SQL的特点
- 综合统一
- 高度非过程化
- 一种语言提供多种使用方式
- 语言简洁 易学易用
- 面向集合的操作方式
  ** SQL语言动词一览 **
    数据定义   CREATE    ALTER DROP 
    数据查询    SELECT
    数据操纵     UPDATE DELETE INSERT
    数据控制    GRANT REMOKE
创建与使用数据表
    定义基本表
    修改基本表
    删除基本表
|操作对象| 创建                     |删除             |修改               |    
|表             |Create    table    |Drop table      |ALTER TABLE|
|视图           |Create     view    |Drop view      |            \                |
|索引         |Create    index     |Drop index  |            \                |
##  定义基本表
CREATE TABLE 表名
    (列名 数据类型 约束条件,列名 数据类型 约束条件....);

##  常用完整性约束
主码约束 PRIMARY KEY
唯一性约束 UNIQUE
非空值约束 NOT NULL
参照完整性约束

## PRIMARY KEY 和 UNIQUE 的区别
- 相同点:
    都会建立唯一索引来保证所在列值的唯一性
- 不同点:
    PRIMARY KEY 约束 该列不可以为空值,仅可设置一个
    UNIQUE 则可以 设为控制 且可以设置多个
    不可以将 PK 和UN约束同时设置
    
##  完整性约束
完整性约束规定了每一个关系实例必须满足的条件
    不满足的 修改更新删除 插入 等操作会被拒绝
    确保应用程序的语义环境 防止数据的不一致
- 完整性约束 1 主码约束 2 外码约束 3 域约束    4 一般性约束
- 格式 constraint <约束名> <约束条件> 
- 修改完整性约束 ALTER TABLE 表名 DROP CONSTRAINT约束名字

## 一般性约束 
CREATE TABLE MY( rate INTEGER,no INTEGER,
CHECK(rate>100 AND rate <200)); 
== 使用 CHECK 关键字 然后 用在创建表时 ==

##   断言ASSERTION
    多个表上的完整性约束 
- CREATE ASSERTION  断言名 ( 条件 );
- DROP ASSERTION 断言名

##   触发器  
    触发器是一个过程 他对数据库的特定改变进行响应 由DBMS自动调用
    包含三要素
    - 事件    激活触发器的数据库改变
    - 条件    当触发器激活时运行的查询或检测
    - 动作    触发器被激活且条件为真时 DBMS执行的过程
### 触发器的作用 
    - 维护数据的完整性
    - 提醒用户不寻常事情的发生
    - 产生事件的日志 同时支持审计和安全性检查
    - 用于工作流管理 和 保证商业规则


## 修改基本表 ALTER
ALTER TABLE 表名 ADD 完整性约束条件或者列;
                                  DROP 删除完整性约束条件或者列;
                                  MODIFY 用于修改属性名和数据类型;

## 删除基本表 
DROP TABLE 表名;

## 创建和使用索引
CREATE UNIQUE/CLUSTER INDEX 索引名字 ON 表名
(列名 次序,列名 次序);
- 表名 指定建立索引的表 列 那就是指定列 
- 次序  ASC升序 DESC 降序 
- UNIQUE  对应的索引值唯一
- CLUSTER  聚簇索引  就是 物理存储两两相邻 (具体内容度娘)
### 唯一值索引 
1 对于已有重复数据的属性列不能够增加UNIQUE索引
2 增加了UNIQUE后相当于给改属性列增加了 UNIQUE约束
    每次输入数据都会检查
## 删除索引
DROP  INDEX 索引名
## 数据查询
单表查询 连接查询 嵌套查询 集合查询
SELECT ALL/DISTINCT 属性名 
    FROM 表名
        WHERE ()
            GROUP BY () HAVING ()
                ORDER BY();
 - SELECT 指定要查询的属性列
 - FROM 指定要查询的表或者视图
 - WHERE  指定查询条件
 - GROUP BY 对查询的结果按照相同的值进行分组,在组中还
     通常会使用 聚集函数
 - HAVING 筛选出满足条件的组
 - ORDER BY 子句 将查询的结果按照指定列进行排序 ASC 升序 DESC 降序

## 单表查询  
### 1选择表中的若干列

-- 查询指定列  查询全部列  查询经过计算的值
- 查询全部列 可以用 *  代替所有属性名 
- 可以查询经过计算的值  ppt -  ISLOWER 
- 使用列别名 改变查询结果的 标题  
    例 : SELECT SNAME NAME FROM STUDENTS;
    直接在属性名后重新命名即可

### 2选择表中的若干元组
1)消除取值重复的 行 用DISTINCT 关键字
    ALL 就是 选取所有 但是 DISTINCT 就是选取不同值  ALL一般省略
    DISTINCT 的作用范围是 所有目标列 该关键字紧跟SELECT
2)查询满足条件的元组 
    用WHERE 关键字  
    
|查询条件 |                                谓 词                                           |
|      比较      |  > < >= <= = != !> !< not +                                 |
| 确定范围|     BETWEEN AND , NOT BETWEEN AND         |
| 确定集合|  IN , NOT IN                                                           | 
| 字符匹配|  LIKE ,NOT LIKE                                                  |
|  空值          |  IS NULL, NOT IS NULL                                        |
| 多重条件 |   AND,OR                                                              |

(1)比较 大小 where + 条件 (用比较谓词)

(2)确定范围  
-    可以用 BETWEEN AND 或者 NOT BETWEEN
- AND 或者用比较 谓词和 多重条件结合

(3)确定集合 用IN (值表 ) 或者 NOT IN (值表) 
    值表要用逗号分隔
    
(4)字符串匹配 LIKE / NOT LIKE     <匹配串>
匹配串 用英文 的双引号
-> 匹配模板 :  固定字符串或者含有通配符的字符串
    当匹配模板为  固定字符串时 可以用 = 或者 !=来代替 LIKE or NOT LIKE
    
####  通配符
-  %代表任意长度
-  _ 代表单个字符
汉字 要用 俩个 __ 因为汉字是俩个字符构成单个汉字

(5)涉及空值的查询 
    使用 谓词  IS NULL  / IS NOT NULL
    IS NULL不能用 = NULL代替

(6)多重条件查询
     AND OR 来联接  AND 优先级 大于 OR 
     多用括号
 
###    3对查询结果排序 
 使用 ORDER BY 可按照一个或者多个属性值进行排序
 ASC 顺序 DESC 降序 
 NULL=无穷大  ——> 降序时在前 升序时在后

###  4使用聚集函数
计数 COUNT (ALL/DISTINCT 属性名)
求和 SUM(同上)
求平均 AVG(同上)
MAX() MIN () 同上

### 5 查询结果分组
使用GROUP BY 字句分组
细化  聚集函数的作用对象 
        (测试)未对查询结果进行分组 聚集函数将作用于整个查询结果
        (测试)对查询结果分组后 聚集函数将分别作用于每个组
    
- GROUP BY 的对象是 查询的中间结果  
- GROUP BY可以选取 属性列中的 一列 或者多列 值相等的为一组
- GROUP BY 之后 SELECT 只能够 出现选中的属性列 和 聚集函数

--使用 HAVING 语句 对GROUP BY 语句的最终结果进行筛选
只有满足 HAVING 语句的 组才会被输出
--HAVING 与 WHERE 的区别在于 HAVING 作用于组
WHERE 作用于基本表或者视图

##  连接查询
表名1.属性名   比较运算符 表名2.属性名 
比较运算符 > < !>……
也可以用BETWEEN AND ……

### 1)广义笛卡尔积
SELECT STUDENT.*,SC.*
FREOM STUDENT ,SC  (很少使用)

### 2)等值与非等值连接查询
等值连接 
自然连接 
非等值连接

#### 等值连接
等值 其实就是运算符号为 = 的连接
注意 俩表的属性列 域要相同 如果他们的属性名相同那就要带上前缀
如果属性名不相同 那可以省略

#### 自然连接 
是等值连接的一种特殊情况 就是在SELECT 的时候人为的把相同属性列留下唯一项(就是只留下一个)

#### 非等值连接 
 - 就是除等值连接以外的连接

#### 自身连接 
就是一个表和自己连接 (一个学科的先修课程)
首先要给 表起 别名好区分
因为所有属性名都是相同的所以在SELECT 的时候要带前缀

### 外连接 
用外连接    表名1 LEFT OUTER JOIN 表名2 ON ()

**  外连接 和  普通连接的区别 
普通连接 只会 输出满足 连接条件的元组
外连接 会输出指定的列表 为连接主图  不满足连接条件的元组也会输出  

** 外连接的特点
- 外连接中 有一行万能的虚行 
- 该虚行 能够和所有主连接表中不满足连接条件的元组连接
- 该虚行所有值均为空值
- 所以和主表不满足连接条件的元组链接后 那些主表中没有的属性列都会为控制
- 右外连接 右边的表为主连接表  左边则 左边的表为主连接表

** 格式
LEFT OUTER JOIN ON
LEFT JOIN ON
RIGHT OUTER JOIN ON
RIGHT JOIN ON 

###  复合条件连接
WHERE 中 包含多个连接条件  
用 AND 或者 OR

###  多表连接
使用多个表连接 但是这种方法我认为应该少用 
通过创建视图的方式查询更为高效

## 嵌套查询
- 带有IN 的子查询
- 带有比较运算符 的子查询
- 带有ANY 或者ALL 谓词的子查询
- 带有EXISTS 谓词的子查询

概述 
一般 称 一个 SELECT —FROM —WHERE 称为一个查询块
将一个查询块嵌套在另外一个查询块的 WHERE 或者 HAVING 语句中 称为 嵌套查询

约束
子查询不能够 使用 ORDER BY (提高效率)

分类 :不相关子查询     子查询的查询条件不依赖于父查询 
            相关子查询            子查询的查询条件 依赖于 父查询
        
###  不相关子查询
由内向外进行处理  先完成子查询 为父查询 提供查询的条件

### 相关子查询 
首先取外层查询中标的 第一个 元组 将该元组 数值处理内层查询 若 满足 WHERE 条件 则取该元组 如此循环 直到外查询元组全部检查完为止

### 使用子查询的规则
- 1 子查询必须放在圆括号内
- 2 整个查询块  必须只能够有一个 ORDER BY 且ORDER BY 
    必须放在最后 子查询最好放在 运算符的右侧 便于阅读
    用 TOP-n必须要使用ORDER BY
- 3 子查询可以使用俩种比较条件 单行运算符 和 多行运算符

## 集合查询
标准SQL 直接支持的集合操作类型
 UNION    并操作
一般商用数据库支持的集合操作种类
UNION          并操作
INTERSECT 交操作
EXCEPT          差操作

<查询块>
 UNION 
<查询块>

这俩个查询结果的 属性列数量和值域必须都相同

## 杂碎知识点

### 目标列表达式
-(1) 表名 . *
-(2) 表名. 属性目标列名表达式
属性目标列表达式 可以用 聚集函数 属性列 和任意运算符来组成

### 聚集函数
格式  聚集函数名(DISTINCT/ALL *)

##  3.7 数据操纵

### 插入数据
俩种插入方式 *插入单个元组*
                        *插入子查询结果*
- 插入单个元组 格式
    INSERT 
    INTO 表名(属性列1……)
    VALUES (常量1……)
-  INTO 子句
    指定要插入数据的表名以及属性列
    属性列的顺序可以和表名不同
    -  没有指定属性列 :默认传入的元组包含所有数据
        且顺序按照定义表时的数据
    - 指定属性列: 顺序可以和建表时不同 未指定的列取值为空值
- VALUES 子句 
    提供的值必须与INTO子句匹配 
    - 值的个数 
    - 值的类型
### 插入子查询结果
    语句格式
    INSERT 
    INTO 表名 ()
    (子查询);
    子查询结果必须和INTO子句匹配 值的个数和类型
##  修改数据
* 语句格式
    update 表名 set 列名 =表达式 
    where 条件表达式;
* 修改数据的三种修改方式
    * 修改某一个元组的值  用where查询
    * 修改多个元组的值 Sage=Sage-1 
    * 带子查询的修改语句
SET 子句 
    指定修改方式
      要修改的列 + 修改后取值
WHERE 子句 
    指定要修改的元组
    缺省表示要修改所有元组
    可以用子查询

## 删除数据
DELETE 
FROM 表名 
WHERE  条件  

WHERE  指定要删除的元组    
                缺省表示要修改表中的所有元组

-  三种删除方式
        -  删除某一个元组的值
        -  删除多个元组的值
        -  带子查询的删除语句

更新数据与数据一致性
- DBMS在执行插入 删除 更新等操作时要保证数据库一致性 
        -  必须要有事物概念和原子性
        -  必须要进行完整性检查和保证

## 视图
    - 定义视图
    - 查询视图
    - 更新视图
    - 视图的作用

### 定义视图 
    - CREATE VIEW 
    - 视图名
    - 列名属性名
    - AS
    - 子查询
    - [WITH CHECK OPTION];

    组成视图的属性列名 
    全部省略 或者 全部指定
    - 省略 
        - 以SELECT 语句中的属性名作为视图属性名
    - 全部指定的情况
        - 1 SELECT 后跟 *
        - 2 多表查询有同名属性列
        - 3 有聚集函数或者运算式
        - 4 需启用更适合的更贴切的名字

### 行列子集视图
    从基本表中的视图 一般是删去了某些行某些列  但是会保留码

### WITH CHECK OPTION 的作用
    就是在对视图进行操作的时候 是仅仅对挑选出来的视图进行操作
    在对 视图操作的时候 更新删除等等语句都会自动 添加 创建视图时候的where 条件

### 删除视图
    DROP VIEW 视图名
         - 该语句从数据字典中删除指定的视图定义
         - 由该表导出的其他视图虽然存在但已经无意义 必须显示删除
         - 该表删除之前必须把由该表导出的视图显示删除
         (ps显示删除就是 DROP VIEW 视图名)


###  查询视图
    从用户角度 查询视图和查询表相同
    查询视图的两种方法
        method 1
                ** 视图消解法 **
        step1 首先进行有效性检查 检查视图或者表是否存在
        step2 如果存在 则从数据字典中抽取视图的定义
        把视图定义的子查询和用户的查询结合起来 转化成对应等价
        的对基本表的查询
        执行修正后的查询        
        method 2
                ** 实体化视图 **
        step1 首先进行有效性检查 检查视图是否存在
        step2 如果存在就将视图实体化 执行视图查询语句 将查询                
        建成一个实体临时表
        step3 将对视图的查询 转化为对临时标的查询
        查询结束 临时表被释放

### 更新视图
    DBMS 实现更新视图的方法 (视图消解法和 实体化视图法)
    ** 带有 WITH CHECK OPTION 语句
    DBMS会对更新语句进行检查 不允许更新视图范围之外的数据
    
    ***更新视图是有限制的
    有些视图 他不能够更新 因为对他的更新 不能够转化成对唯一具基本表的语句

### 实际系统对视图更新 的限制
    - 允许对行列子集视图进行更新
    - 对其他不同的更新有不同的限制

### 视图的作用 
        1可以使查询表达更加清晰
        2让用户从多种角度看待同一数据
        3为机密数据提供安全性保护
        4为重构数据库提供一定的逻辑独立性
        5简化用户的操作
 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值