


数据管理语言
顾名思义,数据管理语言就是对数据进行管理,它具体包括对数据的增(增加),删(删除),改(修改),查(查询)操作。
增加(插入)数据
增加单个元组
语法格式
INSERT INTO <表名>[(<列名1>[,<列名2>,...])] VALUES([<常量1>[,<常量2>,...]])
insert into 学生
values(020011,'张三','男',19,'020005');
增加多个元组
语法格式
INSERT INTO <表名>[(<列名1>[,<列名2>,...])] <子查询>;
create table 女学生
(学号 char(6),
姓名 char(10),
年龄 smallint);
insert into 女学生
select 学号, 姓名, 年龄
from 学生
where 性别='女';
select * from 女学生;
删除数据
语法格式
DELETE FROM <表名>[ WHERE<条件>];注意
数据一旦被删除就无法后恢复,除非事先有备份。
select * from 考试;
delete from 考试 where 学号 in(select 学号 from 学生 where 班级号='01001');
select * from 考试;
修改数据
语法格式
UPDATE <表名> SET <列名>=<表达式>[,<列名>=<表达式>][,...n] [WHERE<条件>];
update 课程
set 周学时=周学时+2
where 课程名='数据库';
select * from 课程;
select * from 考试;
update 考试
set 成绩=成绩*0.8
where 课程号=(
select 课程号
from 课程
where 课程名='数据库');
select * from 考试;
查询数据
SELECT 语句
语法格式
SELECT [ALL |DISTINCT ][<目标列表达式>[,...n]]
FROM <表名或视图名> [,<表名或视图名>,...]
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC |DESC ],...]
说明
:where 用于条件的过滤,having 必须紧跟随GROUP BY字句使用,排序默认为升序(可不写)。
单表查询
select 学号,姓名,年龄
from 学生
where 年龄 between 20 and 22;
select 学号,成绩*0.8
from 考试
where 课程号='A004'
order by 学号 desc, 成绩;
select *
from 学生
where 班级号 in('01001','01002','01003') and 姓名like '王%';
select distinct 班级号
from 学生
联接查询
select 学生.* , 考试.*
from 学生,考试
where 学生.学号=考试.学号;
select 学生.学号,姓名,性别,年龄,班级号,课程号,成绩
from 学生,考试
where 学生.学号=考试.学号;
嵌套查询
使用比较符的嵌套查询
一个SELECT-FROM-WHERE 语句称为一个查询块。嵌套查询一般执行的顺序是由里向外或者由下层向上层进行处理,即先进行子查询再进行父查询。
select 学号,成绩
from 考试
where 课程号='A004' and 成绩 >(
select 成绩
from 考试
where 课程号='A004' and 学号= (select 学号 from 学生 where 姓名="刘芳"));
使用谓词ALL或ANY的嵌套查询
any 大于某一个,即大于最小的那个
all 大于所有,即大于最大的那个
< any 小于某一个,即小于最大的那个
< all 小于所有,即小于最小的那个
select *
from 学生
where 年龄< any(
select 年龄
from 学生
where 班级号='01001') and 班级号<> '01001';
select *
from 学生
where 年龄< any(
select 年龄
from 学生
where 班级号='01001') and 班级号<> '01001';
使用谓词EXISTS的嵌套查询语法格式
用于判断子查询的结果是否存在。
EXISTS <子查询>
select 学号 ,姓名 ,性别 ,班级号
from 学生
where exists(
select * from 考试
where 学生.学号=学号 and 课程号='A004');
注意
一些带EXISTS或者NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换,但是所有
带IN谓词、比较运算符、ANY和All谓词的子查询都能用带EXISTS谓词的子查询等价替换。
集合查询
SQL的集合查询操作符有UNION(并操作)、INTERSECT(交操作)和MINUS(差操作)这3种。
UNION(并操作) 自动去重,但是各列的数目及其类型必须相同。
select 学号,成绩
from 考试
where 课程号='A003'
union
select 学号,成绩
from 考试
where 课程号='A004'
INTERSECT(交操作)
select 学号,成绩
from 考试
where 课程号='A003'
intersect
select 学号,成绩
from 考试
where 课程号='A004'
MINUS(差操作)
select 学号,成绩
from 考试
where 课程号='A003'
minus
select 学号,成绩
from 考试
where 课程号='A004'
函数查询
| 函数 | 功能 |
|---|---|
| COUNT ( [ DISTINCT或ALL] * ) | 统计元组个数 |
| COUNT ( [ DISTINCT或ALL] <列名>) | 计算一列中值的个数 |
| SUM ( [ DISTINCT或ALL] <列名>) | 计算一列中值的总和(此列必须是数值型) |
| AVG( [ DISTINCT或ALL] <列名>) | 计算一列中值的平均值(此列必须是数值型) |
| MAX ( [ DISTINCT或ALL] <列名>) | 求一列值中的最大值 |
| MIN ( [ DISTINCT或ALL] <列名>) | 求一列值中的最小值 |
总结一下
数据管理语言就是对数据进行管理,它具体包括对数据的增(增加insert into),删(删除delete),改(修改update),查(查询select)操作。
写在后面
今天关于数据的管理语言就写到这里了,下次笔记就介绍一下数据库中用于数据控制的语言DCL。
今天的分享就到这里了,如果你有任何不懂的问题,可以发信息或者留言喽。

THANK YOU
Design by Envse





