SQL基础语句入门( 三 )

order by子句可以让查询结果中的元组按排列顺序显示 。
例如,升序输出student关系中的学生id
SELECT Sid FROM student ORDER BY Sid;该子句还有两个关键字,asc表示升序,desc表示降序
接下来进行降序输出
SELECT Sid FROM student ORDER BY Sid DESC;between谓词X between a and b表示X属性列中取大于等于a小于等于b的值
SELECT * FROM student WHERE Sid BETWEEN 1 AND 3;该语句相当于下方语句
SELECT * FROM student WHERE Sid >= 1 AND Sid <= 3;集合运算SQL的unionintersectexcept对应数学上集合的交集、并集、差集运算
例如student表中学号小于2与学号大于3的学生信息元组组成的集合的并集
(SELECT * FROM student where Sid <2) union (select * from student where Sid>3);注意:MySQL不支持except
聚集函数聚集函数是以值集为输入并返回单个值的函数 。SQL标准提供了五个固有的聚集函数:

  • 平均值 avg()
  • 最小值 min()
  • 最大值 max()
  • 求和 sum()
  • 计数 count()
基本聚集操作比较简单,例如要求student关系中所有学生id的平均值
SELECT AVG(Sid) FROM student;还有一种操作是分组聚集,它可以将聚集函数作用在一组元组集上
例如求student中每组同名学生的id之和
SELECT Sname,SUM(sid) FROM student GROUP BY Sname;在有些时候 , 某属性的取值可能为空,但需要对该属性列进行聚集,但SQL聚集函数并不认为结果为null , 而是认为应该跳过该值 。
另外,在SQL:1999中引入了布尔类型,它可以取truefalseunknown,聚集函数some()every()可应用于布尔值的集合,并分别计算这些值的析取(or)和合取(and)
having子句有些时候我们对分组有限定条件要求 , 例如求student中每组同名学生的id之和,但是要求和在5以上的,这种操作需要利用having子句
SELECT Sname,SUM(sid) FROM student GROUP BY Sname HAVING SUM(sid)>5;注意 , 任何出现在having子句中但是没被聚集的属性都需要出现在group by子句中
数据库修改删除删除与查询类似,例如删除student中id为1的学生信息
DELETE FROM student WHERE Sid = 1;插入例如我们向student插入一个名为Alex且id为5的一条数据,最简单的一条insert语句如下:
INSERT INTO student VALUES('Alex',5);这种情况values后的括号中的值的顺序与关系中属性的顺序一致 。
还有一种情况是指定属性和顺序 , 如下:
INSERT INTO student(Sid,Sname) VALUES(5,'Alex');该语句指定了两个属性,第一个值对应的属性为id , 第二个值对应的属性为学生名 。
更新某些情况下,我们不想改变元组的所有值,但是要改变元组的局部值 , 这就需要用到update语句
如我们将之前插入的名为Alexid为5的学生姓名改为CairBin
UPDATE student SET Sname='CairBin' WHERE Sid = 5;SQL提供case结构 , 它在单条update语句中执行多条更新 。
例如我们将course关系中所有为chemistry的学科改成mathmath改成chemistry
UPDATE course SET Cname=CASE Cname WHEN 'math' THEN 'chemistry' WHEN 'chemistry' THEN 'math'END;当然该语句还支持else,当所有when的条件都不符合时就会取else后的值
UPDATE course SET Cname=CASE Cname WHEN 'math' THEN 'chemistry' WHEN 'chemistry' THEN 'math'ELSE 'English'END;结束本文章并没有给出专门介绍SQL嵌套子查询相关的部分,这是因为我认为嵌套子查询基本上是原有语句的组合并且在举例的时候也用到过(尤其是更名运算那部分,所以我打算将这部分放到后面的文章去写 。
【SQL基础语句入门】

推荐阅读