1. 程式人生 > >mysql sql知識總結

mysql sql知識總結

很快 ole ice 字符 match 是否 null mat git

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;

mysql sql知識總結