分享

Access中的基础SQL操作

 不觉已半夏 2020-02-01

SQL是一种结构化查询语言,集数据定义、数据查询、数据操纵、数据控制功能于一体。

定义create、drop、alter
查询select
操纵inster、update、delete
控制crant、revote

【实例一:图书管理数据库】

假设我们有一个图书管理的数据库,其中的表关系如下:

一、创建表

create table 读者(借书证号 primary key,姓名 char(4) not null,部门.......) 

二、修改表字段

1、增加表字段

alter table 读者 add 照片 

2、删除表字段

alter table 读者 drop 备注

3、删除表

drop table 读者

三、查询操作

1、查询图书总价

  1. SELECT sum(图书.单价) AS 总价
  2. FROM 图书;

2、查询每个出版社图书的总数量,以降序排序

  1. SELECT 出版社, sum(图书.库存数量)
  2. FROM 图书
  3. GROUP BY 出版社
  4. ORDER BY sum(图书.库存数量) DESC;

3、查询单价最高的2本书的信息

  1. SELECT TOP 2 *
  2. FROM 图书
  3. ORDER BY 单价 DESC;

4、查询以“计算机”开头的图书信息

  1. SELECT 书名, 作者, 出版社
  2. FROM 图书
  3. WHERE 书名 like "单*";

5、查询高于平均单价的图书信息

  1. SELECT 书名
  2. FROM 图书
  3. WHERE 单价>(select avg(单价)from 图书);

6、查询每本图书的借阅次数

  1. SELECT 图书.书名, count(借书登记.书号) AS 人数
  2. FROM 图书, 借书登记
  3. WHERE 图书.书号=借书登记.书号
  4. GROUP BY 图书.书名;

7、查询最受欢迎(借阅次数多)的2本书的书号

  1. SELECT TOP 2 书号, count(书号) AS 次数
  2. FROM 借书登记
  3. GROUP BY 书号
  4. ORDER BY count(书号) DESC;

8、查询最受欢迎的2本书的书名

  1. SELECT TOP 2 图书.书名, count(借书登记.书号) AS 次数
  2. FROM 借书登记, 图书
  3. WHERE 借书登记.书号=图书.书号
  4. GROUP BY 图书.书名
  5. ORDER BY count(借书登记.书号) DESC;

9、查询每本未还图书的借阅信息

  1. SELECT *
  2. FROM 借书登记
  3. WHERE 还书日期 is null;

10、查询计算机系读者的借阅信息

  1. SELECT 借书登记.*
  2. FROM 借书登记, 读者
  3. WHERE 借书登记.借书证号=读者.借书证号
  4. and 读者.部门="计算机";

11、如果借阅时间超过一个月还未还书,将记录中”是否超期”改为true

  1. UPDATE 借书登记 SET 是否超期 = 1
  2. WHERE 还书日期-借书日期>30;

12、查询所有借了书的读者的姓名和部门

  1. SELECT 读者.姓名, 部门
  2. FROM 读者, 借书登记
  3. WHERE 读者.借书证号=借书登记.借书证号;

13、查询图书信息,按图书入库数量降序排列

  1. SELECT *
  2. FROM 图书
  3. ORDER BY 入库数量 DESC;

14、查询图书库存数量最多的图书信息

  1. SELECT TOP 1 *
  2. FROM 图书
  3. ORDER BY 库存数量 DESC;

15、查询没有被借阅的图书信息

  1. SELECT *
  2. FROM 图书 LEFT JOIN 借书登记 ON 图书.书号=借书登记.书号
  3. WHERE 图书.书号 not in(select 书号 from 借书登记);

16、查询2015年1月1号至2015年3月31号期间借书的读者编号

  1. SELECT 借书证号
  2. FROM 借书登记
  3. WHERE 借书日期 between #2015/1/01# and #2015/3/31#;

17、查询2015年1月1号至2015年3月31号期间借书的读者姓名

  1. SELECT 读者.姓名
  2. FROM 读者, 借书登记
  3. WHERE 读者.借书证号=借书登记.借书证号
  4. and 借书登记.借书日期 between #2015/1/01# and #2015/3/31#
  5. GROUP BY 读者.姓名;

【实例二:教学管理数据库】

数据库关系图如下:


1、查询每名学生选课信息,并显示姓名、课程名、考试成绩等字段信息

  1. SELECT 学生.姓名, 课程.课程名称, 选课成绩.考试成绩
  2. FROM 学生 INNER JOIN (课程 INNER JOIN 选课成绩 ON 课程.[课程编号] = 选课成绩.[课程编号]) ON 学生.[学生编号] = 选课成绩.[学生编号];

2、查询每名学生的考试成绩的平均成绩、总成绩、最高成绩、最低成绩以及选课数

  1. SELECT DISTINCTROW 学生.姓名, Sum(选课成绩.考试成绩) AS [考试成绩 之 合计], Avg(选课成绩.考试成绩) AS [考试成绩 之 平均值], Min(选课成绩.考试成绩) AS [考试成绩 之 最小值], Max(选课成绩.考试成绩) AS [考试成绩 之 最大值], Count(学生.姓名) AS 选课数
  2. FROM 学生 INNER JOIN 选课成绩 ON 学生.[学生编号] = 选课成绩.[学生编号]
  3. GROUP BY 学生.姓名;

3、查询学生表中同名的学生记录

  1. SELECT First(学生.姓名) AS [姓名 字段], Count(学生.姓名) AS NumberOfDups
  2. FROM 学生
  3. GROUP BY 学生.姓名
  4. HAVING (((Count(学生.姓名))>1));

4、查询选课表中相同成绩的选课信息

  1. SELECT First(选课成绩.课程编号) AS [课程编号 字段], First(选课成绩.考试成绩) AS [考试成绩 字段], Count(选课成绩.课程编号) AS NumberOfDups
  2. FROM 选课成绩
  3. GROUP BY 选课成绩.课程编号, 选课成绩.考试成绩
  4. HAVING (((Count(选课成绩.课程编号))>1) AND ((Count(选课成绩.考试成绩))>1));

5、查询没有学生选修的课程

  1. SELECT 课程.*
  2. FROM 课程 LEFT JOIN 选课成绩 ON 课程.[课程编号] = 选课成绩.[课程编号]
  3. WHERE (((选课成绩.课程编号) Is Null));

6、查询没有选修课程的学生

  1. SELECT 学生.姓名, 选课成绩.学生编号
  2. FROM 学生 LEFT JOIN 选课成绩 ON 学生.[学生编号] = 选课成绩.[学生编号]
  3. WHERE (((选课成绩.学生编号) Is Null));

7、查询学生表中所有学生的班级、姓名、年龄

  1. SELECT 学生.姓名, 学生.班级, Year(Now())-Year([出生日期]) AS 年龄
  2. FROM 学生;

8、查询选课的学生中没有参加考试的学生,显示“姓名”、“性别”

9、查询考试成绩等于0分的学生,显示“姓名”、“性别”、“考试成绩”

10、查询考试成绩不等于0分的学生,显示“姓名”、“性别”、“考试成绩”

  1. SELECT 选课成绩.考试成绩, 学生.姓名, 学生.性别
  2. FROM 学生 INNER JOIN 选课成绩 ON 学生.学生编号 = 选课成绩.学生编号
  3. WHERE (((选课成绩.考试成绩)>0));

11、查询考试成绩小于60分和考试成绩大于等于90分的女生,显示“姓名”、“考试成绩”

  1. SELECT 选课成绩.考试成绩, 学生.姓名
  2. FROM 学生 INNER JOIN 选课成绩 ON 学生.学生编号 = 选课成绩.学生编号
  3. WHERE (((选课成绩.考试成绩)<=60 Or (选课成绩.考试成绩)>=90) AND ((学生.性别)="女"));

13、查询学生表中不同性别的学生人数

  1. SELECT Count(学生.学生编号) AS 人数统计, 学生.性别
  2. FROM 学生
  3. WHERE (((学生.性别)="女" Or (学生.性别)="男"))
  4. GROUP BY 学生.性别;

14、查询学生表中不同性别的学生每门课程的平均成绩,以交叉表的形式显示

  1. TRANSFORM Avg(选课成绩.总评成绩) AS 总评成绩之平均值
  2. SELECT 学生.性别
  3. FROM 课程 INNER JOIN (学生 INNER JOIN 选课成绩 ON 学生.学生编号 = 选课成绩.学生编号) ON 课程.课程编号 = 选课成绩.课程编号
  4. GROUP BY 学生.性别
  5. PIVOT 课程.课程名称;


15、查询学生表中每个学生的选课情况,要求以交叉表的形式显示每个学生选了哪门课及每个学生总的选课数

  1. TRANSFORM Count(选课成绩.课程编号) AS 课程编号之计数
  2. SELECT 学生.姓名, Count(课程.课程编号) AS 总选课数
  3. FROM 学生 INNER JOIN (课程 INNER JOIN 选课成绩 ON 课程.课程编号 = 选课成绩.课程编号) ON 学生.学生编号 = 选课成绩.学生编号
  4. GROUP BY 学生.姓名
  5. PIVOT 课程.课程名称;


16、建立参数查询,要求根据输入的学生姓名,显示该学生的全部信息

  1. SELECT 学生.姓名, 学生.性别, 课程.课程名称, 选课成绩.总评成绩, 学生.学生编号
  2. FROM 课程 INNER JOIN (学生 INNER JOIN 选课成绩 ON 学生.学生编号 = 选课成绩.学生编号) ON 课程.课程编号 = 选课成绩.课程编号
  3. WHERE (((学生.姓名)=[请输入学生姓名:]));

17、建立更新查询,将“女学生”表中的所有非团员都改为团员

  1. UPDATE 学生 SET 学生.团员否 = "1"

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多