zoukankan      html  css  js  c++  java
  • SQL基础学习_02_查询

    SELECT语句

    1. SELECT语句查询列(字段):

        SELECT <列名>
        FROM <表名>;

        该语句使用了两个SQL子句,SELECT子句列举了希望从表中查询出的列的名称,FROM子句指定选取出的数据的表的名称;

        如:

        SELECT shohin_id, shohin_mei, shiire_tanka
        FROM Shohin; 

        SELECT *
        FROM Shohin

        等;

    2. SELECT语句查询行(记录):

        SELECT <列名>
        FROM <表名>
        WHERE <条件表达式>;

        注意WHERE子句必须紧跟FROM子句之后,否则会发生错误;

        WHERE 子句指定选取记录满足的条件,如:

        SELECT shohin_id, shohin_mei, shiire_tanka
        FROM Shohin
        WHERE shiire_tanka = 320;

    3. AS关键字设置别名:

        使用AS显示列的别名:

        SELECT <列名> AS <别名>

        使用AS显示某一列为常数:

        SELECT <常数>  AS <列名>

        上述两个AS关键字不可以套接使用;

    4. DISTINCT关键字不显示重复行:

        SELECT DISTINCT <列名>

        DISTINCT 关键字只能用于第一个关键字之前,并且NULL也会被视为一类数据

    算术运算和比较运算

    1. SELECT语句中使用算术运算

        如:

        SELECT shohin_mei,hanbai_tanka,hanbai_tanka * 2 AS "hanbai_tanka_X2"
        FROM Shohin;

        四则运算符都可以被使用;

        任何包含对NULL的运算,其结果都是NULL,包括NULL / 0,也不会报错,而结果为NULL;

    2. WHERE子句中使用比较运算符

        在WHERE子句中使用表达式时,需要使用各种比较运算符,如:

        =                 相等

        <>               不相等

        >=               大于等于

        >                 大于

        <=               小于等于

        <                 小于

        在WHERE子句中也可以结合算术运算和比较运算,如:

        SELECT shohin_mei, hanbai_tanka, shiire_tanka
        FROM Shohin
        WHERE hanbai_tanka - shiire_tanka >= 500; 

        对字符串进行比较时,注意是按常规字符串比较方法比较(依次按编码顺序比较),尤其当使用字符串表示数字内容时,需要注意;

        NULL不能使用任何比较运算,判断是否为NULL应该用 IS NULL、IS NOT NULL

    3. 逻辑运算符

        SQL支持的逻辑运算符:AND、OR、NOT

        其中计算优先级为:NOT > AND > OR,使用小括号可以改变其优先级;

        使用逻辑运算符,可以将多个条件表达式组合起来;

        NULL在逻辑运算中的值为:UNKNOWN,在存在NULL的条件下,使用的逻辑运算为三值逻辑,

        NULL AND TRUE = NULL
        NULL AND FALSE = FALSE
        NULL AND NULL = NULL

        NULL OR TRUE = TRUE
        NULL OR FALSE = NULL
        NULL AND NULL = NULL

    聚合查询

    1. 聚合函数:

        COUNT:计算表中的记录数;

        SUM:计算表中数值列的数据总和;

        AVG:计算表中数值列的平均值;

        MAX:计算表中任意列的数据最大值;

        MIN:计算表中任何列中数据最小值;

        使用小括号(<列名>)来调用这些函数:

        SELECT COUNT(*)
        FROM Shohin;

        在COUNT函数中,如果使用*,则会将NULL也纳入计算,如果使用列名,则会将列中的NULL排除在外;

        SUM函数中,如果该列存在NULL,在计算时会直接忽略,而不是结果为NULL;

        AVG函数中,如果该列存在NULL,则在计算时忽略该行;

        MAX和MIN可以适用于任何类型的数据,包括整数、日期、字符串等等;

    2. 在聚合函数中使用DISDINCT关键字

        如果在聚合函数中,想要去除重复行,则应该将DISDINCT关键字加在列名之前(也就是函数的小括号之内)

    3. 注意点

        聚合函数只能用在SELECT子句中,WHERE子句中不能使用聚合函数

    4. 对聚合结果进行分组:

        使用GROUP BY 子句对表格进行分组:

        SELECT <列名1>,<列名2>,<列名3>, ...
        FROM <表名>
        GROUP BY <列名1>, <列名2>,<列名3>,…;

        如:

        SELECT shohin_bunrui, COUNT(*)
        FROM Shohin
        GROUP BY shohin_bunrui; 

        NULL在分组结果中会被真实展示出来;

        如果有WHERE子句,则 GROUP BY 子句应该在WHERE子句之后;

        GROUP BY子句中不能使用SELECT子句中定义的别名;

    5. 对聚合结果指定条件:

        使用HAVING子句指定分组的条件:

        SELECT <列名1>,<列名2>,<列名3>,…
        FROM <表名>
        GROUP BY <列名1>,<列名2>,<列名3>,...
        HAVING <分组结果对应的条件>;

        如:

        SELECT shohin_bunrui,  COUNT(*)
        FROM Shohin
        GROUP BY shohin_bunrui
        HAVING COUNT(*) = 2;

        HAVING 用于指定组所对应的条件,如果指定行对应的条件,应该使用WHERE(虽然用HAVING也能达到类似效果 )

    6. 对查询的结果进行排序

        使用ORDER BY子句对查询后的结果排序:

        SELECT <列名1>,<列名2>,<列名3>,…
        FROM <表名>
        ORDER BY <排序基准列1>,<排序基准列2>,...

        默认为升序排序,若要使用降序排序,则应该在ORDER BY 子句最后添加DESC关键字,如:

        SELECT shohin_id, shohin_mei, hanbai_tanka, shiire_tanka
        FROM Shohin
        ORDER BY hanbai_tanka DESC;

        如果列中包含NULL,则NULL会在列的开头或者结尾汇集显示; 

        ORDER BY子句中可以使用SELECT子句中定义的别名;

        ORDER BY子句中的列可以使用存在于表中,但不存在于SELECT子句中的列;

        ORDER BY子句可以使用聚合函数;

    顺序

    以上所有子句的书写顺序为:

    SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY

    执行顺序为:

    FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/lyon2014/p/4677623.html
Copyright © 2011-2022 走看看