0065 使用SQL語言查詢和增刪改MySQL資料庫表資料
上節課介紹了關係資料庫的基本概念以及如何通過客戶端軟體訪問資料庫。
這節課來介紹通過SQL語句來查詢和更新資料。
什麼是SQL語言
SQL是結構化查詢語言(Structured Query Language),是一種特殊目的的程式語言,是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關係資料庫系統;同時也是資料庫指令碼檔案的副檔名。
常用的SQL語句如下:
建立表、刪除表、查詢語句、插入記錄、更新記錄、刪除記錄。
下面分別介紹這幾種SQL語句的語法和例子。
SQL語言是大小寫不敏感的。
注意SQL語句的數值資料型別不同,字串需要加引號,數值型不需要加引號。
建立表
上節課通過資料庫客戶端軟體可以在圖形化介面中建立了一個表,它背後的實質還是生成一個SQL語句提交到資料庫執行。
也可以直接編寫好一個SQL語句提交執行來建立一個表,無需通過圖形化介面的方式。
語法:
CREATE TABLE <表名>(<列名> <資料型別>[列級完整性約束條件]
[,<列名> <資料型別>[列級完整性約束條件]]…);
例子:
建立學生資訊表:
create table studentscore (id int(11), name varchar(30),sex varchar(10),subject varchar(30),score int(11));
建立新聞資訊表:
create table news (id int(11),title varchar(100),content varchar(300));
建立新聞資訊錶帶主鍵:
create table news(id int(11),title varchar(100),content varchar(300),primary key (id));
實驗:
開啟資料庫客戶端軟體Navicat for MySQL:

image
雙擊資料庫連線“localdb”,雙擊資料庫“student”:

image
可以看到有一個表“studentscore”,來執行一句SQL建立一個表news。
點選工具欄按鈕圖示“查詢”:

image
再點選“查詢”按鈕下方的按鈕“建立查詢(N)”:

4-11-4.jpg
彈出一個“建立查詢”視窗,游標停留在“查詢編輯器”Tab視窗中,將建立SQL語句複製貼上到這個視窗中:

image
點選工具欄按鈕“執行”:

image
可以看到Tab視窗切換到了“資訊”視窗,顯示了SQL語句執行的結果,花費的時間是0.016ms,說明SQL語句正確,執行完成了。
關閉“建立查詢”視窗,回到主視窗,點選左側選單“表”,此時發現右側並沒有出現新的表news。
在右側空白視窗中點選滑鼠右鍵,出現右鍵選單:

image
點選選單“重新整理”:

image
可以看到新出現了一個表“news”,表明剛才的SQL語句執行成功了,通過SQL語句建立了一個表。
SQL語句除錯
有時候編寫的SQL語句不一定正確,那麼可以通過資料庫客戶端軟體來嘗試執行這句SQL,發現錯誤或者提示之後進行修改,直到SQL語句編寫正確。
來實驗一下:
開啟“建立查詢”視窗,游標停留在“查詢編輯器”Tab視窗中,將下面這句SQL語句複製貼上到這個視窗中:
create table studentscore (id int(11), name varchar(30),sex varchar(10),subject varchar(30),score int(11));

image
點選“執行”,由於表studentscore已經存在,建立同名的表會出錯:

4-11-10.jpg
可以看到提示表已經存在,將Tab視窗切換到“查詢編輯器”Tab視窗,編輯SQL語句,修改表名為studentscore2:

image
再此“執行”:

4-11-12.jpg
可以看到執行成功了,去“重新整理”:

image
可以看到新的表studentscore2建立好了。
刪除表
將剛才建立的studentscore2這個表刪除,可以使用刪除表SQL語句執行。
語法:
DROP TABLE <表名>;
例子:
drop table studentscore2;
實驗:
開啟“建立查詢”視窗,游標停留在“查詢編輯器”Tab視窗中,將下面這句SQL語句複製貼上到這個視窗中:

4-11-14.jpg
點選“執行”:

4-11-15.jpg
然後去表檢視“重新整理”:

image
可以看到表被刪除了。
查詢語句
要從表中查詢指定條件的資料記錄,可以使用SQL查詢語句。
語法:
SELECT [ALL|DISTINCT] <目標列表達式>[,<目標列表達式>]…
FROM <表名或檢視名>[,<表名或檢視名>]…
[WHERE <條件表示式>]
[GROUP BY <列名> [HAVING <條件表示式>]]
[ORDER BY <列名> [ASC|DESC]…]
SQL查詢語句的順序:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。SELECT、FROM是必須的,HAVING子句只能與GROUP BY搭配使用。
這裡只介紹最簡單的WHERE語法,其它的語法請大家自己去網上搜索相關知識自學。
例子:
檢索出表studentscore的所有記錄:
select * from studentscore;
檢索出表studentscore的所有記錄的欄位name:
select name from studentscore;
檢索出表studentscore的所有記錄的欄位name,sex,subject,score:
select name,sex,subject,score from studentscore;
檢索出表studentscore的記錄,條件是姓名為喬峰的:
select * from studentscore where name='喬峰';
檢索出表studentscore的記錄,條件是姓名裡面包含“張”字的:
select * from studentscore where name like '%張%';
檢索出表studentscore的記錄,條件是性別等於“男”的:
select * from studentscore where sex='男';
檢索出表studentscore的記錄,條件是分數範圍75-90:
select * from studentscore where score>=75 and score<=90;
檢索出表studentscore的記錄,條件是科目等於“語文”或“數學”或“英語”的:
select * from studentscore where subject in ('語文','數學','英語');
檢索出表studentscore的記錄,條件是姓名裡面包含“張”字,並且性別等於“男”的:
select * from studentscore where name='喬峰' and sex='男';
條件表示式類似於php的條件表示式,當然一些具體細節規定不一樣。
WHERE條件表示式語法:
條件表示式一 [ and/or 條件表示式二 ] ,還可以使用括號。
等於:欄位=資料
字串模糊等於:欄位 like %資料%
其它%是萬用字元,相當於任意字串。
大於等於:欄位>=數值
其它數值比較條件判斷
等於某組值的一個:欄位 in (值1,值2......)
實驗:
雙擊表studentscore,可以看到已經存在一條記錄:

image
開啟“建立查詢”視窗,游標停留在“查詢編輯器”Tab視窗中,將下面這句SQL語句複製貼上到這個視窗中:
select * from studentscore where name='喬峰';

4-11-18.jpg
點選“執行”:

image
可以看到執行結果出現在“結果1”Tab視窗,查詢出來了一條記錄。
切換Tab視窗到“查詢編輯器”,修改SQL語句如下:
select * from studentscore where name like '%張%';

4-11-20.jpg
點選“執行”:

image
可以看到查詢結果沒有找到符合條件的記錄。
切換最上方的視窗,回到表studentscore記錄檢視視窗,然後點擊向下方向鍵:

4-11-22.jpg
然後手工插入一條記錄,姓名為張三丰:

image
然後,點選最下方的工具小按鈕,提交,將資料儲存進入資料庫。

4-11-24.jpg
確保看到右下角的狀態顯示“記錄2/2”,這樣確保資料提交到資料庫了。
然後點選最上方的視窗切換到“查詢編輯器”視窗,重新執行下列SQL語句:
select * from studentscore where name like '%張%';

image
點選“執行”:

4-11-26.jpg
可以看到查詢結果找到了符合條件的1條記錄。
雖然表裡面總共2條記錄,但是通過where條件匹配,找到了1條記錄,這就是查詢語句的作用。
大家可以自己手工增加更多的記錄資料,然後實驗各種各樣的查詢SQL語句進行練習。
插入記錄
語法:
INSERT INTO <表名> [(欄位名[,欄位名]…)] VALUES (常量[,常量]…);
例子:
insert into studentscore (id,name,sex,subject,score) values (3,'段譽','男','英語',73);
或者
insert into studentscore (id,name,sex,subject,score) values (4,'王語嫣','女','音樂',68);
實驗:
開啟“建立查詢”視窗,游標停留在“查詢編輯器”Tab視窗中,將下面這句SQL語句複製貼上到這個視窗中:
insert into studentscore (id,name,sex,subject,score) values (3,'段譽','男','英語',73);

image
點選“執行”:

image
切換Tab視窗到表資料檢視視窗:

4-11-29.jpg
點選最下方的工具欄按鈕“重新整理”:

image
可以看到多了一條記錄出來了。
主鍵不能重複
主鍵的作用就是定義一個表裡面的代表唯一性記錄的欄位。
例如,一個身份資訊表裡面的身份證號欄位可以作為主鍵,因為身份證號是唯一性的,2條記錄中不可能出現同一個身份證號。
例如,學生分數資訊表裡面的ID作為主鍵,也就是不會出現2條記錄的ID的值是一樣的。
如果插入記錄的時候,插入的ID的值已經在表裡面某條記錄存在了,則插入會提示不成功。
開啟“建立查詢”視窗,游標停留在“查詢編輯器”Tab視窗中,將下面這句SQL語句複製貼上到這個視窗中:
insert into studentscore (id,name,sex,subject,score) values (3,'王語嫣','女','音樂',68);

image
點選“執行”:

4-11-32.jpg
可以看到提示插入出錯了。
更新記錄
如果一條記錄已經存在於表當中了,則可以使用SQL語句去修改資料。
語法:
UPDATE <表名> SET 列名=值表示式[,列名=值表示式…]
[WHERE 條件表示式]
例子:
將姓名等於喬峰的所有記錄的分數全部改為100:
update studentscore set score=100 where name='喬峰';
將ID等於3的記錄的分數改為88:
update studentscore set score=88 where id=3;
將姓名包含張字並且科目為語文的分數改為68性別改為男:
update studentscore set score=68,sex='男' where name like '%張%' and subject='語文';
注意update語句可以針對複數條記錄進行更新,需要注意where條件。
滿足where條件的記錄的相應欄位都會更新。
實驗:
開啟“建立查詢”視窗,游標停留在“查詢編輯器”Tab視窗中,將下面這句SQL語句複製貼上到這個視窗中:
update studentscore set score=100 where name='喬峰';

image
點選“執行”:

4-11-34.jpg
切換到表資料檢視視窗,重新整理:

image
可以看到資料更新了。
刪除記錄
如果一條記錄已經存在於表當中了,則可以使用SQL語句去刪除這條記錄。
語法:
DELETE FROM <表名> [WHERE 條件表示式]
例子:
將姓名等於喬峰的所有記錄刪除:
delete from studentscore where name='喬峰';
將ID等於3的記錄刪除:
delete from studentscore where id=3;
將姓名包含張字並且科目為語文的記錄刪除:
delete from studentscore where name like '%張%' and subject='語文';
注意update語句可以針對複數條記錄進行更新,需要注意where條件。
滿足where條件的記錄的相應欄位都會更新。
實驗:
開啟“建立查詢”視窗,游標停留在“查詢編輯器”Tab視窗中,將下面這句SQL語句複製貼上到這個視窗中:
delete from studentscore where id=3;

4-11-36.jpg
點選“執行”:

image
切換到表資料檢視視窗,重新整理:

4-11-38.jpg
可以看到記錄被刪除了。
更多SQL語言知識
SQL語言是一門非常複雜的語言,有各種各樣的語法和規範和用法,能夠實現非常複雜的功能。
作為初學者,可以暫時不要太深入的學習,掌握好以上常用的一些語法即可。
隨著後續課程的深入,跟隨更多的練習,可以自己去自學更多的語法規則,不斷的進行實驗,就能逐漸的掌握這門語言了。