概述
1. 增
1. 使用常量插入单个元组
格式:
INSERT
INTO <表名>[(<属性列1>[, <属性列2>]...)]
VALUES (<常量1>[, <常量2>]...);
例1:
INSERT
INTO 学生
VALUES ('98010', '张三', 20, '计算机系');
例2:
INSERT
INTO 选课 (学号, 课程号)
VALUES ('98010', 'C10');
2. 在表中插入子查询的结果集
格式:
INSERT
INTO <表名>[(<属性名1>[, <属性名2>]...)]
<子查询>;
例1:
INSERT
INTO 系平均年龄
SELECT 所在系, AVG(ALL 年龄)
FROM 学生
GROUP BY 所在系;
2. 删
格式:
DELETE
FROM <表名>
[WHERE <条件>];
例1:
DELETE
FROM 选课
WHERE 学号 IN (SELECT 学号
FROM 学生
WHERE 所在系='艺术系');
例2:
DELETE
FROM 学生
WHERE 所在系 = '艺术系'
3. 改
格式:
UPDATE <表名>
SET <列名> = <表达式>[, <列名>=<表达式>][,...n]
[WHERE <条件>];
例1:
UPDATE 学生
SET 年龄 = 年龄+2;
例2:
UPDATE 选课
SET 成绩=成绩*1.2
WHERE 课程号=(SELECT 课程号
FROM 课程
WHERE 课程名='数据库');
4. 查
格式:
SELECT <目标列组>
FROM <数据源>
[WHERE <元组选择条件>]
[GROUP BY <分列组> [HAVING <组选择条件>]]
[ORDER BY <排序列1><排序要求>[, ... n]];
1, 简单查询
例1:求数学系学生的学号和姓名
SELECT 学号, 姓名
FROM 学生
WHERE 所在系='数学系';
例2:
求选修了课程的学生学号
SELECT DISTINCT 学号
FROM 选课;
DISTINCT避免重复
例3:
求选修C1课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同,则按学号的升序排列
SELECT 学号, 成绩
FROM 选课
WHERE 课程号='C1'
ORDER BY 成绩 DESC, 学号 ASC;
例4:
求选修课程C1且成绩在80~90之间的学生学号和成绩,并将成绩乘以系数0.8输出
SELECT 学号,成绩*0.8
FROM 选课
WHERE 课程号= 'C1' AND 成绩 BETWEEN 80 AND 90;
例5:
求数学系或计算机系姓张的学生的信息
SELECT *
FROM 学生
WHERE 所在系 IN ('数学系', '计算机系') AND 姓名 LIKE '张%';
例6:
求缺少了成绩的学生的学号和课程号
SELECT 学号, 课程号
FROM 选课
WHERE 成绩 IS NULL;
IS NULL 操作表达式
2. 连接查询
1. 等值连接和非等值连接
格式:
[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>
例1:
查询每个学生的情况以及他所选修的课程
SELECT 学生.*, 选课.*
FROM 学生, 选课
WHERE 学生.学号 = 选课.学号;
例2:
求学生的学号,姓名,选修的课程名及成绩
SELECT 学生.学号, 姓名,课程名, 成绩
FROM 学生,课程,选课
WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号
例3:
求选修C1课程且成绩为90分以上的学生学号,姓名和成绩
SELECT 学生.学号, 姓名.成绩
FROM 学生, 选课
WHERE 学生.学号=选课.学号 AND 课程号='C1' AND 成绩>90;
2. 自身连接查询
例1:
查询每一门课的间接先行课
SELECT A.课程号, A.课程名, B.先行课
FROM 课程A, 课程B
WHERE A.先行课=B.课程号
一个表有两个作用,要对表起别名
3. 外部连接操作
左外部连接"*=" 在结果集中保留左表中的非匹配记录
右外部连接"=*" 在结果集中保留右表中的非匹配记录
3. 嵌套查询
1. 使用IN
求选修了高等数学的学生学号和姓名
SELECT 学号, 姓名
FROM 学生
WHERE 学号 IN (SELECT 学号
FROM 选课
WHERE 课程名='高等数学'));
2. 使用比较符的嵌套查询
求C1课程的成绩高于张三的学生的学号和成绩
SELECT 学号,成绩
FROM 选课
WHERE 课程号='C1' AND 成绩>(SELECT 成绩
FROM 选课
WHERE 课程号='C1' AND 学号=(SELECT 学号
FROM 学生
WHERE 姓名='张三'));
3. 使用ANY或ALL操作符的嵌套查询
求其他系中比计算机系某一学生年龄小的学生(即求年龄小于计算机系年龄最大者的学生)
SELECT *
FROM 学生
WHERE 年龄 < ANY(SELECT 年龄
FROM 学生
WHERE 所在系='计算机系') AND 所在系<>'计算机系';
求其他系中比计算机系的学生年龄都小的学生
SELECT *
FROM 学生
WHERE 年龄 < ALL (SELECT 年龄
FROM 学生
WHERE 所在系='计算机系') AND 所在系<>'计算机系';
4. 使用EXISTS操作符的嵌套查询
求选修了C2课程的学生姓名
SELECT 姓名
FROM 学生
WHERE EXISTS (SELECT *
FROM 选课
WHERE 学生.学号 = 学号 AND 课程号='C2');
求没有选修C2课程的学生姓名
SELECT 姓名
FROM 学生
WHERE NOT EXISTS (SELECT *
FROM 选课
WHERE 学生.学号 = 学号 AND 课程号='C2');
查询选修了全部课程的学生的姓名
SELECT 姓名
FROM 学生
WHERE NOT EXISTS (SELECT *
FROM 课程
WHERE NOT EXISTS (SELECT *
FROM 选课
WHRER 学生.学号=学号 AND 课程.课程号=课程号));
求选修了学号为"S2"的学生所选修的全部课程的学生学号和姓名
SELECT 学号, 姓名
FROM 学生
WHERE NOT EXISTS (SELECT *
FROM 选课1
WHERE 选课1.学号 = 'S2' AND NOT EXISTS(SELECT *
FROM 选课2
WHERE 学生.学号 = 选课2.学号 AND 选课2.课程号 = 选课1.课程号));
4. 组合查询
例1
求选修了C1课程或选修了C2课程的学生学号
SELECT 学号
FROM 选课
WHERE 课程号='C1'
UNION
SELECT 学号
FROM 选课
WHERE 课程号='C2';
例2
求选修C1课程, 并且也选修了C2课程的学生学号
SELECT 学号
FROM 选课
WHERE 课程号='C1'
INTERSECT
SELECT 学号
FROM 选课
WHERE 课程号='C2';
例3
求选修了C1课程但没有选修C2课程的学生学号
SELECT 学号
FROM 选课
WHERE 课程号='C1'
MINUS
SELECT 学号
FROM 选课
WHERE 课程号='C2'
5. 使用分组和函数查询
例1
求学生的总人数
SELECT COUNT (*)
FROM 学生;
例2
求选修了课程的学生人数
SELECT COUNT (DISTINCT 学号)
FROM 选课;
例3
求课程和选修该课程的人数
SELECT 课程号, COUNT(学号)
FROM 选课
GROUP BY 课程号;
例4
求选修了超过3门课的学生学号
SELECT 学号
FROM 选课
GROUP BY 学号 HAVING COUNT(*)>3;
本篇是对大学数据库课本上SQL增删改查知识的总结以备忘,如有不妥,请留言告知。
最后
以上就是开放豌豆为你收集整理的SQL增删改查的全部内容,希望文章能够帮你解决SQL增删改查所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复