整理部分容易忘記,且比較常用的語法
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)使用NULL
及NOT 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;