数据库系统原理第四章

第四章 SQL与关系数据库基本操作

**大家想一起学习交流的可以加群,WX:MrCroods。**

数据库系统原理第四章_第1张图片

第一节 SQL概述

一、SQL的发展

(1)、结构化查询语言(SQL)是一种数据库查询和程序设计语言,主要用于存取数据以及查询、更新和管理关系数据库系统。

二、SQL的特点

(1)、SQL不是某个特定数据库供应商专有的语言。
(2)、SQL简单易学。
(3)、SQL可灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
(4)、SQL语句不区分大小写。

三、SQL的组成

(1)、数据定义语言(DDL)

1、数据定义语言包括:(填空题

CREATE:用于创建数据库或数据库对象。
ALTER:用于对数据库或数据库对象进行修改。
DROP:用于删除数据库或数据库对象。

2、数据定义语言主要用于对数据库及数据库中的各种对象进行创建、删除、修改等操作。

(2)、数据操作语言(DML)

1、数据操作语言包括:(填空题

SELECT:从表或视图检索数据。
INSERT :将数据插入到表或视图中。
UPDATE:修改表或视图中的数据。
DELETE:从表中或视图中删除数据。
2、数据操作语言主要用于操作数据库中各种对象,特别是检索和修改数据。

(3)、数据控制语言(DCL)

1、数据控制语言包括:(填空题

GRANT:用于授予权限。
REVOKE:用于收回权限。
2、数据控制语言主要用于安全管理。

(4)、嵌入式和动态SQL规则,SQL调用和会话规则。

第二节 MySQL知识

MySQL是一个关系数据库管理系统,具有C/S体系结构

MySQL的特点:
体积小,速度快、开发源代码、遵循GPL

在MySQL中一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一个表可以有若干索引,存储文件的逻辑结构组成了MySQL的内模式。

一、MySQL使用基础

(1)、两种架构方式:LAMP、WAMP

二、MySQL中的SQL

(1)、常量、变量、运算符、表达式、函数、流程控制语句和注解等。
(2)、常量分以下几类:(选择题、填空题

常量:在程序运行过程中值不变的量。
字符串常量:用单引号或双引号括起来的字符序列。
一个十六进制值通常指定为一个字符串常量,每对十六进制数字被转换为一个字符,其最前面有一个大写字母“X”或小写字母“x”。

字符串常量、数值常量、十六进制常量、时间日期常量、位字段值、布尔值、NULL值

(3)、变量:用于临时存储数据,分为用户变量和系统变量。(简答题)
用户变量前常添加一个符号@,用于将其与列名区分开。
大多数系统变量,必须在系统变量名称前添加两个@符号。

(4)、运算符:(简答题)

算术运算符:+、-、*、/、%
位运算符:&、|、∧、~、>>、<<
比较运算符:=、>、<、>=、<=、<>、!=、<=>
逻辑运算符:NOT或!、AND或&&、OR或||、XOR

(5)、表达式:常量、变量、列名、复杂运算、运算符和函数的组合。

字符型表达式
数值型表达式
日期表达式

(6)、内置函数:(填空题)

数学函数(SORT()函数)、聚合函数、字符串函数(ASCII()函数,CHAR()函数)、日期和时间函数、加密函数(ENCODE()函数)、控制流程函数、格式化函数(FORMAT()函数)、类型转换函数(CAST()函数)、系统信息函数(USER()、VERSION())

第三节 数据定义

SQL的数据定义功能包括数据库模式定义、表定义、索引定义、视图定义。

一、数据库模式定义

数据库模式定义:创建、选择、修改、删除、查看

(1)、创建数据库
CREATE {DATABASE|SCHEMA}[IF NOT EXISTS] 数据库名
[DEFAULT] CHARACTER SET [=] 数据库字符集
[DEFAULT] COLLATE [=] 字符集的校对规则

(2)、选择数据库
USE 数据库名

(3)、修改数据库
ALTER {DATABASE|SCHEMA} 数据库名
[DEFAULT] CHARACTER SET [=] 数据库字符集
[DEFAULT] COLLATE [=] 字符集的校对规则

(4)、删除数据库
DROP {DATABASE|SCHEMA}[IF NOT EXISTS] 数据库名

(5)、查看数据库
SHOW { DATABASES | SCHEMAS }
[LIKE ‘数据库名’ | WHERE 条件]

二、表定义

(1)、创建表
CREATE [TEMPORARY] TABLE 表名

TEMPORARY          临时表
AUTO_INCREMENT     该列为自增列  只能有一个
DEFAULT            默认值
NULL               空值
PRIMARY KEY        主键         必须唯一

(2)、更新表
ALTER TABLE 表名

语句 作用
ADD COLUMN 向表中增加新列,且可同时增加多个列
CHANGE COLUMN 修改表中列的名称或数据类型,且同时修改多个列
ALTER COLUMN 修改或删除表中指定列的默认值
MODIFY COLUMN 修改指定列的数据类型,不能修改列名
DROP COLUMN 删除表中某列
RENAME TO 为表重新赋予一个表名

(3)、重命名表、删除表、查看表

1、RENAME TABLE 原表名 TO 新表名
2、DROP [TEMPORARY] TABLE [IF NOT EXISTS] 表名
3、SHOW TABLES [LIKE ‘表名’ | WHERE 条件]
4、[DESCRIBE|DESC] 表名

三、索引定义

索引是指DBMS根据表中的一列若干列按照一定顺序建立的列值与记录行之间的对应关系表。
(1)、索引在逻辑通常分三类:
普通索引(INDEX)、唯一性索引(UNIQUE)、主键(PRIMARY KEY)

(2)、索引的创建

1、CREATE [UNIQUE] INDEX 索引名 ON 表名(索引列的描述)

例:
CREATE INDEX index_customers
ON mysql_test.customers(cust_name(3) ASC|DESC)

该语句不能创建主键

2、CREATE TABLE

语句 作用
PRIMARY KEY 用于表示在创建新表的同时创建该表的主键
{INDEX或KEY} 用于表示在创建新表的同时创建该表索引
[CONSTRAINT] UNIQUE 用于表示在创建新表的同时创建该表的唯一性索引
[CONSTRAINT] FOREIGN KEY 用于表示在创建新表的同时创建该表的外键

3、ALTER TABLE

语句 作用
ADD [CONSTRAINT] PRIMARY KEY 用于表示在修改表的同时创建该表的主键
ADD {INDEX或KEY} 用于表示在修改表的同时为该表添加索引
ADD [CONSTRAINT] UNIQUE 用于表示在修改表的同时为该表添加唯一性索引
ADD [CONSTRAINT] FOREIGN KEY 用于表示在修改新表的同时为该表添加外键

第四节 数据更新

一、插入数据

(1)、INSERT… VALUES…语句插入单行或多行元祖数据。
(2)、INSERT… SET…语句插入部分列值数据。
(2)、INSERT… SELECT…语句插入子查询数据。

第五节 数据查询

SQL提供SELECT语句进行查询等操作,其数学理论基础是关系数据模型中对表对象的一组关系运算,即选择、投影和连接

一、SELECT语句
语句 作用
SELECT 用于指定输出的来源
FROM 用于指定输出的来源
WHERE 用于指定数据的查询目标来源
GROUP BY 用于对检索到的记录进行分组
HAVING 用于指定组的选择条件
ORDER BY 用于对查询结果进行排序

聚合函数通常是数据库系统中一类系统内置函数,常用于对一组值连接组合而成的结果。
DISTINCT或DISTINC TROW放在SELECT后面,则会消除结果集中的重复行。

二、连接查询

(1)、交叉连接,又称笛卡儿积,使用CROSS JOIN 来连接两张表。

(2)、内连接,使用INNER JOIN或JOIN…ON…,通常INNER省略。

内连接的使用情形(简答题)
1、等值连接(相等连接),等值连接条件中包含一个主键和一个外键。
2、非等值连接(不等连接),使用除运算符”=“之外的比较运算符。
3、自连接

(3)、外连接

1、左外连接(左连接,左边表为基表,右边表为参照表),LEFT OUTER JOIN或LEFT JOIN
2、右外连接(右连接,右边表为基表,左边表为参照表),RIGHT OUTER JOIN或RIGHT JOIN

三、条件查询

(1)、BETWEEN…AND…
查询两个值之间所有的值。

(2)、IN()
查询括号里面所有满足条件的值。

(3)、子查询
表子查询,结果集是一个表
行子查询,结果集是带有一个或多个值的一行数据。
列子查询,结果集是一列数据,可以有多行,但是每行只有一个值。
标量子查询,结果集仅仅是一个值。

(4)、结合关键字“IN”使用的子查询
使用该子查询主要用于判定一个给定值是否存在于在子查询的结果集中,其语法是:

expression IN (subquery),这里通常只能返回一列数据。

(5)、结合比较运算符使用的子查询
关键字:“ALL”,“SOME”,“ANY”

(6)、结合关键字“EXIST”使用的子查询
使用该子查询主要用于判定子查询的结果集是否为空。其语法是:

EXIST (subquery)

四、GROUP BY 查询

GROUP BY 列名 [ASC|DESC]…[WITH ROLLUP]
注:WITH ROLLUP各分组的汇总行

五、HAVING查询

HAVING 过滤条件

HAVING与WHERE的差异
1)、WHERE子句主要用于过滤数据行,而HAVING子句主要用于过滤分组。
2)、HAVING子句中的条件可以包含聚合函数,而WHERE子句中则不可以。
3)、WHERE子句会在数据分组前进行过滤,HAVING子句则会在数据分组后进行过滤。

六、ORDER BY查询
ORDER BY GROUP BY
排序产生的输出 分组行,但输出可能不是分组的排序
任意列都可以使用 只可能使用选择列或表达式列
不一定需要 若与聚合函数一起使用列或表达式,则必须使用
七、LIMIT(MySQL中结果集中第一行的偏移量为0)

(1)、offset,从第几行取数据,row_count,指定返回数据的行数。
(2)、取从第5位客户开始的3位客户的ID号和姓名信息。

LIMIT offset,row_count
第一种:LIMIT 4,3

LIMIT row_count OFFSET offset
第二种:LIMIT 3 OFFSET 4

第六节 视图

外模式对应到数据库中的概念就是视图

视图是数据库中的一个对象,它是数据库管理系统提供给用户的以多种角度观察数据库中数据的一种重要机制。
视图是从一个或多个表或其他视图通过查询语句导出的表,包含一系列数据列和若干数据行。

(1)、视图与基本表的区别:(简答题)

1)、视图不是数据库中的真实表,而是一张虚拟表,其结构和数据是建立在对数据库中真实表的查询基础上。
2)、视图的内容是由存储在数据库中进行查询操作的SQL语句来定义的,它的列数据与行函数
均来自于定义视图的查询所引用的真实表,数据是引用视图生成的。
3)、视图不是以数据集的形式存储在数据库中,它所对应的数据实际上是存储在视图所引用的真实表中。
4)、视图是用来查看存储在别处的数据的一种虚拟表,而其自身并不存储数据。

(2)、使用视图的优点有:

集中分散数据、简化查询语句、重用SQL语句、保护数据安全、共享所需数据、更改数据格式

(3)、创建视图
CREATE VIEW 视图名
AS
SELECT语句

CASCADED 它会对所有视图进行检查
LOCAL 使CHECK OPTION 只对定义的视图进行检查。

(4)、更新视图表
视图中的行和基本表中的行之间具有一对一的关系

1、视图用于查询检索,主要体现在以下应用中:
利用视图简化复杂的表连接
使用视图重新格式化检索出的数据
使用视图过滤不想要的数据。

你可能感兴趣的:(数据库系统原理)