MySQL表的增刪查改(基本篇)

上一篇:數據庫入門基礎
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;

下一篇:MySQL表的增刪查改(提高篇)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章