数据库标准语言SQL(六)——单表查询(二)

数据库标准语言SQL(五)——查询(二)

一、前言

这一次内容继续是单表查询的部分,然后单表查询就结束了。

二、示例

1.用值表确定集合查询

引入谓词IN 查找属性值属于指定集合的元组,可以让我们在查询时候更加的随心所欲,查询结果更加符合需求

--查询IS、MA、CS三个系学生信息
select sname,ssex,sdept from student
where sdept in ('IS','MA','CS');
--查询非以上三系
select sname,ssex from student
where sdept not in ('IS','MA','CS');

在这里插入图片描述
因为之前插入数据的时候,数据题目就只有这三个系,所以,另一个结果就是空的。

2.字符匹配以及字符通配符的简单使用

字符匹配用 LIKE 和NOT LIKE两个谓词,当然还涉及到了一些简单的字符通配符

字符通配符含义
%代表任意字长
_(下划线)只占一个任意单个字符,其代表汉字时候和数据库字符集有关,ASCII用一个,GBK两个
--匹配串为固定字符串
--查询学号为201215122的学生信息
select * from student
where sno like '201215122';
--等价于
select * from student
where sno = '201215122';

--匹配串为含通配符的字符串
--查询所有李姓同学的信息
select sname,sno,ssex from student
where sname like '李%';
--查询姓王,且全名为2个字--
SELECT * FROM Student WHERE Sname LIKE '王_';
--转义字符换码
--查询DB_Design课程的信息
--这里面有字符通配符‘_’所以要转义
select Cno,Credit
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE'\';

3.空值查询

这里引入 IS 。要注意的是,虽然之前像LIKE这样的可以和“=”相互替换,但是这个绝对不可以。

--查询缺少成绩的学生学号和课程号
select sno,cno from sc
where grade is null;
--查询有成绩
select sno,cno from sc
where grade is not null;

在这里插入图片描述
建表的时候,都是良好的数据题目,没有空值,所以查询结果为空

4.多重条件查询

这里就用到了两个关键词AND 和OR就是逻辑上的且和或

/*多重条件查询*/
--查询计算机系年龄在20岁以下的学生姓名
select sname from student
where sdept =  'CS' and sage<20;
--查询IS、MA、CS的学生姓名和 性别
--方法一、IN集合查询
select sname,ssex from student
where sdept in ('IS','MA','CS');
--方法二、OR条件查询
select sname,ssex from student
where sdept='IS' or sdept='MA' or sdept='CS';

5.ORDER BY子句

这个子句主要是把查询结果按照一定的顺序排序输出,有两个排序的标志词ASC(升序)和DESC(降序)。

/*ORDER BY子句*/
--查询选修3号课程,降序排列
select sno,grade from sc
where cno='3'
order by grade desc;
--系号升序,同一个系降序
--asc可以省略
select * from student
order by sdept asc,sage desc;
select * from student
order by sdept ,sage desc;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们可以看到,不仅仅有对于数字的排序,还有对于英文字符串的排序

6.聚集函数

当然,我们也可以在数据库里面实现excel的统计学功能。这里就用到了一些聚集函数

聚集函数的语法意义
COUNT(*)统计所有元组个数
COUNT(DISTINCT 列名)统计该列中值个数,且不重复计入
COUNT(ALL(默认) 列名)统计该列中值个数,全部计入
SUM(DISTINCT 列名)统计该列中值总和,且不重复计入
SUM(ALL(默认) 列名)统计该列中值总和,全部计入
AVG(DISTINCT 列名)统计该列中值平均数,且不重复计入
AVG(ALL(默认) 列名)统计该列中值平均数,全部计入
MAX(DISTINCT 列名)统计该列中值最大值,且不重复计入
MAX(ALL(默认) 列名)统计该列中值最大值,全部计入
MIN(DISTINCT 列名)统计该列中值最小值,且不重复计入
MIN(ALL(默认) 列名)统计该列中值最小值,全部计入
/*聚集函数*/
--查询学生总人数
select count(*) from student;
--查询选修了课程的学生人数
select count(distinct sno) from sc;
--查询且计算1号课程的平均成绩
select avg (grade) from sc
where cno='1';
--查询1号课程的学生最高分数
select max(grade) from sc
where cno = '1';
--查询1号课程的学生最低分数
select min(grade) from sc
where cno = '1';
--查询学生201215122选修课程的总学分
select sum(ccredit) from sc,course
where sno='201215122' and sc.cno=course.cno;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

7.GROUP BY子句

该子句为了将查询结果按照某一列或者多列的值分组,其目的在于细化聚集函数的查询。

/*GROUP BY子句*/
--求各个课程号及相应的选课人数
select cno,count(sno) from sc
group by cno ;
--查询选修了3门课以上的学生学号
select sno from sc
group  by sno
having count(*)>3;

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑾瑜含章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值