本節(jié)目標(biāo):
CRUD : Create, Retrieve,Update,Delete
新增數(shù)據(jù)
查詢數(shù)據(jù)
修改數(shù)據(jù)
刪除數(shù)據(jù)
??CRUD
-
注釋:在SQL中可以使用“–空格+描述”來(lái)表示注釋說(shuō)明
-
CRUD 即增加(Create)、查詢(Retrieve)、更新(Update)、刪除(Delete)四個(gè)單詞的首字母縮寫
?????新增(Create)
語(yǔ)法格式:
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
創(chuàng)建案例如下:
-- 創(chuàng)建一張學(xué)生表
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT,
sn INT comment '學(xué)號(hào)',
name VARCHAR(20) comment '姓名',
qq_mail VARCHAR(20) comment 'QQ郵箱'
);
??單行數(shù)據(jù) + 全列插入
代碼如下:
-- 插入兩條記錄,value_list 數(shù)量必須和定義表的列的數(shù)量及順序一致
INSERT INTO student VALUES (100, 10000, '唐三藏', NULL);
INSERT INTO student VALUES (101, 10001, '孫悟空', '11111');
結(jié)果如下:
??多行數(shù)據(jù) + 指定列插入
代碼如下:
-- 插入兩條記錄,value_list 數(shù)量必須和指定列數(shù)量及順序一致
INSERT INTO student (id, sn, name) VALUES
(102, 20001, '曹孟德'),
(103, 20002, '孫仲謀');
結(jié)果如下:
?????查詢(Retrieve)
語(yǔ)法格式:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
創(chuàng)建案例如下:
-- 創(chuàng)建考試成績(jī)表
DROP TABLE IF EXISTS exam_result;
CREATE TABLE exam_result (
id INT,
name VARCHAR(20),
chinese DECIMAL(3,1),
math DECIMAL(3,1),
english DECIMAL(3,1)
);
-- 插入測(cè)試數(shù)據(jù)
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孫悟空', 87.5, 78, 77),
(3,'豬悟能', 88, 98.5, 90),
(4,'曹孟德', 82, 84, 67),
(5,'劉玄德', 55.5, 85, 45),
(6,'孫權(quán)', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);
案例展示:
??全列查詢
語(yǔ)法如下:
-- 通常情況下不建議使用 * 進(jìn)行全列查詢
-- 1. 查詢的列越多,意味著需要傳輸?shù)臄?shù)據(jù)量越大;
-- 2. 可能會(huì)影響到索引的使用。(索引待后面課程講解)
SELECT * FROM exam_result;
使用及展示:
??指定列查詢
語(yǔ)法如下:
-- 指定列的順序不需要按定義表的順序來(lái)
SELECT id, name, english FROM exam_result;
使用及展示:
??查詢字段為表達(dá)式
語(yǔ)法如下:
-- 表達(dá)式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表達(dá)式包含一個(gè)字段
SELECT id, name, english + 10 FROM exam_result;
-- 表達(dá)式包含多個(gè)字段
SELECT id, name, chinese + math + english FROM exam_result;
使用及結(jié)果展示:
??別名
為查詢結(jié)果中的列指定別名,表示返回的結(jié)果集中,以別名作為該列的名稱
語(yǔ)法:
SELECT column [AS] alias_name [...] FROM table_name;
使用及展示如下:
??去重:DISTINCT
使用DISTINCT關(guān)鍵字對(duì)某列數(shù)據(jù)進(jìn)行去重:
使用語(yǔ)法如下:
SELECT DISTINCT math FROM exam_result;
??排序:ORDER BY
語(yǔ)法格式:
-- ASC 為升序(從小到大)
-- DESC 為降序(從大到?。?-- 默認(rèn)為 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
注意事項(xiàng)及使用:
-
沒(méi)有 ORDER BY 子句的查詢,返回的順序是未定義的,永遠(yuǎn)不要依賴這個(gè)順序
-
NULL 數(shù)據(jù)排序,視為比任何值都小,升序出現(xiàn)在最上面,降序出現(xiàn)在最下面
-- 查詢同學(xué)姓名和 qq_mail,按 qq_mail 排序顯示
SELECT name, qq_mail FROM student ORDER BY qq_mail;
SELECT name, qq_mail FROM student ORDER BY qq_mail DESC;
結(jié)果展示:
3. 使用表達(dá)式及別名排序
-- 查詢同學(xué)及總分,由高到低
SELECT name, chinese + english + math FROM exam_result
ORDER BY chinese + english + math DESC;
SELECT name, chinese + english + math total FROM exam_result
ORDER BY total DESC;
使用及展示:
4. 可以對(duì)多個(gè)字段進(jìn)行排序,排序優(yōu)先級(jí)隨書寫順序
-- 查詢同學(xué)各門成績(jī),依次按 數(shù)學(xué)降序,英語(yǔ)升序,語(yǔ)文升序的方式顯示
SELECT name, math, english, chinese FROM exam_result
ORDER BY math DESC, english, chinese;
使用及展示:
??條件查詢:WHERE
比較運(yùn)算符:
邏輯運(yùn)算符:
注意事項(xiàng):
-
WHERE條件可以使用表達(dá)式,但不能使用別名。
-
AND的優(yōu)先級(jí)高于OR,在同時(shí)使用時(shí),需要使用小括號(hào)()包裹優(yōu)先執(zhí)行的部分案例
??基本查詢
語(yǔ)法如下:
-- 查詢英語(yǔ)不及格的同學(xué)及英語(yǔ)成績(jī) ( < 60 )
SELECT name, english FROM exam_result WHERE english < 60;
-- 查詢語(yǔ)文成績(jī)好于英語(yǔ)成績(jī)的同學(xué)
SELECT name, chinese, english FROM exam_result WHERE chinese > english;
-- 查詢總分在 200 分以下的同學(xué)
SELECT name, chinese + math + english 總分 FROM exam_result
WHERE chinese + math + english < 200;
使用及展示如下:
??AND與OR
代碼如下:
-- 查詢語(yǔ)文成績(jī)大于80分,且英語(yǔ)成績(jī)大于80分的同學(xué)
SELECT * FROM exam_result WHERE chinese > 80 and english > 80;
-- 查詢語(yǔ)文成績(jī)大于80分,或英語(yǔ)成績(jī)大于80分的同學(xué)
SELECT * FROM exam_result WHERE chinese > 80 or english > 80;
-- 觀察AND 和 OR 的優(yōu)先級(jí):
SELECT * FROM exam_result WHERE chinese > 80 or math>70 and english > 70;
SELECT * FROM exam_result WHERE (chinese > 80 or math>70) and english > 70;
使用及展示:
??范圍查詢
- BETWEEN … AND …
-- 查詢語(yǔ)文成績(jī)?cè)?[80, 90] 分的同學(xué)及語(yǔ)文成績(jī)
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
-- 使用 AND 也可以實(shí)現(xiàn)
SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese
<= 90;
使用及展示:
- IN
-- 查詢數(shù)學(xué)成績(jī)是 58 或者 59 或者 98 或者 99 分的同學(xué)及數(shù)學(xué)成績(jī)
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
-- 使用 OR 也可以實(shí)現(xiàn)
SELECT name, math FROM exam_result WHERE math = 58 OR math = 59 OR math
= 98 OR math = 99;
使用及展示:
??模糊查詢:LIKE
代碼如下:
-- % 匹配任意多個(gè)(包括 0 個(gè))字符
SELECT name FROM exam_result WHERE name LIKE '孫%';-- 匹配到孫悟空、孫權(quán)
-- _ 匹配嚴(yán)格的一個(gè)任意字符
SELECT name FROM exam_result WHERE name LIKE '孫_';-- 匹配到孫權(quán)
使用及展示:
??NULL 的查詢:IS [NOT] NULL
代碼如下:
-- 查詢 qq_mail 已知的同學(xué)姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NOT NULL;
-- 查詢 qq_mail 未知的同學(xué)姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NULL;
使用及展示:
??分頁(yè)查詢:LIMIT
語(yǔ)法格式如下:
-- 起始下標(biāo)為 0
-- 從 0 開始,篩選 n 條結(jié)果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 從 s 開始,篩選 n 條結(jié)果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 從 s 開始,篩選 n 條結(jié)果,比第二種用法更明確,建議使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
案例舉例:
按 id 進(jìn)行分頁(yè),每頁(yè) 3 條記錄,分別顯示 第 1、2、3 頁(yè)
使用代碼如下:
-- 第 1 頁(yè)
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3
OFFSET 0;
-- 第 2 頁(yè)
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3
OFFSET 3;
-- 第 3 頁(yè),如果結(jié)果不足 3 個(gè),不會(huì)有影響
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3
OFFSET 6;
實(shí)用結(jié)果展示:
?????修改(Update)
語(yǔ)法格式:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
案例舉例:
-- 將孫悟空同學(xué)的數(shù)學(xué)成績(jī)變更為 80 分
UPDATE exam_result SET math = 80 WHERE name = '孫悟空';
-- 將曹孟德同學(xué)的數(shù)學(xué)成績(jī)變更為 60 分,語(yǔ)文成績(jī)變更為 70 分
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';
-- 將總成績(jī)倒數(shù)前三的 3 位同學(xué)的數(shù)學(xué)成績(jī)加上 30 分
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT
3;
-- 將所有同學(xué)的語(yǔ)文成績(jī)更新為原來(lái)的 2 倍
UPDATE exam_result SET chinese = chinese * 2;
?????刪除(Delete)
語(yǔ)法格式:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
案例舉例:
-- 刪除孫悟空同學(xué)的考試成績(jī)
DELETE FROM exam_result WHERE name = '孫悟空';
-- 刪除整張表數(shù)據(jù)
-- 準(zhǔn)備測(cè)試表
DROP TABLE IF EXISTS for_delete;
CREATE TABLE for_delete (
id INT,
name VARCHAR(20)
);
-- 插入測(cè)試數(shù)據(jù)
INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
-- 刪除整表數(shù)據(jù)
DELETE FROM for_delete;
刪除單個(gè)成績(jī):
刪除表:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-725263.html
??內(nèi)容重點(diǎn)總結(jié)
- 新增
-- 單行插入
insert into 表(字段1, ..., 字段N) values (value1, ..., value N);
-- 多行插入
insert into 表(字段1, ..., 字段N) values
(value1, ...),
(value2, ...),
(value3, ...);
- 查詢
-- 全列查詢
select * from 表;
-- 指定列查詢
select 字段1,字段2... from 表;
-- 查詢表達(dá)式字段
select 字段1+100,字段2+字段3 from 表;
-- 別名
select 字段1 別名1, 字段2 別名2 from 表;
-- 去重DISTINCT
select distinct 字段 from 表;
-- 排序ORDER BY
select * from 表 order by 排序字段;
-- 條件查詢WHERE:
-- (1)比較運(yùn)算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR
(8)NOT
select * from 表 where 條件;
- 修改
update 表 set 字段1=value1, 字段2=value2... where 條件;
- 刪除
delete from 表 where 條件;
?總結(jié)
關(guān)于《【MySQL】 MySQL表的增刪改查(基礎(chǔ))》就講解到這兒,感謝大家的支持,歡迎各位留言交流以及批評(píng)指正,如果文章對(duì)您有幫助或者覺(jué)得作者寫的還不錯(cuò)可以點(diǎn)一下關(guān)注,點(diǎn)贊,收藏支持一下!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-725263.html
到了這里,關(guān)于【MySQL】 MySQL表的增刪改查(基礎(chǔ))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!