zoukankan      html  css  js  c++  java
  • SQL语言分类

    SQL命令综述

            总的来说,SQL语法可以划分为几大块:


            1. 数据定义语言DDL:用于具体实现关系,以及关系附带的一些结构,如索引等;

            2. 数据查询语言DML:用于操作数据库,包括增删改查;

            3. 数据控制语言DCL:用来帮助实现数据库的存取控制;

            4. 事务控制语言TCL:用于数据库中的事务管理;

            接下来本文将对几大类的SQL进行讲解,采用回顾总结型的讲解方式,不会涉及过多细节。

    DDL

            数据定义语言DDL(Data Definition Language)的组成部分并不多,主要涉及到的关键字有:CREATE, ALTER, DROP这三个。

            1. CREATE

            用于创建数据库,创建关系表,创建视图等。需要注意的是在建表的时候除了表本身,还要定义主外键约束,以及一些附带结构,如索引等。

            2. ALTER

            用于调整数据库/表/视图的结构信息。

            3. DROP

            用于删除数据库/表/视图。要注意删除的时候必须先删除外码所在关系,然后再删除被外码参照的主码的关系。

    DML

            数据查询语言DML(Data Manipulation Language)是SQL的主体成分,SQL的编写工作绝大部分都是在这一块。该部分知识比较杂而多,故本文选择从整体角度,以经验总结的形式进行讲解,相关语法细节请读者查询有关函数手册。

            总的来说,DML有以下功能(底层项为功能所涉及关键字):

            1. 基本检索

            SELECT+WHERE+GROUP BY(聚集函数)+HAVING+ORDER BY是最常用的查询组合,要注意的是如果SELECT搭配了GROUP BY,那么GROUP BY后列也要是SELECT的一部分,这样查询结果才能清楚展示数据是按什么分组的。另一方面,如果使用了GROUP BY,那么出现在SELECT后不使用聚集函数的列必须也出现在GROUP BY里否则系统提示异常。新手常会犯这个错误,如以下代码:

           因此请意识到GROUP BY后面跟了什么列,SELECT后面就单写什么列(不使用聚合函数),出现的其他列则必须使用聚合函数。

            此外,HAVING后面跟着的约束对象必须是聚合函数列。虽然感觉是有点重复(聚合函数列写了两次),而且WHERE子句和HAVING子句中都不允许使用列别名...但若不满足这些约束,查询结果会混乱。

            2. 高级检索

                    a) 嵌套查询:嵌套查询的层数尽量不要太高,否则会影响查询效率;

                    b) 连接查询:注意区分几种JOIN的不同含义;

                    c) 集合运算:集合运算的本质在于合并多条能"相融"的SQL语句;
            3. 插入语句

            插入语句的标准形式是INSERT INTO 表名 VALUES(表内容),没有外码的关系要优先执行插入。

            4. 更新语句

            更新语句的标准形式是UPDATE 表名 SET 列值='XX' WHERE 条件。

            5. 删除语句

            删除语句的标准形式DELETE FROM 表名 WHERE 条件。注意不要和删除表的命令DROP搞混。

            6. 其他关键字

            没啥好说的。

    DCL & TCL

            数据控制语言DCL(Data Control Language)主要是管理数据库权限,负责数据的安全。最常用的是GRANT和ROVOKE命令。

            事务控制语言TCL(Transaction Control Language)则主要面向数据库的备份和恢复两大主题,常用命令为COMMIT和ROLLBACK。

    小结

            SQL的学习并不难,但是如果要在具体环境下写出高质量的SQL,则未必是一件容易的事情。不论是对于传统的关系型数据库,还是分布式仓储系统如Hive、Spark SQL,SQL的优化都可以再单独写一本书了。最好在明确了要长期使用的数据分析平台后,再深入针对性地学习专有SQL。比如选定了用Hive,那么就要狠下功夫研究怎么写SQL才能避免"数据倾斜"问题。

            最后,一个优秀的厨师,基本刀功不会差;一个卓越的数据分析师,SQL功底也不会含糊。

    自强不息,厚德载物
  • 相关阅读:
    解决springmvc报错,java.lang.IllegalArgumentException:No converter found for return value of type: class .......
    BidiMap MultiMap LazyMap
    双色球2013年统计,从网上爬虫出来的
    捡石子小游戏程序解析
    Linux常用命令--List of commands(附目录切换命令)
    格式化字符串
    有关循环
    使用python 3.x 对pythonchallenge-----8的解答过程
    使用python 3.x 对pythonchallenge-----7的解答过程
    使用python 3.x 对pythonchallenge-----6的解答过程
  • 原文地址:https://www.cnblogs.com/zhoufei2514/p/10196319.html
Copyright © 2011-2022 走看看