数据库——单表查询

【例3.29】查询学号为201215121的学生的详细情况。

SELECT *
FROM Student
WHERE Sno LIKE '201215121';

等价于

SELECT *
FROM Student
WHERE Sno = '201215121';

在这里插入图片描述
【例3.30】 查询所有姓刘学生的姓名、学号和性别。

SELECT Sname, Sno, Ssex
FROM Student
WHERE  Sname LIKE '刘%';

字符串匹配的一般格式

 [NOT] LIKE<匹配串>[ESCAPE<换码字符>]

含义是查找指定的属性列值与<匹配串>相匹配的元组。<匹配串>可以是一个完整的字符串,也可以含有通配符%和_。
其中,%代表任意长度的字符串。
_代表任意单个字符。

通过指定属性名可实现只显示需要部分的数据。
在这里插入图片描述
【例3.31】查询姓"刘"且全名为两个汉字的学生的姓名。

 SELECT Sname
 FROM Student
 WHERE Sname LIKE '刘_';

在这里插入图片描述
注意:不同字符集的环境下,代表一个汉字所需要的_数量不同。
数据库字符集为ASCII时,一个汉字需要两个_
数据库字符集为 GBK 时,一个汉字需要一个_
这里的_代表一个字符,与字节相区别。
ASCII码下,一个字符只占一个字节,但是汉字需要两个字符。
GBK下,一个汉字需要两个字节,但是一个汉字却只需要一个字符。

在SQLserver中查询字符集

SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')

在这里插入图片描述
936代表GBK码。
【例3.32】查询名字中第2个字为"阳"的学生的姓名和学号。

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 '\'; 

在这里插入图片描述
【例3.35】查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。

SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%i__'ESCAPE '\';

在这里插入图片描述
【例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;

对于空值,排序时显示的次序由具体系统实现来决定。
GROUP BY:
细化聚集函数的作用对象
如果未对查询结果分组,聚集函数将作用于整个查询结果
对查询结果分组后,聚集函数将分别作用于每个组
按指定的一列或多列值分组,值相等的为一组
【例3.40】查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。

SELECT *
FROM Student
ORDER BY Sdept ASC, Sage DESC;  

在这里插入图片描述
【例3.41】 查询学生总人数。

SELECT COUNT(*)
FROM  Student; 

在这里插入图片描述
【例3.42】查询选修了课程的学生人数。

SELECT COUNT(DISTINCT Sno)
FROM SC;

【例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='201215122' AND SC.Cno=Course.Cno; 

【例3.46】求各个课程号及相应的选课人数。

SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno; 

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

SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3; 

【例3.48】查询平均成绩大于等于90分的学生学号和平均成绩。

SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=80;

在这里插入图片描述
注意WHERE作用于聚合前,HAVING作用于聚合后。

发布了6 篇原创文章 · 获赞 5 · 访问量 2776

猜你喜欢

转载自blog.csdn.net/jiesfriend/article/details/104818484