- SQL语言概述
SQL(structured query language)语言全称是结构化查询语言
它是一种在关系型数据库中定义和操纵数据的标准语言
SQL语言的特点
- 一体化
- 高度非过程化
- 面向集合的操作方式
- 提供多种方式使用
- 语言简洁
SQL语言的功能
- 数据定义
- 数据查询
- 数据操作
- 数据控制
- SQL支持的数据类型
数据类型
- 数值型
- 日期时间型
- 字符串型
- 其他类型
- 数据定义功能
数据库
数据库创建
Create database <数据库名>
数据库修改
Alter database <数据库名>
数据库删除
Drop database <数据库名>
表
表的创建
Create table <表名>
所有列名省略,须与定义或存储的列名顺序一致
列名未省略,须与语句中列名顺序一致
表级完整性约束
NOT NULL:限制列取值非空。
PRIMARY KEY:指定本列为主键。
FOREIGN KEY:定义本列为引用其他表的外键。
UNIQUE:限制列取值不能重复。
DEFAULT:指定列的默认值。
CHECK:限制列的取值范围。
NOT NULL和DEFAULT只能是列级完整性约束;
NOT NULL
例:sname char(10) NOT NULL
PRIMARY KEY
例1:SNO char(7) PRIMARY KEY
例2:PRIMARY KEY(SNO)
PRIMARY KEY(SNO,CNO)
FOREIGN KEY
例:定义SC表的Sno外键。
FOREIGN KEY(Sno)
REFERENCES Student(Sno)
UNIQUE
- 限制一个列或者是多个列的组合取值不重复
- 用在事实上具有唯一性的属性列上,比如身份证号码、驾驶证号码等。
- 有UNIQUE约束的列允许有一个空值;
- 在一个表中可以定义多个UNIQUE约束;
- 可以在一个列或多个列上定义UNIQUE约束
DEFAULT
为已创建好的表添加DEFAULT约束
作用:提供列的默认值。
CHECK
用于限制列的取值在指定范围内,即约束列的取值符合应用语义。
人的性别:“男”或“女”
如果CHECK约束是定义多列之间的取值约束,则只能在“表级完整性约束定义”处定义。
例1:CHECK( MaxSalary >= MinSalary )
例2:Sex nchar(1) CHECK( Sex = '男' OR Sex = '女'),
表的修改
Alter table <表名>
表的删除
Drop table <表名>
- 数据查询功能
单表查询
Select 用于指定输出的字段
From 用于指定数据的来源
Where 用于指定数据的行选择条件
Group by 用于对检索到的记录进行分组
Having 勇于指定对分组后结果的选择条件
Order by 用于对查询的结果进行排序
Having子句 必须位于 Group by子句 之后
DESC 降序 ASC 升序
Where 查询条件
比较
= > >= <= < <> !=
确定范围
Between and
Not between and
确定集合
In
Not in
字符匹配
Like
Not like
_ :匹配任意一个字符
% :匹配0到多个字符
[ ] :匹配[ ]中的任意一个字符 如 [abdg] [b-e]
[^ ] : 不匹配[ ]中的任意一个字符 如 [^abdg] [^b-e]
空值
判断空值:
列名 is [not] null
多重条件
AND 与OR
OR 优先级小于 AND
消除取值相同的行
DISTINCT
聚合函数
Count(*) 统计表中元组的个数
Count([distinct]<列名>) 统计本列的列值个数,去重
Sum <列名> 计算列值的和值
Avg <列名> 计算列值的平均值
Max <列名> 计算列值的最大值
Min <列名> 计算列值的最小值
除count(*),其他函数计算过程均忽略null值
多表查询
内连接
ANSI方式
From 表1 [inner] join 表2 on <连接条件>
theta方式
From 表1,表2 where <连接条件>
自连接
From 表1 as t1
Join 表1 as t2
On t1.列名=t2.列名
外连接
ANSI方式:
From 表1 left | right join 表2 on <连接条件>
Top子句
只列出结果集中的前几行结果
WITH TIES:包括并列的结果
使用WITH TIES必须使用order by对查询结果进行排序
子查询
基于集合的测试
Where <列名> [not] in (子查询)
比较查询
Where <列名> 比较运算符 (子查询)
带有Any 或all的子查询
运算符
>any
<any
>=any
<=any
=any
!=any或<>any
>all
<all
>=all
<=all
!=all或<>all
带有exists的子查询
Where [not] exists (子查询)
Exists含义:当子查询中有满足条件的数据时,返回真值,否则返回假值
查询集合运算
并Union
交Intersect
差Except
- 视图
创建视图
Create view <视图名>
As
Select语句
优点
- 简化数据查询语句
- 使用户能从多角度看待同一数据
- 提高了数据的安全性
- 提供了一定程度的逻辑独立性
- 视图数据始终与基本表数据保持一致
- 节省存储空间
- 数据更改功能
数据插入
单行插入
Insert into <表名> values
多行插入
Insert into <表名> select 语句
先建新表,后查询原表,插入数据
数据更新
无条件更新
有条件更新
基于本表的更新
基于其他表的更新
使用多表连接
使用子查询
数据删除
无条件删除
有条件删除
基于本表条件的删除
基于其他表条件的删除
使用多表连接
使用子查询