SQL基础使用入门(二): DML语句和DCL语句

SQL语句第二个类别——DML 语句

DML是数据操作语言的缩写,主要用来对数据表中数据记录实例对象进行操作,包括插入、删除、查找以及修改四大操作,这也是开发人员使用中最为频繁的操作。

1.插入记录

基本语法:INSERT INTO tablename (field1,field2,…,fieldn) VALUES (value1,value2,…,valuen);

其中,(field1,field2,…,fieldn) 表示数据表属性字段,(value1,value2,…,valuen) 表示插入记录所对应属性字段的属性值,若前面没有说明数据表属性字段,则后面记录属性默认与表中字段顺序一致

例1(使用方法1向Student表中插入一行新记录)

image

例2(使用方法2向Student表中插入一行新记录)

image

另外也可以一次性插入多条记录,即在VALUES后添加多条记录值

例(一次性插入多条记录)

image

此外,如果插入记录中属性为表属性字段的子集,则未赋值的属性将自动设置为空值(允许空值的情况下)

例(系统自动对未赋值属性设置空值)

image

2.更新记录

基本语法:UPDATE tablename SET field1=value1,field2=value2,…,fieldn=valuen [WHERE CONDITION];

其中,’fieldn=valuen’ 表示更新记录属性值操作,’WHERE CONDITION’ 表示对所需更新的记录的条件筛选

例(更新Student表中学号为’201615122‘的学生的系为’MA‘

image

也可以同时对多个表进行更新,这主要用于根据一个表属性字段去修改另一个表属性字段,在此不做演示,欢迎读者自行尝试。

基本语法:

UPDATE t1,t2,…,tn SET t1.field1=value1,t2.field2=value2,…,tn.fieldn=valuen [WHERE CONDITION];

3.删除记录

基本语法:DELETE FROM tablename [WHERE CONDITION];

例(删除Student表中学号为’201615123‘的学生记录)

image

和多表更新一样,也可以直接删除多个表,基本语法:DELETE t1,t2,…,tn FROM t1,t2,…,tn [WHERE CONDITION]; 在此亦不作相应演示,请读者自行完成。

4.查询记录

实际上在本部分前面已经为大家演示了基本的查询语句:SELECT * FROM tablename [WHERE CONDITION];

语句中的’*’代表查询全部属性字段,故查询结果显示了表中全部记录。而在实际生活应用中,往往需要进行多种条件的查询,以下将分别进行介绍。

1)查询不重复记录

有时查询需要去除一些重复的记录,这时可以在查询时添加关键字 DISTINCT 来实现此功能

例1.1(查询Student表中系种类)

image

例1.2(查询Student表中系种类)

image

2)条件查询

查询语句中可选项[WHERE CONDITION]表示条件查询,条件的种类可以有多种,可以包括比较远算符(>,<,>=,<=,=,!=)、逻辑运算符(and,or,not)或空值判断(is null,is not null)等

例1(查询Student表中年龄小于19岁的学生记录)

image

例2(查询Student表中’MA‘系且年龄大于19虽的学生记录)

image

3)排序显示查询

在查询后可以通过关键字ORDER BY 和 DESC|ASC 来实现排序显示,其中DESC代表降序,ASC代表升序,默认为升序。

基本语法:
SELECT * FROM tablename
[WHERE CONDITINO]
[ORDER BY field1 [DESC|ASC],field2 [DESC|ASC],…,fieldn [DESC|ASC]];

例(查询Student表中全部学生记录并按照年龄从小到大排序显示)

image

4)限制显示查询

MYSQL在SQL92中新扩展了一个语法关键字 LIMIT,它可以在查询之后只显示指定个数的信息

语法格式:SELECT …[LIMIT offset_start,row_count],其中offset_start表示显示的起始偏移量,默认为0,row_count表示显示记录的个数

例(查询Student表中全部学生记录并从第2个学生记录开始显示2条信息)

image

5)聚合

聚合,简单来说就是SQL内置提供的一些常用记录数据汇总统计方法,在查询时可以根据需求直接调用。

基本语法:
SELECT [field1,field2,...,fieldn] fun_name
FROM tabename
[WHERE CONDITION]
[GROUP BY field1,field2,...,fieldn]
[WITH ROLLUP]
[HAVING CONDITION];

其中,fun_name代表相应的聚合函数,如count(*)个数统计、max最大值、min最小值、avg平均值以及sum求和等;GROUP BY 表示按照表中属性字段进行分类;WITH ROLLUP 表示是否对分类聚合后在进行汇总;HAVING 表示分类聚合后再进行条件筛选。建议对查询先WHERE筛选再HAVING筛选,这样可以减少聚合开销,使得查询效率更高。

例1(统计Student表中各个系的人数)

image

例2(统计Student表中除开‘IS’系以外每个系的人数并汇总人数)

image

例3(统计Student表中系人数大于1的系的学生人数)

image

6)表连接

为将两个及以上的表的信息同时显示,SQL中提供了表连接操作。表连接可以分为内连接和外连接,其中内连接仅会显示出匹配对应上的记录信息,而外连接则还会同时显示未完全匹配上的记录信息。连接操作都是通过多表中的某一共同关联因素来连接的,如学生表中Sno和选修表中Sno则为对应匹配关联因素,二者可以借此连接起来。因内连接较为常用,故此仅演示内连接操作。

Course(课程)表:

image

SC(选修)表:

image

例(查询学生选修成绩信息)

image

7)子查询

在查询中,有时候可能会需要在一次查询的基础上再次查询,这时候前一次查询(或下层查询)称为子查询或内层查询,而后一次查询(或上层查询)称为父查询或外层查询,用于子查询的关键字有IN,NOT IN,EXISTS,NOT EXISTS。其中(NOT) IN 相当于集合中的存在或包含于的关系,用来检索父查询中记录是否存在于子查询返回的记录中,而带有(NOT) EXISTS 的子查询不返回任何数据,它只会产生逻辑真(true)或假(false)

例1(查询与‘Lisa’在同一个系学习的学生信息,即第一步查询‘Lisa’所在的系,第二步查询该系的所有学生信息)

image

例2.1(查询所有选修了1号课程的学生姓名)

image

例2.2(使用EXISTS查询与‘Lisa’在同一个系学习的学生信息)

image

8)记录联合

由于在查询时返回的结果是一些记录的集合,所以可以对多个查询语句结果进行集合操作,SQL中主要的操作有并(UNION)、交(INTERSECT)和差(EXCEPT)。这里需要注意的是,各查询的参与对象类型必须是相同的,查询结果列数也必须是相同的。但是,在MySQL中只保留了并操作,后两种功能的实现都用其他操作替换了。SQL中提供了UNIONUNION ALL两种操作,两者的区别在于UNION中包含了DISTINCT操作,即去除了重复的记录结果,而UNION ALL则会显示全部记录

例(查询’MA’系的学生及年龄不大于19岁的学生,即’MA’系学生集合与年龄不大于19岁学生集合的并集)

image

SQL语句第三个类别——DCL 语句

DCL是数据控制语言的缩写,主要是DBA管理系统对象的使用权限时用的,主要包括权限的授予和回收。由于一般开发人员很少使用该语句,这里仅浅显地进行介绍

1.权限授予

基本语法:
GRANT privilege[, privilege]…
ON object_type Object_name[,object_type Object_name]...
TO user[,user]...
[WITH GRANT OPTION];

其中privilege代表要授予的权限名,object_type Object_name表示权限作用的对象类型和名称,user表示授予权限的用户,WITH GRANT OPTION表示该授予权限的用户是否能继续向其他用户进行此权限的授予

例1(把查询Student表的权限授予给用户U1)

image

例2(把查询Student表和修改学号的权限授予给用户U2,同时U2可以继续授权给其他用户)

image

2.权限收回

基本语法:
REVOKE privilege[, privilege]…
ON object_type Object_name[,object_type Object_name]...
FROM user[,user]...[CASCADE|RESTRICT];

其语法含义与GRANT语法大体一致,后面的CASCADE|RESTRICT代表一个回收级联约束条件,CASCADE表示回收该用户权限时也将该用户授权下的其他用户权限进行回收,而RESTRICT表示若该用户下有授权其他用户权限,则拒绝回收该用户的权限

例(回收用户U2的修改学号的权限)

image

 


小结

本次SQL基础使用入门(二)主要介绍了SQL语句的后两个分类——DML和DCL,其中着重讲解并演示了数据操作语言的基本使用语法,对DCL中权限授权与回收两大操作做了浅显简单的介绍。

posted @ 2018-06-09 20:18  ChanKaion  阅读(818)  评论(0编辑  收藏  举报