• mysql sql知识总结


    SQL知识总结:

    检索不同的行:

    SELECT DISTINCT VEND_ID FROM PRODUCTS;
    

    DISTINCT 应用于所有的列

    ===================

    限制结果:

    SELECT PROD_NAME FROM PRODUCT LIMIT 5,5;
    

    从0开始

    ====================

    ORDER BY

    SELECT * FROM a ORDER BY b,c;
    

    降序 DESC

    ====================

    过滤

    SELECT a FROM b WHERE c <> d;
    

    空值检查

    SELECT a FROM b WHERE c IS NULL;
    

    组合过滤先后顺序
    处理 and 优先于 or

    SELECT a FROM b WHERE c OR d AND e;
    SELECT a FROM b WHERE (c OR d) AND e;
    

    IN 的使用:

    SELECT a FROM b WHERE c IN(x, y, Z) ORDER BY d;
    

    IN 的优点:
    清楚直观 次序管理 执行更快 动态创建

    =====================

    通配符

    %:出现任意次,可为0

    SELECT a FROM b WHERE a LIKE 'jet%'
    

    _: 单次

    通识符置于首部搜寻最慢!

    ======================

    sql正则表达式

    对比 LIKE 和 REGEXP
    LIKE匹配整个列,REGEXP匹配出现在列值的

    | : OR

    [] : 匹配特定字符

    ^ : NOT

    . : 任意字符

    \ : 特殊字符前导

    * : {0,}

    • : {1,}

    ? : {0,1}

    {n, m} 匹配数目的范围

    SELECT a FROM b WHERE a REGEXP '[[:digit:]]{4}'
    ORDER BY a;
    

    定位符

    ^ : 文本的开始

    $ : 文本的结尾

    [[:<:]] : 词的开始

    [[:>:]] : 词的结尾

    ================
    字段

    拼接:Concat()

    SELECT Concat (vend_name, '(', vend_country, ')')
    AS vend_title
    FROM vendors 
    ORDER BY vend_name;
    

    注*:RTime()函数去掉右边所有的空格。

    AS: 别名

    Soundex() : 将任何文本串转换为描述其语音表示的字母数字模式的算法。

    ========================

    汇总

    聚集函数

    GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
    如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。

    WITH ROLLUP 可以得到每个分组以及每个分组汇总级别的值。

    HAVING : 过滤分组 数据分组后过滤
    WHERE : 过滤行 数据分组前过滤

    SELECT a, COUNT(*) AS b 
    FROM c
    GROUP BY a
    HAVING COUNT(*) >= 2;
    
    SELECT a, COUNT(*) AS b
    FROM c
    WHERE d >= 10
    GROUP BY a
    HAVING COUNT(*) >= 2;
    

    ==========================

    分组

    ORDER BY 与 GROUP BY

    ORDER BY : 排序输出 任意列都可输出 不一定需要

    GROUP BY : 分组(不保证有序) 必须使用选择列表达式 与聚集函数一起使用,必须使用

    ===========================

    子查询 由里及外 耗时

    相关子查询

    主要用于测试 注意性能

    ============================

    联结

    笛卡儿积 由没有连接条件的表关系返回,检查出的行的数目为第一个表中的行数乘以第二个表中的行数

    内部连接(等值连接)

    SELECT a, b, c FROM Table1 
    INNER JOIN Table2 
    ON Table1.a =  Table2.a; 
    

    ==============================

    高级联结

    自联结

    SELECT P1.PROD_ID, P1.PROD.NAME 
    FROM products AS P1, products AS P2
    WHERE P1.VEND_ID = P2.VEND_ID
    AND P2_PROD_ID = 'DTNTR';
    

    自然联结(自己完成)

    标准的联结返回所有数据,甚至相同的列多次出现。自然联结排除多次出现,使每个列只返回一次。

    外部联结

    SELECT Table1.a, Table2.b 
    FROM Table1 OUTER JOIN Table2
    ON Table1.c = Table2.c;
    

    外部联结还包括没有关联行的行。RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表.

    UNION 多个表SELECt相同的列或项

    UNION 自动去除重复的行
    UNION ALL 全部,不去重

    ====================================

    全文本搜索 对结果排序

    MyISAM 全文本搜索
    InnoDB 无

    创建全文本搜索
    FULLTEXT(note_text);

    导入数据 => 修改表 => 定义FULLTEXT

    Match() 指定被搜索列
    Against() 指定被搜索表达式

    查询拓展
    1.基本全文本搜索,找出所有匹配行
    2.检查匹配行,找出所有有用的词
    3.再次进行全文搜索,使用原先的条件外加有用的词

    SELECT  a FROM Table 
    WHERE MATCH(a) AGAINST ('c' WITH QUERY EXPANSION);
    

    布尔模式 (50%)
    IN BOOLEAN MODE

    =====================================

    低效插入

    INSERT LOW_PRIORITY INTO

    单条插入多值

    INSERT SELECT

    =======================================

    更新UPDATE
    UPDATE
    SET
    WHERE

    INGORE 忽略错误

    DELETE 删除(行, 而不是表本身)
    TRUNCATE TABLE :删除表并新建

    只允许一个AUTO_INCREMENT列
    AUTO_INCREMENT 可被覆盖 后面的值由打断值增加

    DEFUALT 指定默认值

    =======================================

    引擎:
    InnoDB : 事务处理引擎,不支持全文搜索
    MEMORY : 功能类似于MyISAM,数据存储在内存,速度很快
    MyISAM : 性能极高的引擎,支持全文本搜索,但不支持事务处理

    引擎可以混用

    更改表结构

    ALTER TABLE a
    ADD x CHAR(20);
    

    ==========================================

    视图

    CERATE VIEW ...
    
    

    视图更新

    ==========================================

    存储过程
    调用(执行存储过程):

    CALL productpricing(@pricelow,
                        @pricehigh,
                        @priceaverage);
    

    创建存储过程

    CREATE PROCEDURE productpricing()
    BEGIN
        SELECT AVG(PROD_PRICE) AS PRICEAVERAGE
        FROM PRODUCTS
    END;
    

    DELIMITER : 新结束符

    删除存储过程:

    DROP PROCEDURE PRODUCTPRICING;
    

    ======================================

    游标 : 被语句检索出来的结果集

    创建游标:

    CREATE PROCEDURE a
    BEGIN
        DECLARE b CURSOR
        FOR
        SELECT c FROM Table1;
    END;
    

    打开关闭游标:

    OPEN cursorA;
    CLOSE cursorA;
    

    使用FETCH语句从游标中检索

    设置循环条件:

    DECLARE CONTINUE HANDLE FOR SQLSTATE '02000' SET done=1;
    

    ======================================

    触发器

    响应某个语句:(前后)
    DELETE
    INSERT
    UPDATE

    表中唯一,每表最多六个

    CREATE TRIGGER a AFTER INSERT ON b
    FOR EACH ROW SELECT 'Product added';
    

    删除触发器:

    DROP TRIGGER a;
    

    INSERT => new表

    DELETE => old表

    UPDATE : old表(只读) new表(可写)

    触发器不支持存储过程

    =======================================

    事务处理
    用来维护数据库完整性,成批操作要么全部执行,要么完全不执行

    事务 回退 提交 保留点
    不回退SELECT 隐含事务关闭

    事务开始

    START TRANSACTION;
    

    回退:

    ROLLBACK;
    

    是否自动提交

    SET autocommit=0;
    
  • 相关阅读:
    bzoj-4433 小凸玩矩阵(二分图,二分+匈牙利)
    HDU-2255 奔小康赚大钱(二分图、km算法、模板)
    python queue和生产者和消费者模型
    python Events
    python递归锁与信号量
    python 线程锁
    python GIL锁
    python 守护进程
    python 继承式多线程
    python 多线程效果演示
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/10798104.html
Copyright © 2020-2023  润新知