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的union
、intersect
、except
对应数学上集合的交集、并集、差集运算
例如student表中学号小于2与学号大于3的学生信息元组组成的集合的并集
(SELECT * FROM student where Sid <2) union (select * from student where Sid>3);
注意:MySQL不支持except
聚集函数聚集函数是以值集为输入并返回单个值的函数 。SQL标准提供了五个固有的聚集函数:
- 平均值
avg()
- 最小值
min()
- 最大值
max()
- 求和
sum()
- 计数
count()
SELECT AVG(Sid) FROM student;
还有一种操作是分组聚集,它可以将聚集函数作用在一组元组集上例如求student中每组同名学生的id之和
SELECT Sname,SUM(sid) FROM student GROUP BY Sname;
在有些时候 , 某属性的取值可能为空,但需要对该属性列进行聚集,但SQL聚集函数并不认为结果为null
, 而是认为应该跳过该值 。另外,在SQL:1999中引入了布尔类型,它可以取
true
、false
、unknown
,聚集函数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
语句如我们将之前插入的名为
Alex
id为5
的学生姓名改为CairBin
UPDATE student SET Sname='CairBin' WHERE Sid = 5;
SQL提供case
结构 , 它在单条update
语句中执行多条更新 。例如我们将course关系中所有为
chemistry
的学科改成math
,math
改成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基础语句入门】
推荐阅读
- day08-MySQL事务
- 分布式存储系统之Ceph集群RBD基础使用
- MySQL 窗口函数
- 线上服务宕机,码农试用期被毕业,原因竟是给MySQL加个字段
- mac通过docker一键部署MySQL8
- spring boot集成redis基础入门
- day07-2MySQL索引
- CentOS部署MySQL
- MySQL用户也可以是个角色
- python+request+pymysql+pytest数据驱动