程序员

2021-04-03

作者:admin 2021-04-13 我要评论

数据查询—例3.19-3.47、 关于数据查询的一些基本操作和实践比较简单可以多测几组数据体会查询方法的使用技巧。 1 .单表查询 例3.19 查询全体学生的姓名及出生日...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

数据查询—例3.19-3.47、

关于数据查询的一些基本操作和实践,比较简单,可以多测几组数据体会查询方法的使用技巧。
1.单表查询:

例3.19

查询全体学生的姓名及出生日期。

select Sname,2021-Sage
from Student;

在这里插入图片描述
出生日期用当前年份减去年龄,说明查询操作可以用计算表达式当作列名。事实上还可以用字符串常量以及函数

3.20

查询全体学生的姓名、出生年月和所在的院系,要求用小写字母表示系名。

select Sname,'Year of Birth',2021-Sage,lower(Sdept)
from Student;

lower表示小写,相对于大写就是upper
在这里插入图片描述
用户还可以通过指定别名来改变查询的列标题。上例增加别名的代码如下:
select Sname NAME,'Year of Birth' BIRTH,2021-Sage BIRTHDAY,lower(Sdept) DEPARTMENT from Student;改变后的样子:在这里插入图片描述
***2***选择表中的若干组
(1)消除取值重复的行
例3.21 查询选修了课程的学生学号。

select Sno
from Sc;

在这里插入图片描述
查询结果中包含许多重复的值。
指定***distinct***后就可以去除重复的值。

select  distinct Sno
from Sc;

在这里插入图片描述
如果没有指定distinct,那么默认为all,即保留重复值。
(2)查询满足条件的元组
查询满足条件的元组可以通过where子句来完成。
##比较大小

例3.22

查询***计算机科学系***全体学生的名单。

select Sname
from Student
where Sdept='CS';

结果:
在这里插入图片描述

例 3.23

查询所有***年龄在23岁***以下的学生姓名及其年龄。

select Sname,Sage
from Student
where Sage<20;

在这里插入图片描述

例3.24

查询***考试成绩不及格***的学生。

select distinct Sno
from SC
where Grade<60;

在这里插入图片描述
##确定范围

例3.25

查询年龄在20~35岁之间的学生姓名、系别个年龄。**

select distinct Sname,Sdept,Sage
from Student
where Sage between 20 and 35;

在这里插入图片描述
查询不在此区间的可以用***NOT BETWEEN***(使用<,>,来表示也可以)
##确定集合
谓词in可以用来查询属性值属于指定集合的元组。

例3.27

查询***计算机科学系,数学系和信息系学生***的姓名和性别。

select distinct Sname,Ssex
from Student
where Sdept in('CS','MA','IS');

在这里插入图片描述
这个例题相当于找到计算机系或数学系或者信息系的人,如果想找不输入这几个的学生,可以用not in。
##字符匹配
为此like用于字符串的匹配。其含义是查找指定的属性列值与<匹配串>相匹配的元组。<匹配串>可以是一个完整的字串,也可以是含有通配符%和_.其中:
%代表任意长度的字符串,可以为0.
_代表任意单个字符。

例3.29

查询学号为201215121学生的详细信息。

select *
from Student
where Sno like '201215121';

这里使用

sno=‘201215121’

效果类似。如果like后面的匹配串中不含通配符,则可以使用=代替,也可以使用!=代替not like。

例3.30

查询所有姓刘的学生的姓名、学号和性别。

select Sname,Ssex,Sno
from Student
where Sname like '刘%';

在这里插入图片描述

例3.31

查询姓“欧阳”且名字为三个字的学生的姓名。

select Sname,Ssex
from Student
where Sname like '欧阳_';

注意:数据库字符集为ASKII时一个汉字需要两个__;当字符集为GBK时只需要一个。
在这里插入图片描述

例3.32

查询第二个字为***阳***的学生的姓名和学号。

select Sname,Sno
from Student
where Sname like '_阳%';

在这里插入图片描述

例3.33

查询所有不姓刘的同学的姓名、学号和性别。

select Sname,Sno,Ssex
from Student
where Sname not like '刘%';

在这里插入图片描述

例3.34

查询DB_Design课程的课程号和学分。

select Cno,Ccredit
from Course
where Cname like 'DB\_Design' escape '\';

在这里插入图片描述
这里_不再作为通配符使用,所以可以正常查询。ESCAPE‘\’ 表示’'为换码字符。这样匹配串中紧跟在‘‘后面的字符’_'不再具有通配符的作用,转义为普通的字符。

例3.35

查询一“DB_"开头,且倒数第三个字符为i的课程的详细情况。


select *
from Course
where Cname like 'DB\_%i__' escape '\';

在这里插入图片描述
DB\%i__ ————这里_表示以DB_开头,%i__(两个),表示倒数第三个字符为i。
##涉及空值的查询
**

例3.36

** 某些学生选修课程之后没有参加考试,所以有选修记录,但是没有考试成绩。查询缺少考试成绩的学生的学号和对应的课程号。

select Sno,Cno
from SC
where Grade is NULL;

在这里插入图片描述

例3.37

查所有成绩的学生考号和课程号。

select Sno,Cno
from SC
where Grade is not NULL;

在这里插入图片描述
排除成绩为空的即可。
##多重条件查询
例3.38 查询计算机科学系年龄在20岁以下的学生姓名。

select Sname
from Student
where Sdept ='CS'and Sage<20;

在这里插入图片描述

例3.39

查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列

select Sno,Grade
from SC
where Cno='3'
order by Grade DESC;

在这里插入图片描述
(用户可以用order by 语句对查询结果按一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序)
例3.40 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。

select *
from Student
order by Sdept ASC,Sage DESC;

在这里插入图片描述
¥¥聚集函数

例3.41

查询学生总人数

select count(*)
from Student;

在这里插入图片描述
count()函数为统计元组个数函数。

例3.42

查询选修了课程的学生人数。

select count(distinct Sno)
from SC;

在这里插入图片描述
一名同学可能选修多个课程,所以必须使用distint取消重复值,否则结果为:在这里插入图片描述

例3.43

计算选修1号课程的学生的平均成绩。

select AVG(Grade)
from SC
where Cno='1';

在这里插入图片描述

例3.44

查询选修1号课程的学生的最高分数

select max(Grade)
from SC
where Cno='1';

例3.45查询学生201215012选修课程的总学分
select sum(Ccredit)
from SC,Course
where Sno='201215012’and SC.Cno=Course.Cno;
以下是SQl提供的一些聚集函数:
在这里插入图片描述

例3.46

求各个课程号及相应的选课人数

select Cno,count(Sno)
from SC
group by Cno;

在这里插入图片描述
该语句对查询结果按Cno的值分组,所有具有相同Cno值的元组为一组,然后对每一组作用聚集函数count进行计算,以求得改组的学生人数。

例3.47

查询选修了三门以上课程的学生学号。

select Sno
from SC
group by Sno
having count(*)>2;

在这里插入图片描述
(没有选修三门的学生,改为两门)
这里先用GROUP BY子句按Sno进行分组,再用聚集函数COUNT对每一组进行计算;HAVING短语给出了选择组的条件,只有满足条件的组才能被选则出来。
—————————————————————
完成。
总结:
关于查询操作很具体也很细节,举了很多例子,每个例子也比较简洁易懂,容易理解。注意多测试数据来记住使用方法就好。
————————感谢观看————————

;原文链接:https://blog.csdn.net/qq_45993036/article/details/115413372

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 四两拨千斤——你不知道的VScode编码Ty

    四两拨千斤——你不知道的VScode编码Ty

  • 我是如何在 Vue 项目中做代码分割的

    我是如何在 Vue 项目中做代码分割的

  • position:sticky 粘性定位的几种巧妙应

    position:sticky 粘性定位的几种巧妙应

  • 从零到一搭建React组件库

    从零到一搭建React组件库

腾讯云代理商
海外云服务器