SQL语句学习与练习
- 格式:doc
- 大小:22.50 KB
- 文档页数:3
第4章SQL语句是此课程必须掌握的内容
由于课本中所涉及的例子采用了4个表,且表里的内容不易理解,所以我们参考以下两个表进行学习(可在群里下载以下表进行下述练习或下载书本中对应的4个表按书本例题练习)XS(学号,姓名,性别,民族)
CJ(学号,姓名,选修课,成绩)
练习目的:SQL查询语句是考试中最常考的部分,虽然可以通过后面学习的SQL查询设计器快速完成,但首先我们需要先掌握SQL语句的使用规范及熟悉不同短语的使用。
掌握点1 简单查询
1、从XS表中查找姓名字段信息
知识点:简单查询语句的基本书写规范(SELECT 字段FROM 表)
解析:SELECT 姓名FROM XS
2、查找XS表中所有信息
知识点:如果要查询所有字段可以用*号表示
解析:SELECT * FROM XS
3、查找出民族为汉族同学的信息
知识点:查询语句若要限定条件查找需加WHERE语句。
解析:SELECT * FROM XS WHERE 民族=”汉”
4、查找出民族为汉族并且姓张同学的信息
知识点:如果有多个限定条件,需要同时满足的用and,只需满足其中一条件的用or)解析:SELECT * FROM XS WHERE 民族=”汉” AND 姓名=”张”
5、查找班级里的同学来自哪些民族(去掉重复值)
知识点:去掉字段重复值用的是DISTINCT语句
解析:SELECT DISTINCT 民族FROM XS
掌握点2 连接查询(查询需要用到两个或两个以上的表就需要建立表与表之间的连接)
6、查找成绩大于80分同学的姓名及民族
知识点:成绩表没有民族字段、而学生表没有成绩字段,所以需要用到两个表才能完成解析:select xs.姓名, 民族from xs,cj where xs.学号=cj.学号and 成绩>80
附注:如果查找的信息需要多个表才能完成,就需要表与表之间通过相同字段两两连接,若查找的字段是多个表的共同字段,查找此字段时就要对此字段加以限定,用表名.字段加以指定即可(如xs.姓名),如不是相同的字段可以指定也可以不指定。
7、查找选修了会计并且会计成绩大于70分同学的姓名及民族
解析:需同时满足多个条件直接用AND语句
sele xs.姓名, 民族from xs,cj where xs.学号=cj.学号and 成绩>70 and 选修课="会计"
掌握点3 排序
8、按成绩升序查找成绩表信息
知识点:提到排序的都需要用到ORDER BY语句,默认为升序,如果要降序排列,还需加DESC短语
解析:sele * from cj order by 成绩asc (升序为默认排序,asc短语可以省略)
9、按成绩降序查找成绩表信息
解析:sele * from cj order by 成绩desc
10、查找成绩大于80分的成绩表信息,并按成绩降序排列
解析:sele * from cj where 成绩>80 order by 成绩desc
掌握点4 简单的计算查询
11、根据学生表统计出我们班同学的人数
知识点:统计需要用到计数函数COUNT,计数可以针对某个字段,也可以针对整行如COUNT(学号)、COUNT(姓名)、COUNT(*)他们返回的值都是一样的
解析:SELE COUNT(*) FROM XS
12、查询出成绩表的平均分并重新命名为平均分字段
知识点:求平均是AVG函数,如果要重新对字段命名可以用AS短语或者直接用空格解析:sele avg(成绩) 平均分from cj
13、查找出成绩表的最高分并重新命名为最高分字段
解析:SELE MAX(成绩) 最高分FROM CJ
14、其他计算查询如求和SUM,最小值MIN
掌握点5 分组查询
分组查询如果出现在考题中有很多同学都不清楚何时需要用到分组语句,分组一般在以下情况下要用到(1)、题目中明确提到按某某字段分组;(2)题目中出现了“各”和“每”字的;(3)、需要对同一列的数据分类汇总的就需要进行分组
15、统计出我们班男女同学的数量
解析:统计男女生数量,即需要对性别分类汇总
SELE 性别,COUNT(*) FROM XS GROUP BY 性别
16、统计出我们班各民族同学的数量
解析:SELE 民族,COUNT(*) FROM XS GROUP BY民族
17、检索出我们班有哪些民族至少有两位同学
解析:SELE 民族,COUNT(*) FROM XS GROUP BY 民族HAVI COUNT(*)>=2
注:having语句必须和group by一起使用,是指分组之后再筛选出满足条件的记录
18、检索出我们班有哪些少数民族至少有两位同学
解析:HAVI和WHERE不矛盾,WHERE是指先筛选出满足条件的记录再分组,HAVI是分组之后再筛选
SELE 民族,COUNT(*) FROM XS WHERE 民族!=”汉”GROUP BY 民族HAVI COUNT(*)>=2
掌握点6 输出设置
把查询结果存入表INTO DBF 或者INTO TABLE
把查询结果存入数组INTO ARRAY
把查询结果存入临时表INTO CURSOR(了解,一般出选择题)
把查询结果存入文本文件TO FILE(了解,一般出选择题或程序改错题)
7、以下内容请了解
(1)、嵌套查询(即一条语句里面包含了多条SELECT语句)
例1(可能有操作题):查询出成绩大于成绩表里平均分的成绩信息
SELE * FROM CJ WHERE 成绩>(SELE AVG(成绩) FROM CJ)
例2(可能有操作题): 查找出没有参加选修课的同学信息
解析:没有参加选修课即此同学不能在cj表里找到信息,所以要找出的是在xs表有信息,但cj表里没有信息的同学
SELE * FROM XS WHERE 学号NOT IN(SELE 学号FROM CJ)
(2)、谓词查询
例3(一般出选择题): 查找出没有参加选修课的同学信息(使用EXISTS)
SELE * FROM XS WHERE NOT EXIS (SELE * FROM CJ WHERE 学号=xs.学号)
注:此例等同于例2,只不过此例是用谓词查询
理解:将逐一查找学生表,当指针指向学生表第一条记录时,获取到学生表的学号信息,然后通过此学号查找成绩表,查看成绩表是否有此学号记录存在,如果没有就说明此学生没有参加选修课。