• SQL笔记


    SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集,所有SQL语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。

    • DML(Data Manipulation Language)数据操作语言,用于检索或者修改数据
    • DDL(Data Definition Language)数据定义语言,用于定义数据的结构, 比如 创建、修改或者删除数据库对象。
    • DCL(Data Control Language)数据控制语言,用于定义数据库用户的权限

    DML

    • SELECT
    • INSERT
    • UPDATA
    • DELETE

    DDL

    • CREATE TABLE
    • ALTER TABLE
    • DROP TABLE
    • DROP INDEX

    DCL

    • ALTER PASSWORD
    • GRANT
    • REVOKE
    • CREATE SYNONYM

    SELECT语句

    GROUP BY

    集中所有的行在一起,它包含了指定列的数据及允许聚合函数来计算一个列或者多个列。

    SELECT MAX(salary), dept FROM employee GROUP BY dept

    HAVING

    允许你为每一组指定条件,换句话说,可以根据你指定的条件来选择行。如果使用它,应该处在GROUP BY子句之后。

    SELECT dept, avg(salary) FROM emplyee GROUP BY dept HAVING avg(salary) > 20000

    ORDER BY

    ASC = Ascending order —-这个是缺省的
    DESC =Descending order
    多列进行排序,列于列之间加上逗号。

    组合条件和布尔运算符

    • AND/OR
    • IN/BETWEEN 相对应 NOT IN / NOT BETWEEN

    JOIN子句

    join允许你从两个表或者更多的表连接进行数据检索,而只需要用一个SELECT语句

    SELECT customer_info.firstname, customer_info.lastname,purchase.itme FROM customer_info INNER JOIN purchase ON
    customer_info.customer_number = purchase.customer_number
    • INNER JOIN

    生成同时匹配表A和表B的record

    • FULL OUTER JOIN

    生成表A和表B里的记录全集,包括两边都匹配的记录。如果有一边没有匹配的,缺失的这一边为null

    • left outer join

    生成表A的所有记录,包括在表B里匹配的记录。如果没有匹配的,右边将是null

    有篇很好的文章用韦恩图讲解join语句http://blog.jobbole.com/40443/,如图
    这里写图片描述

    索引

    索引允许DBMS更快地访问数据,当查询以列为索引的时候搜索行,这样查询会快很多。

    DISTINCT和排除复制

    对于一个人买多件物品的只显示一行即可

    SELECT DISTINCT SELLERID,OWNERLASTNAME, OWNERFIRSTNAME FORM ANTIQUES,ANTIQUEOWNERS WHERE SELLERID = OWNERID
    ORDERBY OWNERLASTNAME,OWNERID

    EXISTS 和 ALL

    UNION 和 外部连接

    显示多个查询的结果,组合他们的输出,使用UNION关键字。

    SELECT buyerid FROM antiqueowners UNION SELECT ownerid FROM orders

    使用UNION会进行自动复制排除,并且列数据类型匹配才能查询

    SQL语句的执行顺序

    FROM - WHERE - GROUP BY - HAVING - SELECT - DISTINCT - UNION - ORDER BY

    SELECT A.x + A.y AS z
    FROM A
    WHERE z = 10 -- z 在此处不可用,因为SELECT是最后执行的语句!

    SELECT语句规则:
    - 你仅能够使用那些能通过表引用而得来的字段;
    - 如果你有 GROUP BY 语句,你只能够使用 GROUP BY 语句后面的字段或者聚合函数;
    - 当你的语句中没有 GROUP BY 的时候,可以使用开窗函数代替聚合函数;
    - 当你的语句中没有 GROUP BY 的时候,你不能同时使用聚合函数和其它函数;
    - 有一些方法可以将普通函数封装在聚合函数中;

    集合运算( set operation)

    • DISTINCT 在映射之后对数据进行去重
    • UNION将两个子查询拼接起来并去重
    • UNION ALL将两个子查询拼接起来但不去重
    • EXCEPT 将第二个子查询的结果中从第一个子查询中去掉
    • INTERSECT 保留两个子查询都有的结果并去重
  • 相关阅读:
    hdu 1260 Tickets
    hdu 4738 Caocao's Bridges(桥的最小权值+去重)
    找规律
    C语言快速排序
    数组的初始化方法
    C语言选择排序
    副本机制
    安装完Kali的后续操作
    Bool盲注
    Python中的列表
  • 原文地址:https://www.cnblogs.com/wkyseo/p/5880876.html
Copyright © 2020-2023  润新知