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

  • 相关阅读:
    Python菜鸟之路:Django 序列化数据
    Python菜鸟之路:Django 数据验证之钩子和Form表单验证
    Python菜鸟之路:Django 路由补充1:FBV和CBV
    Python菜鸟之路:Django 文件上传的几种方式
    Python菜鸟之路:Django 分页
    Python菜鸟之路:Django 信号
    Python菜鸟之路:Django 缓存
    《将博客搬至CSDN》
    Java基础语法
    Java基础语法
  • 原文地址:https://www.cnblogs.com/lyon2014/p/4677623.html
Copyright © 2011-2022 走看看