zoukankan      html  css  js  c++  java
  • SQL基础教程读书笔记-1

    查询基础

    2.2 算数运算符和比较运算符

    2.2.1算数运算符

    + - * /

    需要注意NULL

    • 5 + NULL
    • 10 - NULL
    • 1 * NULL
    • 4 / NULL
    • NULL / 9
    • NULL / 0
      以上运算结果全都是NULL,实际上所有包含NULL的运算,结果肯定是NULL。

    2.2.2比较运算符

    1.

    运算符含义
    = 和~相等
    <> 和~不相等
    >= 大于等于~
    > 大于~
    < 小于~
    <= 小于等于~

    2.对字符串使用不等号时的注意事项
    字符串类型的数据原则上按照字典进行排序
    例如:
    11 > 2
    但是 '11'<'2'
    3.不能对NULL使用比较运算符
    希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符;希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL 运算符。

    2.2.3逻辑运算符

    1.SQL中的逻辑运算包含对真、假和不确定进行运算的三值逻辑。

    运算符含义
    NOT 否定某一条件
    AND 并且
    OR

    2.AND优先级高于OR,优先执行OR可以使用括号。
    3.三值逻辑中的AND和OR真值表
    AND

    PQP AND Q
    不确定 不确定
    不确定
    不确定 不确定
    不确定
    不确定 不确定 不确定

    OR

    PQP OR Q
    不确定
    不确定 不确定
    不确定
    不确定 不确定
    不确定 不确定 不确定

    3.聚合与排序

    3.1 对表进行聚合查询

    1.聚合函数(集合函数):计算之前已经将NULL排除在外。

    函数含义
    COUNT 计算表中的记录数(行数)
    SUM 计算表中数值列中数据的合计值
    AVG 计算表中数值列中数据的平均值
    MAX 求出表中任意列中数据的最大值
    MIN 求出表中任意列中数据的最小值

    2.COUNT函数的结果根据参数的不同而不同
    COUNT(*)包含NULL的数据行数
    COUNT(<列名>)NULL之外的数据行数
    3.
    MAX/MIN函数几乎适用于所有数据类型的列
    SUM/AVG只适用于数值类型的列
    4.使用聚合函数删除重复值
    COUNT( DISTINCT *)

    3.2对表进行分组

    1.GROUP BY子句

    SELECT <列名1>,<列名2>,<列名3>,...

    FROM <表明>

    GROUP BY <列名1>,<列名2>,<列名3>,...;
    聚合键中包含NULL时,在结果中会以"不确定"行(空行)的形式表现出来。
    2.与聚合函数和GROUP BY子句有关的常见错误
    常见错误①——在SELECT子句中书写了多余的列(MYSQL 支持)
    使用聚合函数时,SELECT子句只能存在以下三种元素

    • 常数
    • 聚合函数
    • GROUP BY 子句指定的列名(也就是聚合键)

    常见错误②——在GROUP BY子句中写了列的别名
    下列语句会发生执行错误:
    SELECT product_type AS pt,count(*)
    FROM product
    GROUP BY pt;
    这是因为SQL在DBMS中的执行顺序造成的——SELECT子句在GROUP BY子句之后执行。

    常见错误③——GROUP BY子句结果能排序吗
    GROUP BY 子句结果的显示是无序的。

    常见错误④——在WHERE子句中使用聚合函数
    只有SELECT子句和HAVING子句(以及ORDER BY子句)中能够使用聚合函数。

    3.3为聚合结果指定条件

    1.HAVING子句为集合(组)指定条件。
    HAVING可以使用3中要素:
    常数
    聚合函数
    GROUP BY子句中指定的列名(聚合键)

    2.相对于HAVING子句,更适合写在WHERE 子句中的条件
    聚合键所对应的条件不应写在HAVING子句当中,而应写在WHERE子句中。
    原因:
    ①:WHERE子句 = 指定行所对应的条件;
    HAVING子句 = 指定组所对应的条件
    ②:WHERE执行速度快,使用COUNT函数等对表中数据进行聚合操作时,DBMS内部会进行排序处理,尽可能减少排序的行数,才能增加处理速度。WHERE在排序前过滤,减少了排序行数。HAVING在排序之后进行过滤。

    3.4 对查询结果进行排序

    1.使用ORDER BY对查询结果进行排序。
    2.在ORDER BY 子句中列名的后面使用关键字ASC 可以进行升序排序;使用DESC关键字可以进行降序排序。
    3.ORDER BY子句中可以使用多个排序键。
    4.排序键包含NULL时,会在开头或末尾进行汇总。
    5.在ORDER BY子句中可以使用SELECT子句中定义的别名。这是因为SELECT的执行顺序:
    FROM——>WHERE——>GROUP BY ——>HAVING ——>SELECT ——>ORDER BY
    6.在ORDER BY子句中可以使用SELECT子句中未使用的列和聚合函数。

  • 相关阅读:
    C#泛型类的简单创建与使用
    线程、委托、lambda运算符的简单示例
    异步编程中使用帮助类来实现Thread.Start()的示例
    C#操作INI配置文件示例
    C#“简单加密文本器”的实现
    Java设计模式之模板模式(Template )
    java提取出一个字符串里面的Double类型数字
    阿里云服务器配置SSL证书成功开启Https(记录趟过的各种坑)
    Gson解决字段为空是报错的问题
    shiro 单点登录原理 实例
  • 原文地址:https://www.cnblogs.com/songwenjie/p/8048051.html
Copyright © 2011-2022 走看看