上一篇:數據庫入門基礎
MySQL表的增刪查改!!!
簡單建庫建表請見蓋蓋的上一篇博客!
自己建庫建表動手運行⬇
基本操作
一、新增(CREATE)
單行數據 + 全列插入
插入兩條記錄,value_list 數量必須和定義表的列的數量及順序一致
INSERT INTO students VALUES (001, 10000, '孫悟空', '111');
INSERT INTO students VALUES (002, 10001, '唐僧', NULL);
多行數據 + 指定列插入
插入的三條記錄,value_list 數量必須和指定列數量及順序一致
INSERT INTO students (sn, name)
VALUES
(103, "賈寶玉"),
(104, "林黛玉"),
(105, "王熙鳳");
因爲其他列爲說明,都爲null。
二、查詢(Retrieve)
全列查詢
SELECT * FROM exam_result;
但是通常情況下不建議使用全列查詢,因爲:
·1. 查詢的列越多,意味着需要傳輸的數據量越大;
·2. 可能會影響到索引的使用。
指定列查詢
指定列的順序不需要按定義表的順序來
SELECT name, 英語 FROM exam_result;
查詢字段爲表達式
SELECT name, 英語, 10 FROM exam_result;
SELECT name, 英語, 英語 + 10 FROM exam_result;
SELECT name, 英語, 英語 + 語文 + 數學 FROM exam_result;
別名
爲查詢結果中的列指定別名,表示返回的結果集中,以別名作爲該列的名稱
SELECT name, 英語 + 語文 + 數學 AS 總分 FROM exam_result;
SELECT name, 英語 + 語文 + 數學 總分 FROM exam_result;
這兩種的運行結果是一樣的,只是將“英語 + 語文 + 數學”換成了“總分”。
去重DISTINCT
如果數據中有重複的數據需要刪除,就可以去重
SELECT DISTINCT 數學 FROM exam_result;
排序:ORDER BY
ASC 爲升序(從小到大)
DESC 爲降序(從大到小)
默認爲 ASC
SELECT * FROM exam_result ORDER BY (語文 + 數學 + 英語);
SELECT * FROM exam_result ORDER BY (語文 + 數學 + 英語) DESC;
注意:
·1. 沒有 ORDER BY 子句的查詢,返回的順序是未定義的,永遠不要依賴這個順序
·2. NULL 數據排序,視爲比任何值都小,升序出現在最上面,降序出現在最下面
使用表達式及別名排序
//查詢同學及總分,由高到低
SELECT name, 語文 + 英語 + 數學 FROM exam_result ORDER BY 語文 + 英語 + 數學 DESC;
SELECT name, 語文 + 英語 + 數學 total FROM exam_result ORDER BY total DESC;
可以對多個字段進行排序,排序優先級隨書寫順序
//查詢同學各門成績,依次按 數學降序,英語升序,語文升序的方式顯示
SELECT name, 數學, 英語, 語文 FROM exam_result ORDER BY 數學 DESC, 英語, 語文;
條件查詢:WHERE
注意:
·1. WHERE條件可以使用表達式,但不能使用別名。
·2. AND的優先級高於OR,在同時使用時,需要使用小括號()包裹優先執行的部分
基本查詢:
SELECT * FROM exam_result WHERE 語文 < 90;
//查詢語文成績 ( < 90 )
SELECT name, 語文, 英語 FROM exam_result WHERE chinese > english;
//查詢語文成績好於英語成績的同學
SELECT name, 語文 + 數學 + 英語 總分 FROM exam_result WHERE 語文 + 數學 + 英語 < 200;
//查詢總分在 200 分以下的同學
AND與OR:
//查詢語文成績大於80分,且英語成績大於80分的同學
SELECT * FROM exam_result WHERE 語文 > 80 and 英語 > 80; //查詢語文成績大於80分,或英語成績大於80分的同學
SELECT * FROM exam_result WHERE 語文 > 80 or 英語 > 80; //觀察AND 和 OR 的優先級:
SELECT * FROM exam_result WHERE 語文 > 80 or 數學 >70 and 英語 > 70; SELECT * FROM exam_result WHERE (語文 > 80 or 數學 >70) and 英語 > 70;
範圍查詢:
BETWEEN … AND …
//查詢語文成績在 [80, 90] 分的同學及語文成績
SELECT name, 語文 FROM exam_result WHERE 語文 BETWEEN 80 AND 90;
//使用 AND 也可以實現
SELECT name, 語文 FROM exam_result WHERE 語文 >= 80 AND 語文 <= 90;
IN
//查詢數學成績是 58 或者 59 或者 98 或者 99 分的同學及數學成績
SELECT name, 數學 FROM exam_result WHERE 數學 IN (58, 59, 98, 99);
//使用 OR 也可以實現
SELECT name, 數學 FROM exam_result WHERE 數學 = 58 OR 數學 = 59 OR 數學 = 98 OR 數學 = 99;
模糊查詢:LIKE
//% 匹配任意多個(包括 0 個)字符
SELECT name FROM exam_result WHERE name LIKE '孫%';
//匹配到孫悟空、孫權
//_ 匹配嚴格的一個任意字符
SELECT name FROM exam_result WHERE name LIKE '孫_';
//匹配到孫權
NULL 的查詢:IS [NOT] NULL
//查詢 qq_mail 已知的同學姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NOT NULL;
//查詢 qq_mail 未知的同學姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NULL;
分頁查詢:LIMIT
語法:
//起始下標爲 0
//從 0 開始,篩選 n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n; //從 s 開始,篩選 n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
//從 s 開始,篩選 n 條結果,比第二種用法更明確,建議使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
三、修改(Update)
//將孫悟空同學的數學成績變更爲 80 分
UPDATE exam_result SET math = 80 WHERE name = '孫悟空';
//將曹孟德同學的數學成績變更爲 60 分,語文成績變更爲 70 分
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';
//將總成績倒數前三的 3 位同學的數學成績加上 30 分
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT 3;
//將所有同學的語文成績更新爲原來的 2 倍
UPDATE exam_result SET chinese = chinese * 2;
四、刪除(Delete)
//刪除孫悟空同學的考試成績
DELETE FROM exam_result WHERE name = '孫悟空';
//刪除整張表數據
DELETE FROM for_delete;