暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL数据库学习笔记:(三)数据管理语言DML

编程思录 2018-09-29
764
点击上方蓝色字关注啃饼小记~

数据管理语言

顾名思义,数据管理语言就是对数据进行管理,它具体包括对数据的(增加),(删除),(修改),(查询)操作。

增加(插入)数据

增加单个元组

语法格式
 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

最后修改时间:2019-12-16 10:20:46
文章转载自编程思录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论