一、SQL 的功能
SQL 功能
操作语句
备注
数据定义
CREATE,ALTER,DROP
数据查询
SELECT
数据查询与数据修改又合并称为数据操纵
数据修改
INSERT,UPDATE,DELETE
数据控制
GRANT,REVOKE,……
二、考试重点
【Access】win 10 / win 11:Access 下载、安装、使用教程(「管理信息系统」实践专用软件)https://gusanshang.blog.csdn.net/article/details/130353056**【本科自考】**
自考院校:[508] 610 华南师范大学(面向社会)
自考专业:[080901] 计算机科学与技术
自考科目:[02383] 管理信息系统
自考方式:上机实践考核
自考工具:Access
① Excel 数据导入
② 创建表 create table
③ 单表查询 select from where group by having order by
- 集合函数
④ 多表查询
- 笛卡儿积
- 条件链接\内连接
- 左外连接、右外连接、全外连接(没有)
- 嵌套查询
⑤ 数据的增删改 update、delete、insert
三、关系的定义
(1)新建关系
新建关系:即新建数据库中的表,命令格式如下
create table 关系名 ( 属性名 域 [default 缺省值] [not null ] { , 属性名 域 [default 缺省值] [not null ] } [ , primary key (属性名 {, 属性名}) ] { , foreign key (属性名 {, 属性名}) references 被参照关系名 (属性名 {, 属性名}) } [ , check (条件) ] )
示例 1:
create table S ( SNAME PERSON-NAME not null , AGE SMALLINT default 22, SEX VARCHAR (1), primary key (SNAME ), check ( AGE<200 and AGE>0 ) )
示例 2:
create table R ( SName VARCHAR(4), CName VARCHAR(4), RESULT INT, primary key (SName, CName), foreign key (SName) references S (SName), check ( (RESULT IS NULL) OR (RESULT BETWEEN 0 AND 100) ) )
(2)删除关系
删除关系:即删除数据库中的表 ,命令格式如下
drop table 关系名
【注意 Warning! 】
删除关系的定义后,关系的结构和内容、相关索引、以及由它导出的视图都被删除。
示例:
drop table SC
四、SQL 的「数据查询」功能
- **基本结构 **
- **聚集函数 **
- **集合运算 **
- 连接关系
(1)基本结构
① Select 语句的基本结构
语义次序:
From (取出R1表中的记录) → Where (选择符合条件的行) → Select (选择显示的列)
② Select 子句
作用:从 (From 子句列出的) 关系中选出指定属性
要点:属性列表中,可以用表达式来构造的新属性
- 相当于广义投影运算
示例:
- S: 学生关系
- 问:所有学生的姓名和年龄?
Select 姓名, 年龄 From S
- 问: 每个学生的出生年份
Select 姓名, 2020 - 年龄 From S
用表达式构造的新属性无属性名,但可采用以下方式命名表达式 as 属性名原有属性也可用如下方式重新命名旧属性名 as 新属性名
示例:Select 姓名 as 学生姓名, 2020 - 年龄 as 出生年份 From S
要点:Select 后面,属性列表前,可加上关键字 all 或者distinct
- all 关键字表明结果中不消去重复元组
- distinct 关键字表明结果中消去重复元组
- 没说明 all 或 distinct 的情况下,默认是 all ,即不消去重复行
示例:
Select all 课程 From R
Select distinct 课程 From R
③ Where 子句
作用:选出满足条件的行
- 等价于选择运算
【Where 子句】条件中的运算符号运算符号格式示例备注****比较运算符①<
②<=
③>
④>=
⑤<>逻辑运算符① and
② or
③ not范围运算① between 下界 and 上界
② not between 下界 and 上界① 年龄 between 20 and 23
② 年龄 between 23 and 20(下界<上界)集合运算① in 集合
② not in 集合① 姓名 in { '小陈’ , '小李’ }
② 姓名 not in { '小陈’ , '小李’ }匹配运算① like 匹配串
② **not like *匹配串① 姓名 like '陈’
② 姓名 like '陈??’① 'wh*' 将找到 what、white 和 why,但找不到 awhile 或watch
② ? 匹配任意单个字母字符
③ %代表任意多个字符
** 示例:**
- S :学生关系
- 问:所有男学生的信息?
Select * From S Where 性别='男'
- 问:所有大于 22 岁的男学生的信息?
Select * From S Where 性别='男' and 年龄>22
④ 空值的处理
空值判定
A is [not ] null
判断指定 A(属性,表达式等)的值是否为空值
示例:
- 找出年龄值未知的员工姓名
- 正确语法
Select 姓名 From employee Where 年龄 is null
- 错误语法
Select 姓名 From employee Where 年龄= null
(2)聚集函数
① Select 子句
- sum(字段):对字段的所有值求和,忽略空值
- avg(字段):对字段的所有值求平均值,忽略空值
- count(*) :统计记录的总数 count(字段):统计字段值的总数,忽略空值
- max(字段):对字段的所有值求最大值,忽略空值
- min(字段):对字段的所有值求最小值,忽略空值
② Group By 子句
Group By 子句的作用:在 Where 子句筛选出元组后,对它们分组
- 分组属性: 属性1,属性2,……
同时 Select 子句的作用发生变化:对分组进行统计
**1. **每个分组在结果中被统计为一个元组
**2. **在 Select 子句出现的属性只能是:
① 分组属性
② 聚集函数(任意属性)
③ 由①和②组成的表达式
示例:
- 关系 R: 选修成绩
- 问: 每门课程的平均和最高成绩?
Select 课程, Avg(成绩) as 平均成绩, Max(成绩) as 最高成绩 From R Group By 课程
③ Having 子句
出现在 Group By 子句后面:
- Having 子句只能配合 Group By 子句使用,而不能单独出现
Having 子句作用:在分组后,筛选满足条件 Q 的分组
在分组限定条件中出现的属性只能是以下形式:
① 分组属性
② 聚集函数(任意属性)
Having 子句中的条件和 Where 子句中条件的不同:
1. Where 子句中的条件用于限定元组,施加在单个元组上
- 不满足条件的元组将不会参与到下一步的分组运算 (Group By 子句) 或投影运算 (Select 子句) 等
**2. **Having 子句中的条件用于限定 Group By 子句产生的各个分组,施加在整个分组上
- 不满足条件的分组,将不会参与下一步的统计运算 (Select 子句)
示例:
- 关系 R: 选修成绩
- 问: 平均成绩大于85的学生姓名?
Select 姓名 From R Group By 姓名 Having Avg(成绩) > 85
- 问: 成绩大于 85 的学生姓名? (对比以上问题)
Select distinct 姓名 From R Where 成绩 > 85
④ Order By 子句
Order By 子句的作用:在 Select 子句得出结果后,对结果进行排序
- 先按属性1的值,升序(asc)或降序(desc)排列,缺省是升序;
- 属性1的值相同时,再按属性2值升序或降序排列…
示例:
R: 选修关系
问: 从高到低列出物理课程的成绩
Select 姓名, 成绩 From R Where 课程='物理' Order By 成绩 desc
⑤ 空值的处理
示例:
Select avg(年龄) as 平均已知年龄, count (年龄) as 已知年龄人数, count (*) as 总人数, min(年龄) as 最小年龄, max(年龄) as 最大年龄 From employee
(3)集合运算
① From 子句:笛卡儿积
示例:
select ∗ from s,sc
② From 子句
要点:From 子句中,关系可用如下方式重命名
旧关系名 新关系名
- 等价于更名运算
- 一个关系在 From 子句中多次出现时,从第二次开始必须重命名
- 关系重命名后,Select 和 Where 子句中的前缀是使用新的关系名
示例:
- 关系 R: 选修成绩
- 问: 谁的物理成绩高于王红的物理成绩?
Select S.姓名 From R, R as S Where R.课程='物理' and R.姓名='王红' and S.课程='物理' and R.成绩 < S.成绩
(4)连接关系
连接类型:
- inner join : 内连接,结果不包含失配元组 * (备注:* 这里失配元组指的是因不满足连接条件,无法和其它元组相连接的元组)
- outer join : 外连接,结果包含失配元组 * (备注:* 这里失配元组指的是因不满足连接条件,无法和其它元组相连接的元组)
- left outer join : 左外连接,结果包含左边关系的失配元组
- right outer join : 右外连接,结果包含右边关系的失配元组
- full outer join : 全外连接,结果包含两边关系的失配元组
① 条件连接 / 内连接
示例:
select ∗ from s,sc where s.sno=sc.sno
select ∗ from s inner join sc on s.sno=sc.sno
② 外连接
示例:
select ∗ from s right outer join sc on s.sno=sc.sno
select ∗ from sc left outer join s on s.sno=sc.sno
③ 左外连接
示例:
Select Emp.姓名, Dept.名称 as 部门 From Emp left outer join Dept on Emp.部门号=Dept.部门号
④ 右外连接
示例:
Select Emp.姓名, Dept.名称 as 部门 From Emp right outer join Dept on Emp.部门号=Dept.部门号
⑤ 左 / 右外连接
示例:
select ∗ from s left outer join sc on s.sno=sc.sno
select ∗ from sc right outer join s on s.sno=sc.sno
⑥ 全外连接
示例:
Select Emp.姓名, Dept.名称 as 部门 From Emp full outer join Dept on Emp.部门号=Dept.部门号
五、SQL 的「数据修改」功能
- **插入:Insert 语句 **
- **删除:Delete 语句 **
- **更新:Update 语句 **
(1)插入:Insert 语句
① 格式一
注意:
- 所列值的个数必须和属性的个数相等,且一一对应
- 在插入的新元组中,对没有指定的属性填入缺省值(Create Table时定义),没有缺省值时填入空值
示例:
Insert Into R Values (‘刘朝', '物理', 80)
示例:
- 新建表 S
Create Table Student ( 学号 VARCHAR (4), 姓名 VARCHAR(10) not null, 年龄 SMALLINT default 22, 班级 VARCHAR(20) )
- 在 S 中插入元组
Insert Into Student (学号, 姓名) Values (1, '小刘')
② 格式二
注意:
同样地,对其它的属性填入缺省值或空值
** 示例:**
- 添加所有学生选修数学课程的信息
Insert Into R(姓名, 课程) Select 姓名,课程 From S, C Where 课程='数学'
(2)删除:Delete 语句
说明:
- 在关系中找到满足条件的元组,并删除之
- 如果没有 Where 子句,表示删除关系的全部元组 (保留结构)
- 一次只能删除一个关系中的元组
示例:
- 删除全部选修信息
Delete From R
(3)更新:Update 语句
说明:
- 在关系中找到满足条件的元组,然后更新:表达式1的值赋予属性1;表达式2的值赋予属性2……
- 没有 Where 子句时,则对关系的全部元组都要更新
示例:
- 给销售部门的职工增加10%的工资
Update employ Set 工资=工资*1.1 Where 部门='销售'
六、汇总
具体 SQL 实战操作查看我的另一博文:
【Access】实战:Access 操作 SQL 「学生」
① 创建表格
CREATE TABLE table_name
( column1 datatype, column2 datatype, column3 datatype, ..... );
② 插入数据
INSERT INTO table_name
(column1, column2, column3, ....)
VALUES (value1, value2, value3, ....);
③ 查询数据
SELECT column1, column2, ...
FROM table_name
WHERE condition;
④ 更新数据
UPDATE table_name
SET column1 = value1, column2 = value2, ....
WHERE condition;
⑤ 删除数据
DELETE FROM table_name
WHERE condition;
⑥ 连接数据
SELECT *
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
⑦ 排序数据
SELECT column1, column2, ...
FROM table_name
ORDER BY column1
ASC/DESC, column2
ASC/DESC, ...;
⑧ 分组数据
SELECT column1, SUM(column2)
FROM table_name
GROUP BY column1;
⑨ 创建索引
CREATE INDEX index_name ON table_name
(column1, column2, ...);
⑩ 删除索引
DROP INDEX index_name ON table_name;
版权归原作者 顾三殇 所有, 如有侵权,请联系我们删除。