目錄
前言
目錄
1.基本查詢
2.表的增刪查改
1.increase
1.Create
2.Insert
3.替換
2.Retrieve
1.select列
2.where條件
3.結果查詢
3.update
4.delete
5.插入查詢結果
6.聚合函數
結語
1.基本查詢
在 MySQL 中,對錶進行基本查詢主要使用 SELECT 語句。其中會用到很多的限定條件的語句比如:where,from,distinct語句,接下來我會帶着大家從實例中學習這些語句的用法。
2.表的增刪查改
1.increase
1.Create
語法:
INSERT [INTO] table_name [(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
示例:
2.Insert
(1)單行插入 + 全列插入
(2)多行數據 + 指定列插入
(3)插入否則更新
當插入數據的時候可能某一列面臨主鍵或者唯一鍵衝突,此時可以選擇性的同步更新操作:
語法:
INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
示例:
這裏id衝突了所以插入失敗了,使用插入否則更新的語句成功插入
通過 MySQL 函數獲取受到影響的數據行數:
-- 0 row affected: 表中有衝突數據,但衝突數據的值和 update 的值相等
-- 1 row affected: 表中沒有衝突數據,數據被插入
-- 2 row affected: 表中有衝突數據,並且數據已經被更新
-- 通過 MySQL 函數獲取受到影響的數據行數
SELECT ROW_COUNT();
3.替換
(1)當主鍵或者唯一鍵沒有衝突時直接插入
(2)當主鍵或者唯一鍵如果衝突了,刪除後再插入
2.Retrieve
1.select列
(1)全列查詢
-- 通常情況下不建議使用 * 進行全列查詢:
1. 查詢的列越多,意味着需要傳輸的數據量越大;
2. 可能會影響到索引的使用。(索引待後面講解)
(2)指定列查詢
查詢的時候指定列不需要按定義表的順序查詢
(3)查詢字段為表達式
表達式包含一個字段:
表達式包含多個字段:
(4)為查詢結果指定別名
(5)結果去重distinct
有重複數據:
數學成績去重:
2.where條件
比較運算符:
|
運算符
|
説明
|
|
>, >=, <, <= |
大於,大於等於,小於,小於等於 |
|
=
|
等於,NULL 不安全,例如 NULL = NULL 的結果是 NULL
|
|
<=>
|
等於,NULL 安全,例如 NULL <=> NULL 的結果是 TRUE(1)
|
|
!=, <> |
不等於 |
|
BETWEEN a0 AND a1
|
範圍匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
|
|
IN (option, ...)
|
如果是 option 中的任意一個,返回 TRUE(1)
|
|
IS NULL |
是 NULL |
|
IS NOT NULL |
不是 NULL |
|
LIKE |
模糊匹配。 % 表示任意多個(包括 0 個)任意字符; _ 表示任意一個字符 |
邏輯運算符
|
AND |
多個條件必須都為 TRUE(1),結果才是 TRUE(1)
|
|
OR
|
任意一個條件為 TRUE(1), 結果為 TRUE(1)
|
|
NOT
|
條件為 TRUE(1),結果為 FALSE(0
|
具體案例:
-- 創建表結構
CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT ' 同學姓名 ',
chinese float DEFAULT 0.0 COMMENT ' 語文成績 ',
math float DEFAULT 0.0 COMMENT ' 數學成績 ',
english float DEFAULT 0.0 COMMENT ' 英語成績 '
);
-- 插入測試數據
INSERT INTO exam_result (name, chinese, math, english) VALUES
(' 唐三藏 ', 67, 98, 56),
(' 孫悟空 ', 87, 78, 77),
(' 豬悟能 ', 88, 98, 90),
(' 曹孟德 ', 82, 84, 67),
(' 劉玄德 ', 55, 85, 45),
(' 孫權 ', 70, 73, 78),
(' 宋公明 ', 75, 65, 30);
(1)查詢英語不及格的同學(english < 60)
(2)語文成績在 [80, 90] 分的同學及語文成績
使用and:
使用between and:
(3)數學成績是 58 或者 59 或者 98 或者 99 分的同學及數學成績
使用or:
使用In:
(4)姓孫的同學 及 孫某同學:
% 匹配任意多個(包括 0 個)任意字符:
_ 匹配嚴格的一個任意字符:
(5)語文成績好於英語成績的同學
總分在 200 分以下的同學
語文成績 > 80 並且不姓孫的同學
(8)孫某同學,否則要求總成績 > 200 並且 語文成績 < 數學成績 並且 英語成績 > 80
3.結果查詢
語法:
-- ASC 為升序(從小到大)
-- DESC 為降序(從大到小)
-- 默認為 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
注意:沒有 ORDER BY 子句的查詢,返回的順序是未定義的,永遠不要依賴這個順序
同學及數學成績,按數學成績升序顯示(ORDER BY 默認升序)
查詢同學各門成績,依次按 數學降序,英語升序,語文升序的方式顯示
查詢同學及總分,由高到低
ORDER BY 子句中可以使用列別名
查詢姓孫的同學或者姓曹的同學數學成績,結果按數學成績由高到低顯示
(5)篩選分頁結果
語法:
-- 起始下標為 0
-- 從 s 開始,篩選 n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
-- 從 0 開始,篩選 n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 從 s 開始,篩選 n 條結果,比第二種用法更明確,建議使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
建議:對未知表進行查詢時,最好加一條 LIMIT 1 ,避免因為表中數據過大,查詢全表數據導致數據庫卡死
按 id 進行分頁,每頁 3 條記錄,分別顯示 第 1 、 2 、 3 頁
第一頁
第二頁
第三頁,如果結果不足 3 個,不會有影響
3.update
語法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
(1)對查詢到的結果進行列值更新
(2)將曹孟德同學的數學成績變更為 60 分,語文成績變更為 70 分
(3)將總成績倒數前三的 3 位同學的數學成績加上 30 分
(4)將所有同學的語文成績更新為原來的 2 倍
4.delete
語法
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
(1)刪除孫悟空同學的考試成績
(2)刪除整張表
5.插入查詢結果
語法:
INSERT INTO table_name [(column [, column ...])] SELECT ...
6.聚合函數
COUNT([DISTINCT] expr) 返回查詢到的數據的 數量
SUM([DISTINCT] expr) 返回查詢到的數據的 總和,不是數字沒有意義
AVG([DISTINCT] expr) 返回查詢到的數據的 平均值,不是數字沒有意義
MAX([DISTINCT] expr) 返回查詢到的數據的 最大值,不是數字沒有意義
MIN([DISTINCT] expr) 返回查詢到的數據的 最小值,不是數字沒有意義