美文网首页
数据库笔记-SQL查询&过滤

数据库笔记-SQL查询&过滤

作者: adi0229 | 来源:发表于2020-01-23 15:43 被阅读0次

    基础查询

    以极客时间专栏《SQL必知必会》的王者荣耀表格为例。

    SELECT语句

    检索单个列

    查询语句:

    SELECT name
    FROM heros
    

    结果:

    检索多个列

    查询语句:

    SELECT name, hp_max 
    FROM heros
    

    检索多个列

    查询语句:

    image.png

    检索所有列

    查询语句:

    SELECT *
    FROM heros
    

    注:生产条件下,不推荐查询所有列名,最好列出所需列名,减轻数据库的负荷,提升性能。

    检索不同的行

    去重

    查询语句:

    SELECT DISTINCT role_main
    FROM heros
    

    限制结果

    查询语句:

    SELECT NAME,hp_max FROM heros LIMIT 5
    

    查询语句:

    SELECT NAME,hp_max FROM heros
    LIMIT 5,6
    

    查询排序

    ORDER语句

    按照一列排序

    查询语句:

    SELECT NAME,hp_max,hp_growth FROM heros
    ORDER BY hp_growth
    LIMIT 5
    

    结果:


    按照多列排序

    查询语句:

    SELECT NAME,hp_max,hp_growth,hp_start FROM heros
    ORDER BY hp_start,hp_max
    LIMIT 5
    

    指定排序方向

    查询语句:

    SELECT NAME,hp_max,hp_growth,hp_start FROM heros
    ORDER BY hp_max DESC
    LIMIT 5
    

    结果:


    查询语句:

    SELECT name ,hp_max,hp_growth,hp_start FROM heros
    ORDER BY hp_max DESC, hp_growth 
    LIMIT 5
    

    结果:


    查询过滤

    WHERE语句

    操作符 说明
    = 等于
    < 小于
    > 大于
    <> != 不等于
    <= !> 小于等于
    >= !< 大于等于
    BETWEEN 在两个值之间
    IS NULL 为 NULL 值

    检查单个值

    查询语句:

    SELECT name ,role_main, hp_max,hp_growth,hp_start
    FROM heros
    WHERE hp_max > 8000
    ORDER BY hp_max DESC 
    LIMIT 5
    

    结果:


    匹配检查

    查询语句:

    SELECT name ,role_main, hp_max,hp_growth,hp_start
    FROM heros
    WHERE role_main = '战士'
    ORDER BY hp_max DESC 
    LIMIT 5
    

    结果:


    不匹配检查

    查询语句:

    SELECT name ,role_main, hp_max,hp_growth,hp_start
    FROM heros
    WHERE role_main <> '坦克'
    ORDER BY hp_max DESC 
    LIMIT 5
    

    结果:


    范围值检查

    查询语句:

    SELECT name ,role_main, hp_max,hp_growth,hp_start
    FROM heros
    WHERE hp_max BETWEEN 7500 AND 8000
    ORDER BY hp_max DESC 
    

    结果:


    空值检查

    查询语句:

    SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
    FROM heros
    WHERE role_assist IS NULL
    ORDER BY hp_max DESC 
    LIMIT 5
    

    结果:


    组合WHERE子句

    AND 操作符

    查询语句:

    SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
    FROM heros
    WHERE role_assist IS NULL AND hp_growth >380
    ORDER BY hp_max DESC 
    

    OR操作符

    查询语句:

    SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
    FROM heros
    WHERE role_main = '射手' OR role_main = '法师'
    ORDER BY hp_max DESC 
    LIMIT 10
    

    结果:


    IN操作符

    查询语句:

    SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
    FROM heros
    WHERE role_main IN ('射手','法师','刺客')
    ORDER BY hp_max DESC 
    LIMIT 10
    

    结果:


    NOT操作符

    查询语句:

    SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
    FROM heros
    WHERE role_main NOT IN ('射手','法师','刺客')
    ORDER BY hp_max DESC 
    LIMIT 10
    

    结果:


    计算次序

    SELECT的执行顺序:

    SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
    

    优先级:

    FROM > WHERE > GROUP BY > HAVING > SELECT 的字段 > DISTINCT > ORDER BY > LIMIT
    

    示例:

    SELECT DISTINCT player_id, player_name, count(*) as num # 顺序 5
    FROM player JOIN team ON player.team_id = team.team_id # 顺序 1
    WHERE height > 1.80 # 顺序 2
    GROUP BY player.team_id # 顺序 3
    HAVING num > 2 # 顺序 4
    ORDER BY num DESC # 顺序 6
    LIMIT 2 # 顺序 7
    

    Ref:

    • 《MySQL必知必会》(Ben Forts)
    • 极客时间《SQL必知必会》

    相关文章

      网友评论

          本文标题:数据库笔记-SQL查询&过滤

          本文链接:https://www.haomeiwen.com/subject/yhenzctx.html