第三章 关系数据库标准语言SQL

一、概述

特点

**1)综合统一:**数据定义语言(DDL)、操作语言(DML)、控制语言(DCL)功能于一体。

2)高度非过程化:只需提出做什么,无需了解存储路径。

3)SQL采用集合操作方式

**4)提供多种实现方式:**独立语言(可独立用于联机交互)、嵌入式语言(嵌入到高级语言)

5)支持三级模式:视图(外模式)、基本表(模式)、存储文件(内模式)

二、数据定义

模式的定义与删除

定义

删除

sql 复制代码
drop schema <模式名> <cascade|restrict>

cascade(级联):删除模式的同时把里面所有的数据对象都给删除

restrict(限制):若模式内有内容,则拒绝执行。

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

定义表:

sql 复制代码
create table <表名>(
属性名1 数据类型 列完整性约束,
属性名2 数据类型 列完整性约束,
属性名3 数据类型 列完整性约束,
表完整性约束);

定义表所属模式:

修改表

sql 复制代码
alter table <表名>
  add 新列名 类型 约束 | alter 列名 类型 | drop 完整性约束名

删除表

sql 复制代码
drop table 表名 [cascade|restrict]

cascade:删除表没限制,与之相关的视图、索引、触发器啥的都一起删除。

restrict:有关联无法删除。

索引的建立与删除

相关内容:DBMS一般自动建立主键和非空的索引,DBMS自动维护索引、DBMS自动选择是否使用哪些索引。

是内部实现技术(属于内模式范畴

建立索引

sql 复制代码
create [unique][cluster] index 索引名 on 表名(属性<顺序:desc|asc>...);

一个表只能有一个聚簇索引,建立在经常查询的列上。

删除索引

sql 复制代码
drop index 索引名

数据查询

1、单表查询

sql 复制代码
select distinct sname from student

distinct去掉重复的行。

查询条件

1、比较大小

2、确定范围:between and not between and

3、确定集合:in (集合) not in

4、字符匹配:like not like _:单个字符 %:任意字符

5、涉及空值的查询:is null is not null (is不能用=代替)

6、多重条件查询:and or

7、排序关键词: order by 属性 asc | desc

8、聚集函数:count、sun、avg、max、min

9、group by子句 Having 条件

having短语作用于组,从中选择满足条件的组,而where是选择满足条件的列。

2、连接查询

等值查询

自身连接:

一个表与自己连接(需要给表起别名)

外连接:

将主体表中不满足连接条件的元组也一并输出。

sql 复制代码
select student.sno
from student left out join sc on student.sno=sc.sno;

左外连接、右外连接、全外连接

**复合条件连接:**where有多个条件

3、嵌套查询

子查询:不能用order by语句

不相关子查询:子查询的查询条件不依赖于父查询。

相关子查询:依赖父查询。

**带有比较运算符的子查询:**子查询一定要在运算符之后

带有ANY或ALL谓词的子查询:

**带有exists谓词的子查询:**exists谓词的子查询不返回任何数据,只产生逻辑真值(true)和假值(false),子查询的目标列通常都用*

用exists或not exists实现全称量词(难点)

4、集合查询

union:并操作

intersect:交操作

except:差操作

查询结果的列数和对应的数据类型必须相同。

union:将多个查询结果合起来后自动去除重复元组

union all:保留重复元组。

数据更新

1、插入数据

普通插入元组:

sql 复制代码
insert into 表名(列名1,列名2...)
values (值1,值2,...)

子查询插入数据

sql 复制代码
insert into 表名(列名1,列名2...)
子查询;

2、修改数据

sql 复制代码
update 表名
set 列名1=新值1,列名2=新值2...
where 条件表达式

3、删除数据

删除指定表中满足where子句条件的元组。

sql 复制代码
delete from 表名
where 条件表达式

视图

虚表:从基本表中导出的表,基表的数据发生变化,视图查询的数据也会改变

视图的操作

1、创建视图
sql 复制代码
create view 视图名 (列名1,列名2...)
as 子查询
[with check option]

子查询不允许有order by或distinct短语

执行create view时并不执行select语句,只是将视图的定义存入数据字典,查询视图时也是查询基本表中的数据。

with check option的作用:在修改、删除、插入操作时自动加上where中的条件。

基于视图的视图、带表达式的视图、分组视图(group by)、

不指定属性列:

2、删除视图
sql 复制代码
drop view 视图名 [cascade | restrict]

cascade:将该视图和由他导出的所有视图一起删除。

restrict:有对视图的依赖,则不允许删除。

3、更新视图

允许对行列子集视图进行更新。

但一些视图是不可更新的,因为这些视图不能唯一地有意义地转为对相应基本表的更新。

4、视图的作用

简化用户操作、提供了一定的逻辑独立性、提供安全保护、更清晰的表达查询。

相关推荐
.Shu.1 小时前
Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【五、InnoDB 高阶机制与实战调优】
数据库·mysql
新法国菜3 小时前
MySql知识梳理之DDL语句
数据库·mysql
DarkAthena3 小时前
【GaussDB】全密态等值查询功能测试及全密态技术介绍
数据库·gaussdb
ShawnLeiLei4 小时前
2.3 Flink的核心概念解析
数据库·python·flink
石皮幼鸟5 小时前
数据完整性在所有场景下都很重要吗?
数据库·后端
nightunderblackcat6 小时前
新手向:异步编程入门asyncio最佳实践
前端·数据库·python
DarkAthena6 小时前
【GaussDB】使用MySQL客户端连接到GaussDB的M-Compatibility数据库
数据库·mysql·gaussdb
livemetee7 小时前
Flink2.0学习笔记:使用HikariCP 自定义sink实现数据库连接池化
大数据·数据库·笔记·学习·flink
XXD啊7 小时前
Redis 从入门到实践:Python操作指南与核心概念解析
数据库·redis·python
好望角雾眠10 小时前
第三阶段数据库-7:sql中函数,运算符,常用关键字
数据库·笔记·sql·学习·sqlserver·c#