关系数据库标准语言SQL(7,8)

目录

选择表中若干元组

消除取值重复的行

查询满足条件的元组

比较大小

确定范围

确定集合

字符匹配

匹配串为含通配符的字符串

使用换码字符将通配符转义为普通字符

涉及空值的查询

多重条件查询

order by字句

例子

聚集函数

GROUP BY 子句

HAVING语句与WHERE语句的区别


选择表中若干元组

消除取值重复的行

如果没有指定DISTINCT关键词,

则缺省为ALL

【例】查询选修了课程的学生学号。 SELECT Sno FROM SC;等价于:SELECT ALL Sno FROM SC;

没distinct默认为all。

【例】指定DISTINCT关键词,去掉表中重复的行。 SELECT DISTINCT Sno FROM SC;

查询满足条件的元组

查询满足条件的元组可以通过where子句实珂,where常用的查询条件如下:

确定范围 BETWEEN AND,NOT BETWEEN AND

确定集合 IN,NOT IN

字符匹配 LIKE,NOT LIKE

空值 IS NULL,IS NOT NULL

多重条件(逻辑运算) AND,OR,NOT

还有比较>,<,>=等,其中<>是不等于的意思与!=同义

比较大小

【例】查询所有年龄在20岁以下的学生姓名及其年龄。 SELECT Sname,Sage FROM Student WHERE Sage<20;

【例】查询考试成绩有不及格的学生的学号。 SELECT DISTINCT Sno FROM SC WHERE Grade<60;

distinct保证查出的学号不重复。

确定范围

【例】查询年龄在20~23岁(包括20岁和23岁)之间的学生,姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;

【例】查询年龄不在20~23岁之间的学生,姓名、系别和年龄 SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;

确定集合

【例】查询信息系数学系和计算机科学系学生的姓名和性别 SELECT Sname,Ssex FROM Student WHERE SdeptIN('IS','MA','CS');

【例】查询既不是信息系、数学系,也不是计算机科学系学生的姓名和性别。 SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN (IS','MA','CS');

字符匹配

【例】查询学号为200215121的学生的详细情况。 SELECT FROM Student WHERE Sno LIKE 200215121';等价于: SELECT FROM Student WHERE Sno='200215121';

匹配串为含通配符的字符串

【例】查询所有姓刘学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE刘%

【例】查询姓“欧阳”且全名为三个汉字的学生的姓名 SELECT Sname FROM Student WHERE Sname LIKE‘欧阳_’;

【例】查询名字中第二个字为“阳”字的学生的姓名和学号。 SELECT Sname,Sno FROM Student WHERE Sname LIKE‘_阳%’

【例】查询所有不姓刘的学生姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM Student WHERE S Sname NOT LIKE 刘%;

使用换码字符将通配符转义为普通字符

SELECT FROM Course WHERE Cname LIKE'DB\_%i ESCAPE \

说明:ESCAPE表示为换码字符。这里的\表示like里出现的一个_是实际的_而不是空出来的一个字符。

涉及空值的查询

谓词:IS NULL或IS NOT NULL“1S”不能用=代替。

多重条件查询

用逻辑运算符AND和OR来联结多个查询条件,AND的优先级高于 OR,可以用括号改变优先级。可用来实现多种其他谓词:[NOT] IN[NOT]BETWEEN AND

order by字句

ORDER BY子句可以按一个或多个属性列排序:

升序:ASC;降序:DESC;缺省值为升序。

当排序列含空值时:空值默认为最大值 

ASC:排序列为空值的元组最后显示。

DESC:排序列为空值的元组最先显示。

例子

【例】查询选修了3男课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT Sno,Grade FROM SC WHERE Cno='3'ORDER BY Grade DESC;

聚集函数

COUNT([DISTINCT|ALL]统计元组个数

COUNT[DISTINCT |ALL<列名>)统计一列中值的个数

SUM([DISTINCT|ALL]列名>)计算一列值的总和(此列必须是数值型

AVG ([DISTINCT |ALL]<列名>)计算一列值的平均值(此列必须是数值型)

MAX[DISTINCT ALL]<列名>)求一列值的最大值

MIN[DISTINCT ALL]<列名>)求一列值的最小值

【注意】,WHERE子句中是不能用聚集函数作为条件表达式的。聚集函数只能用于SELECT子句和GROUPBY中的HAVING子句。

GROUP BY 子句

GROUP BY子句作用是:按指定的一列或多列值分组,值相等为一组,来细化聚集函数的作用对象

【说明】①未对查询结果分组,聚集函数将作用于整个查询结

②对查询结果分组后,聚集函数将分别作用于每个组。

GROUPE BY子句分组后,可以使用HAVING:短语指定筛选条件。

【例】查询选修了3门以上课程的学生学号 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT (*)>3

HAVING语句与WHERE语句的区别

①作用对象不同:WHERE-子句作用千基表或视图,从中选择满足条件的元组。

HAVING短语作用于组,从中选择满足条件的组。

②WHERE子句中是不能用聚集函数作为条件表达式的

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

下面的语句是不对的: SELECT Sno,AVG (Grade) FROM SC WHERE AVG (Grade)>=90 GROUP BY Sno

正确的查询语句应该是: SELECT Sno,AVG (Grade) FROM SC GROUP BY Sno HAVING AVG (Grade)>=90;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柏箱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值