zoukankan      html  css  js  c++  java
  • 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中权限授权与回收两大操作做了浅显简单的介绍。

  • 相关阅读:
    spock框架进行单元测试的学习与实践
    给List排序( list sort)
    SQLITE入门至精通
    SQL查询重复记录
    [转]检查本地DNS服务器是否正常工作及解决方法
    [转]HTC G11 ROOT获取权限教程
    [转]取当前日期是在一年中的第几周
    如何使用两台 NETGEAR 无线路由器进行无线中继(WDS)
    [转]string表达式运算
    [转]WM手机,关于如何让手机一直运行下去,而不进入待机
  • 原文地址:https://www.cnblogs.com/Unikfox/p/9160684.html
Copyright © 2011-2022 走看看