整理SQL語法

Huangy遠發表於2018-01-06

整理部分容易忘記,且比較常用的語法

1、關於NULL,這裡之所以先說NULL,因為在開發中遇到不少坑。下面羅列幾個需要注意的點,如果還有其他坑,後面遇到會繼續補齊
(1)=!=不能用於NULL的篩選。舉個例子,假如有一個sql查詢根據A列進行條件查詢,A列含有NULL值,那麼使用=!=這兩種邏輯判斷不能篩選出A欄位為NULL的行。
如圖:圖片描述
上圖中,第4行記錄的user_sex欄位為NULL,假設使用查詢語句
select user_id from user_info where user_sex != -1;,是不會篩選出第4行記錄,使用=同理。結果如圖:
圖片描述
(2)使用NULLNOT NULL的篩選,使用is

2、left join on 左連線
(1)LEFT JOIN 關鍵字會從左表 (table_name1) 那裡返回所有的行。在右表 (table_name2) 中沒有匹配的行,則右表的所有欄位顯示為NULL。
(2)left join on where:在左連線的基礎上,進行where條件篩選,如果篩選條件的欄位的值含有NULL,將不會被篩選出來。如果想全部篩選出來,可以使用增加條件or A is null,注意,這裡使用or進行條件的連線。
(3)right join on同理,因此不做累述

3、inner join on 內連線、等值連線
(1)只返回兩個表中聯結欄位相等的行。也就是說,比如兩張表中都有滿足連線條件的值,才能夠被篩選出來,如果其中某一行在另外一張表找不到不匹配的行,那麼這一行就不會顯示出來。

4、on duplicate key update:
(1)解釋:

檢視 UNIQUE索引或PRIMARY KEY 對應的行是否存在,存在則更新(執行on duplicate key update後面的語句),不存在則插入新行。

(2)例項:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
// 這裡a是主鍵,檢視a=1的行是否存在,存在則更新,否則插入

5、desc倒序、asc正序(預設)

6、limit m,n
(1)解釋:從m+1開始,取n條記錄

(2)使用場景:分頁

7、where、group by、having執行次序:
(1)where是對FROM指定的資料物件(基本表或者檢視)進行過濾,選擇滿足條件的元組。如果後面接著group,則對where篩選出來的資料進行分組,having則是對分組以後的分組進行過濾。

8、儲存過程:
(1)宣告變數、迴圈:

DELIMITER ;;
CREATE PROCEDURE `students_count3`()
BEGIN

    declare num int;
    set num = 1;
    
    while num <= 1000000 do
    
    select count(1) from user_info;
    
    SET num = num + 1;
    end while;
    
END;;
DELIMITER ;

call students_count3();

9、檢視執行時間:
(1)select @@profiling; :檢視是否開啟
(2)set profiling=1; : 開啟
(3)show profiles; : 檢視之前sql語句執行的時間

10、索引:
(1)新增普通索引: alter table table_name add index index_name(column)
(2)新增唯一索引:alter table table_name add unique index_name(column)

11、增加欄位:
alter table table_name add field_name field_type;

12、刪除欄位:
alter table table_name drop column field_name;

13、更改值:
update user_info set user_sex = `-1` where user_id = 1;

參考:
https://www.cnblogs.com/Turin…

相關文章