• 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功底也不会含糊。

    自强不息,厚德载物
  • 相关阅读:
    网络管理不得不知道的一些常识
    DWZ(一):框架初了解
    第三天 ThinkPHP手把手高速拼接站点(三)
    stl之list双向链表容器应用基础
    如何使用ninja编译系统编译我们的程序?
    由抓取豆瓣信息想到的網絡知識
    学习实践:使用模式,原则实现一个C++数据库訪问类
    加入新的linux系统调用
    【转】repo 的一些用法和理解-不错
    【转】ubuntu 12.04 LTS将关闭最大化最小化移动到右上角
  • 原文地址:https://www.cnblogs.com/zhoufei2514/p/10196319.html
Copyright © 2020-2023  润新知