上節(jié)課介紹了關系數(shù)據(jù)庫的基本概念以及如何通過客戶端軟件訪問數(shù)據(jù)庫。
這節(jié)課來介紹通過SQL語句來查詢和更新數(shù)據(jù)。
什么是SQL語言
SQL是結構化查詢語言(Structured Query Language)剪芥,是一種特殊目的的編程語言羔飞,是一種數(shù)據(jù)庫查詢和程序設計語言拓瞪,用于存取數(shù)據(jù)以及查詢溶锭、更新和管理關系數(shù)據(jù)庫系統(tǒng);同時也是數(shù)據(jù)庫腳本文件的擴展名乘综。
常用的SQL語句如下:
創(chuàng)建表憎账、刪除表、查詢語句瘾带、插入記錄鼠哥、更新記錄熟菲、刪除記錄。
下面分別介紹這幾種SQL語句的語法和例子朴恳。
SQL語言是大小寫不敏感的抄罕。
注意SQL語句的數(shù)值數(shù)據(jù)類型不同,字符串需要加引號于颖,數(shù)值型不需要加引號呆贿。
創(chuàng)建表
上節(jié)課通過數(shù)據(jù)庫客戶端軟件可以在圖形化界面中創(chuàng)建了一個表,它背后的實質(zhì)還是生成一個SQL語句提交到數(shù)據(jù)庫執(zhí)行森渐。
也可以直接編寫好一個SQL語句提交執(zhí)行來創(chuàng)建一個表做入,無需通過圖形化界面的方式。
語法:
CREATE TABLE <表名>(<列名> <數(shù)據(jù)類型>[列級完整性約束條件]
[,<列名> <數(shù)據(jù)類型>[列級完整性約束條件]]…);
例子:
創(chuàng)建學生信息表:
create table studentscore (id int(11), name varchar(30),sex varchar(10),subject varchar(30),score int(11));
創(chuàng)建新聞信息表:
create table news (id int(11),title varchar(100),content varchar(300));
創(chuàng)建新聞信息表帶主鍵:
create table news(id int(11),title varchar(100),content varchar(300),primary key (id));
實驗:
打開數(shù)據(jù)庫客戶端軟件Navicat for MySQL:
雙擊數(shù)據(jù)庫連接“l(fā)ocaldb”同衣,雙擊數(shù)據(jù)庫“student”:
可以看到有一個表“studentscore”竟块,來執(zhí)行一句SQL創(chuàng)建一個表news。
點擊工具欄按鈕圖標“查詢”:
再點擊“查詢”按鈕下方的按鈕“創(chuàng)建查詢(N)”:
彈出一個“創(chuàng)建查詢”窗口耐齐,光標停留在“查詢編輯器”Tab窗口中浪秘,將創(chuàng)建SQL語句復制粘貼到這個窗口中:
點擊工具欄按鈕“運行”:
可以看到Tab窗口切換到了“信息”窗口,顯示了SQL語句運行的結果埠况,花費的時間是0.016ms耸携,說明SQL語句正確,執(zhí)行完成了辕翰。
關閉“創(chuàng)建查詢”窗口夺衍,回到主窗口,點擊左側菜單“表”喜命,此時發(fā)現(xiàn)右側并沒有出現(xiàn)新的表news沟沙。
在右側空白窗口中點擊鼠標右鍵,出現(xiàn)右鍵菜單:
點擊菜單“刷新”:
可以看到新出現(xiàn)了一個表“news”壁榕,表明剛才的SQL語句運行成功了尝胆,通過SQL語句創(chuàng)建了一個表。
SQL語句調(diào)試
有時候編寫的SQL語句不一定正確护桦,那么可以通過數(shù)據(jù)庫客戶端軟件來嘗試執(zhí)行這句SQL,發(fā)現(xiàn)錯誤或者提示之后進行修改煎娇,直到SQL語句編寫正確二庵。
來實驗一下:
打開“創(chuàng)建查詢”窗口,光標停留在“查詢編輯器”Tab窗口中缓呛,將下面這句SQL語句復制粘貼到這個窗口中:
create table studentscore (id int(11), name varchar(30),sex varchar(10),subject varchar(30),score int(11));
點擊“執(zhí)行”催享,由于表studentscore已經(jīng)存在,創(chuàng)建同名的表會出錯:
可以看到提示表已經(jīng)存在哟绊,將Tab窗口切換到“查詢編輯器”Tab窗口因妙,編輯SQL語句,修改表名為studentscore2:
再此“運行”:
可以看到運行成功了,去“刷新”:
可以看到新的表studentscore2創(chuàng)建好了攀涵。
刪除表
將剛才創(chuàng)建的studentscore2這個表刪除铣耘,可以使用刪除表SQL語句執(zhí)行。
語法:
DROP TABLE <表名>;
例子:
drop table studentscore2;
實驗:
打開“創(chuàng)建查詢”窗口以故,光標停留在“查詢編輯器”Tab窗口中蜗细,將下面這句SQL語句復制粘貼到這個窗口中:
點擊“運行”:
然后去表查看“刷新”:
可以看到表被刪除了。
查詢語句
要從表中查詢指定條件的數(shù)據(jù)記錄怒详,可以使用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語法,其它的語法請大家自己去網(wǎng)上搜索相關知識自學系冗。
例子:
檢索出表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的記錄楷兽,條件是分數(shù)范圍75-90:
select * from studentscore where score>=75 and score<=90;
檢索出表studentscore的記錄,條件是科目等于“語文”或“數(shù)學”或“英語”的:
select * from studentscore where subject in ('語文','數(shù)學','英語');
檢索出表studentscore的記錄华临,條件是姓名里面包含“張”字芯杀,并且性別等于“男”的:
select * from studentscore where name='喬峰' and sex='男';
條件表達式類似于php的條件表達式,當然一些具體細節(jié)規(guī)定不一樣雅潭。
WHERE條件表達式語法:
條件表達式一 [ and/or 條件表達式二 ] 揭厚,還可以使用括號。
等于:字段=數(shù)據(jù)
字符串模糊等于:字段 like %數(shù)據(jù)%
其它%是通配符扶供,相當于任意字符串筛圆。
大于等于:字段>=數(shù)值
其它數(shù)值比較條件判斷
等于某組值的一個:字段 in (值1,值2......)
實驗:
雙擊表studentscore椿浓,可以看到已經(jīng)存在一條記錄:
打開“創(chuàng)建查詢”窗口太援,光標停留在“查詢編輯器”Tab窗口中闽晦,將下面這句SQL語句復制粘貼到這個窗口中:
select * from studentscore where name='喬峰';
點擊“運行”:
可以看到運行結果出現(xiàn)在“結果1”Tab窗口,查詢出來了一條記錄提岔。
切換Tab窗口到“查詢編輯器”仙蛉,修改SQL語句如下:
select * from studentscore where name like '%張%';
點擊“運行”:
可以看到查詢結果沒有找到符合條件的記錄肮之。
切換最上方的窗口解虱,回到表studentscore記錄查看窗口,然后點擊向下方向鍵:
然后手工插入一條記錄铐达,姓名為張三豐:
然后振亮,點擊最下方的工具小按鈕巧还,提交,將數(shù)據(jù)保存進入數(shù)據(jù)庫坊秸。
確濒锏唬看到右下角的狀態(tài)顯示“記錄2/2”,這樣確保數(shù)據(jù)提交到數(shù)據(jù)庫了褒搔。
然后點擊最上方的窗口切換到“查詢編輯器”窗口阶牍,重新運行下列SQL語句:
select * from studentscore where name like '%張%';
點擊“運行”:
可以看到查詢結果找到了符合條件的1條記錄。
雖然表里面總共2條記錄星瘾,但是通過where條件匹配走孽,找到了1條記錄,這就是查詢語句的作用琳状。
大家可以自己手工增加更多的記錄數(shù)據(jù)磕瓷,然后實驗各種各樣的查詢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);
實驗:
打開“創(chuàng)建查詢”窗口念逞,光標停留在“查詢編輯器”Tab窗口中困食,將下面這句SQL語句復制粘貼到這個窗口中:
insert into studentscore (id,name,sex,subject,score) values (3,'段譽','男','英語',73);
點擊“運行”:
切換Tab窗口到表數(shù)據(jù)查看窗口:
點擊最下方的工具欄按鈕“刷新”:
可以看到多了一條記錄出來了。
主鍵不能重復
主鍵的作用就是定義一個表里面的代表唯一性記錄的字段翎承。
例如硕盹,一個身份信息表里面的身份證號字段可以作為主鍵,因為身份證號是唯一性的叨咖,2條記錄中不可能出現(xiàn)同一個身份證號瘩例。
例如,學生分數(shù)信息表里面的ID作為主鍵甸各,也就是不會出現(xiàn)2條記錄的ID的值是一樣的仰剿。
如果插入記錄的時候,插入的ID的值已經(jīng)在表里面某條記錄存在了痴晦,則插入會提示不成功。
打開“創(chuàng)建查詢”窗口琳彩,光標停留在“查詢編輯器”Tab窗口中誊酌,將下面這句SQL語句復制粘貼到這個窗口中:
insert into studentscore (id,name,sex,subject,score) values (3,'王語嫣','女','音樂',68);
點擊“運行”:
可以看到提示插入出錯了部凑。
更新記錄
如果一條記錄已經(jīng)存在于表當中了,則可以使用SQL語句去修改數(shù)據(jù)碧浊。
語法:
UPDATE <表名> SET 列名=值表達式[,列名=值表達式…]
[WHERE 條件表達式]
例子:
將姓名等于喬峰的所有記錄的分數(shù)全部改為100:
update studentscore set score=100 where name='喬峰';
將ID等于3的記錄的分數(shù)改為88:
update studentscore set score=88 where id=3;
將姓名包含張字并且科目為語文的分數(shù)改為68性別改為男:
update studentscore set score=68,sex='男' where name like '%張%' and subject='語文';
注意update語句可以針對復數(shù)條記錄進行更新涂邀,需要注意where條件。
滿足where條件的記錄的相應字段都會更新箱锐。
實驗:
打開“創(chuàng)建查詢”窗口比勉,光標停留在“查詢編輯器”Tab窗口中,將下面這句SQL語句復制粘貼到這個窗口中:
update studentscore set score=100 where name='喬峰';
點擊“運行”:
切換到表數(shù)據(jù)查看窗口驹止,刷新:
可以看到數(shù)據(jù)更新了浩聋。
刪除記錄
如果一條記錄已經(jīng)存在于表當中了,則可以使用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語句可以針對復數(shù)條記錄進行更新衣洁,需要注意where條件。
滿足where條件的記錄的相應字段都會更新抖仅。
實驗:
打開“創(chuàng)建查詢”窗口坊夫,光標停留在“查詢編輯器”Tab窗口中,將下面這句SQL語句復制粘貼到這個窗口中:
delete from studentscore where id=3;
點擊“運行”:
切換到表數(shù)據(jù)查看窗口撤卢,刷新:
可以看到記錄被刪除了环凿。
更多SQL語言知識
SQL語言是一門非常復雜的語言,有各種各樣的語法和規(guī)范和用法放吩,能夠?qū)崿F(xiàn)非常復雜的功能智听。
作為初學者,可以暫時不要太深入的學習屎慢,掌握好以上常用的一些語法即可瞭稼。
隨著后續(xù)課程的深入,跟隨更多的練習腻惠,可以自己去自學更多的語法規(guī)則环肘,不斷的進行實驗,就能逐漸的掌握這門語言了集灌。