目录

一、SQL 的功能

二、考试重点

三、关系的定义

(1)新建关系

(2)删除关系

四、SQL 的「数据查询」功能

(1)基本结构

①Select 语句的基本结构

②Select 子句

③Where 子句

④空值的处理

(2)聚集函数

①Select 子句

② Group By 子句

③ Having 子句

④ Order By 子句

⑤空值的处理

(3)集合运算

① From 子句:笛卡儿积

②From 子句

(4)连接关系

① 条件连接 / 内连接

② 外连接

③左外连接

④ 右外连接

⑤ 左 / 右外连接

⑥ 全外连接

五、SQL 的「数据修改」功能

(1)插入:Insert 语句

① 格式一

②格式二

(2)删除:Delete 语句

(3)更新:Update 语句

六、汇总

① 创建表格

② 插入数据

③ 查询数据

④ 更新数据

⑤ 删除数据

⑥ 连接数据

⑦ 排序数据

⑧分组数据

⑨创建索引

⑩删除索引



一、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)新建关系

新建关系:即新建数据库中的表,命令格式如下

createtable关系名(  属性名域[default缺省值] [not null ]  { , 属性名域[default缺省值] [not null ] }    [ , primarykey(属性名 {, 属性名}) ]  { , foreignkey(属性名 {, 属性名})references被参照关系名 (属性名 {, 属性名}) }  [ , check(条件) ]  )

示例 1:

createtableS (   SNAMEPERSON-NAMEnotnull ,   AGESMALLINTdefault 22,   SEXVARCHAR (1),   primarykey(SNAME ),   check( AGE0 ) )

示例 2:

createtable R (    SNameVARCHAR(4),    CNameVARCHAR(4),   RESULT INT,   primarykey(SName, CName),   foreignkey(SName)referencesS (SName),   check( (RESULTISNULL) OR (RESULTBETWEEN0AND100) ))


(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 ,即不消去重复行

示例:

Selectall 课程From  R

Selectdistinct课程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
② ” />Select* FromS Where 性别=’男’

  • 问:所有大于 22 岁的男学生的信息” />Select* FromS Where性别=’男’ and 年龄>22


    ④空值的处理

    空值判定

    A is [not ] null

    判断指定 A(属性,表达式等)的值是否为空值

    示例:

    • 找出年龄值未知的员工姓名
    • 正确语法
    Select 姓名 From employeeWhere 年龄 isnull

    • 错误语法
    Select 姓名 From employeeWhere 年龄= 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 最高成绩 FromRGroup By课程


    ③ Having 子句

    出现在 Group By 子句后面:

    • Having 子句只能配合 Group By 子句使用,而不能单独出现

    Having 子句作用:在分组后,筛选满足条件 Q 的分组

    在分组限定条件中出现的属性只能是以下形式:

    ① 分组属性

    ② 聚集函数(任意属性)

    Having 子句中的条件和 Where 子句中条件的不同:

    1. Where 子句中的条件用于限定元组,施加在单个元组上

    • 不满足条件的元组将不会参与到下一步的分组运算 (Group By 子句) 或投影运算 (Select 子句) 等

    2. Having 子句中的条件用于限定 Group By 子句产生的各个分组,施加在整个分组上

    • 不满足条件的分组,将不会参与下一步的统计运算 (Select 子句)

    示例:

    • 关系 R: 选修成绩
    • 问: 平均成绩大于85的学生姓名” />Select姓名FromRGroup By姓名 HavingAvg(成绩) > 85

      • 问: 成绩大于 85 的学生姓名” />Select distinct姓名From RWhere成绩 > 85


    ④ Order By 子句

    Order By 子句的作用:在 Select 子句得出结果后,对结果进行排序

    1. 先按属性1的值,升序(asc)或降序(desc)排列,缺省是升序;
    2. 属性1的值相同时,再按属性2值升序或降序排列…

    示例:

    R: 选修关系

    问: 从高到低列出物理课程的成绩

    Select姓名, 成绩FromRWhere 课程='物理' Order By成绩desc


    ⑤空值的处理

    示例:

    Select avg(年龄)as平均已知年龄, count (年龄) as已知年龄人数, count (*) as总人数,  min(年龄)as最小年龄, max(年龄)as最大年龄From employee


    (3)集合运算

    ① From 子句:笛卡儿积

    示例:

    select∗froms,sc


    ②From 子句

    要点:From 子句中,关系可用如下方式重命名

    旧关系名 新关系名
    • 等价于更名运算
    • 一个关系在 From 子句中多次出现时,从第二次开始必须重命名
    • 关系重命名后,Select 和 Where 子句中的前缀是使用新的关系名

    示例:

    • 关系 R: 选修成绩
    • 问: 谁的物理成绩高于王红的物理成绩” />SelectS.姓名 FromR, RasSWhere R.课程=’物理’ and R.姓名=’王红’ and S.课程=’物理’ and R.成绩 < S.成绩


    (4)连接关系

    连接类型:

    • inner join : 内连接,结果不包含失配元组 * (备注:* 这里失配元组指的是因不满足连接条件,无法和其它元组相连接的元组)
    • outer join : 外连接,结果包含失配元组 * (备注:* 这里失配元组指的是因不满足连接条件,无法和其它元组相连接的元组)
    • left outer join : 左外连接,结果包含左边关系的失配元组
    • right outer join : 右外连接,结果包含右边关系的失配元组
    • full outer join : 全外连接,结果包含两边关系的失配元组

    ① 条件连接 / 内连接

    示例:

    select∗froms,scwhere s.sno=sc.sno
    select∗froms inner joinscons.sno=sc.sno


    ② 外连接

    示例:

    select∗froms right outer joinscons.sno=sc.sno
    select ∗from sc left outer joinson s.sno=sc.sno


    ③左外连接

    示例:

    Select Emp.姓名, Dept.名称 as 部门From Emp left outer joinDept on Emp.部门号=Dept.部门号


    ④ 右外连接

    示例:

    SelectEmp.姓名, Dept.名称 as 部门FromEmp right outer joinDept onEmp.部门号=Dept.部门号


    ⑤ 左 / 右外连接

    示例:

    select ∗from s left outer joinscon s.sno=sc.sno
    select∗fromsc right outer joinsons.sno=sc.sno


    ⑥ 全外连接

    示例:

    Select Emp.姓名, Dept.名称 as 部门From Emp full outer joinDepton Emp.部门号=Dept.部门号



    五、SQL 的「数据修改」功能

    • 插入:Insert 语句
    • 删除:Delete 语句
    • 更新:Update 语句

    (1)插入:Insert 语句

    ① 格式一

    注意:

    • 所列值的个数必须和属性的个数相等,且一一对应
    • 在插入的新元组中,对没有指定的属性填入缺省值(Create Table时定义),没有缺省值时填入空值

    示例:

    Insert Into R Values (‘刘朝', '物理', 80)

    示例:

    • 新建表 S
    CreateTableStudent ( 学号 VARCHAR (4), 姓名VARCHAR(10)notnull, 年龄SMALLINTdefault22, 班级VARCHAR(20))
    • 在 S 中插入元组
    InsertIntoStudent (学号, 姓名)Values(1, '小刘') 


    ②格式二

    注意:

    同样地,对其它的属性填入缺省值或空值

    示例:

    • 添加所有学生选修数学课程的信息
    InsertIntoR(姓名, 课程)Select姓名,课程FromS,CWhere 课程='数学'


    (2)删除:Delete 语句

    说明:

    • 在关系中找到满足条件的元组,并删除之
    • 如果没有 Where 子句,表示删除关系的全部元组 (保留结构)
    • 一次只能删除一个关系中的元组

    示例:

    • 删除全部选修信息
    DeleteFromR


    (3)更新:Update 语句

    说明:

    • 在关系中找到满足条件的元组,然后更新:表达式1的值赋予属性1;表达式2的值赋予属性2……
    • 没有 Where 子句时,则对关系的全部元组都要更新

    示例:

    • 给销售部门的职工增加10%的工资
    Updateemploy Set 工资=工资*1.1Where 部门='销售'



    六、汇总

    具体 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;
    Copyright © maxssl.com 版权所有 浙ICP备2022011180号