【Access】Access:SQL 语句汇总
作者:mmseoamin日期:2023-12-05

目录

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

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

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. 先按属性1的值,升序(asc)或降序(desc)排列,缺省是升序;
  2. 属性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;