• MySQL查询操作


    查询执行路径中的组件:查询缓存、解析器、预处理器、优化器、查询执行引擎、存储引擎
    SELECT语句的执行流程:
    FROM Clause --> WHERE Clause --> GROUP BY --> HAVING Clause --> ORDER BY --> SELECT --> LIMIT
    单表查询:
    SELECT
    [ALL | DISTINCT | DISTINCTROW ]
    [HIGH_PRIORITY]
    [MAX_STATEMENT_TIME = N]
    [STRAIGHT_JOIN]
    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
    [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr [, select_expr ...]
    [FROM table_references
    [PARTITION partition_list]
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}
    [ASC | DESC], ... [WITH ROLLUP]]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | position}
    [ASC | DESC], ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [FOR UPDATE | LOCK IN SHARE MODE]]
    select DISTINCT Host,User from user;
    DISTINCT:数据去重
    SQL_CACHE:显示指定存储查询结果于缓存之中
    SQL_NO_CACHE:显示查询结果不予缓存
    query_cache_type的值为'ON'时,查询缓存功能打开;
    SELECT的结果符合缓存条件及会缓存。否则,不予缓存
    如果显示指定SQL_NO_CACHE,不予缓存
    query_cache_type的值为'DEMAND'时,查询缓存功能按需进行;
    显示指定SQL_CACHE的SELECT语句才会缓存;其他均不予缓存
    缓存命中次数查看:
    SHOW GLOBAL STATUS LIKE 'Qcache%';
    Qcache_hits命中次数
    查询总数:
    SHOW GLOBAL STATUS LIKE 'Com_se%';
    Com_select查询总数
    字段别名显示:
    col1 AS alias1,col2 AS alias2, ...
    WHERE子句:指明过滤条件以实现"选择"的功能
    过滤条件:布尔型表达式
    算数操作符:+ - * / %
    比较操作符:= != <> <=> > >= < <=
    BETWEEN min_num AND max_num
    IN(element1, element2, ...)
    IS NULL
    IN NOT NULL
    LIKE:
    %:任意长度的任意字符;
    _:任意单个字符;
    RLIKE或REGEXP:匹配字符串可用正则表达式书写模式
    逻辑操作符:
    NOT
    AND
    OR
    XOR
    GROUP:根据指定的条件把查询结果进行"分组"以用于做"聚合"运算;
    avg() max() min() count() sum()
    SELECT avg(rank),sex FROM base_member_info GROUP BY sex;
    HAVING:对分组聚合运算后的结果指定过滤条件
    SELECT avg(rank) as fansik,sex FROM base_member_info GROUP BY sex HAVING fansik > 60;
    ORDER BY:根据指定的字段对查询的结果进行排序
    升序:ASC
    降序:DESC
    SELECT avg(rank) as fansik,sex FROM base_member_info GROUP BY sex HAVING fansik > 60 ORDER BY fansik DESC;
    LIMIT [[offset,]row_count]:offset为偏移量,如果只有一个值,那默认表示行数
    SELECT weixin_nickname,rank,sex FROM base_member_info ORDER BY rank DESC LIMIT 180,20;
    对查询结果中的数据请求施加"锁":
    读锁(共享锁):LOCK IN SHARE MODE
    写锁(独占锁、排它锁):FOR UPDATE

    多表查询:
    交叉连接:笛卡尔乘积:
    表1有8行数据,表2有8行数据
    select * from 表1,表2;
    结果会有64行数据,这就是笛卡尔乘积
    内连接:
    等值连接:让表之间的字段以"等值"建立连接关系
    select 表1.name,表2.name from 表1,表2 where 表1.id=表2.id
    不等值连接
    自然连接
    自连接
    外连接:
    左外连接:
    FROM 表1 LEFT JOIN 表2 on 表1.col=表2.col
    右外连接
    FROM 表1 RIGHT JOIN 表2 on 表1.col=表2.col

    子查询:在查询语句嵌套这查询语句(MySQL对于子查询的优化比较查,建议尽量少的使用)
    基于某语句的查询结果再次进行查询
    用在WHERE子句中的子查询
    (1)用于比较表达式中的子查询;子查询仅能返回单个值
    SELECT rank,sex FROM base_member_info WHERE rank < (SELECT avg(rank) FROM base_member_info);
    (2)用于IN中的子查询:子查询应该单键(一个字段)查询并返回一个或多个值
    SELECT nickname,rank,sex FROM base_member_info WHERE rank IN (SELECT rank FROM base_member);
    (3)用于EXISTS
    用于FROM子句中的子查询
    使用格式:SELECT tb_alias.col1,... FROM (SELECT clause) AS tb_alias WHERE Clause;
    联合查询:UNION(使用EXPLAIN会看到有三个查询语句)
    SELECT Name,Age FROM students UNION SELECT Name,Age FROM teacher
  • 相关阅读:
    安卓自动化测试添加用例执行回放
    【十二省2019】异或粽子
    【BZOJ4260】Codechef REBXOR
    【JSOI2015】字符串树
    【HAOI2017】供给侧改革
    【NOI2018】你的名字
    【十二省2019】字符串问题
    【LOJ#6041】事情的相似度
    【SP8093】JZPGYZ
    【BZOJ1396】识别子串
  • 原文地址:https://www.cnblogs.com/fansik/p/7744662.html
Copyright © 2020-2023  润新知