上一節(jié)講了SQL基本概念及數(shù)據(jù)庫(kù)的安裝,這一節(jié)講SQL語(yǔ)句的簡(jiǎn)單用法,如何從數(shù)據(jù)庫(kù)里面查找數(shù)據(jù)。
在不同的數(shù)據(jù)庫(kù)(MySQL、Oracle、Microsoft SQL Service等)中,SQL語(yǔ)法使用起來(lái)不太一樣,但整體類似,只有個(gè)別語(yǔ)法不同。學(xué)習(xí)一種數(shù)據(jù)庫(kù)的SQL語(yǔ)法的使用,其他的也就會(huì)觸類旁通。
SQL語(yǔ)句一般分成三類
第一種是數(shù)據(jù)定義語(yǔ)言(DDL),它的操作對(duì)象是數(shù)據(jù)庫(kù)和表。包括創(chuàng)建、刪除和、修改數(shù)據(jù)庫(kù)和表的結(jié)構(gòu)。常用的關(guān)鍵字如下:
creat:創(chuàng)建數(shù)據(jù)庫(kù)和表
drop:刪除數(shù)據(jù)庫(kù)和表
alter:修改數(shù)據(jù)庫(kù)和表的結(jié)構(gòu)
說(shuō)明:關(guān)鍵字就是SQL語(yǔ)句中有特殊含義的單詞。在Navicat等客戶端中,關(guān)鍵字一般會(huì)用藍(lán)色字體高亮顯示。
第二種是數(shù)據(jù)操作語(yǔ)言(DML),可以操作表里的數(shù)據(jù)。常用的關(guān)鍵字如下:
insert:向表中插入數(shù)據(jù)
delete:刪除數(shù)據(jù)表中的數(shù)據(jù)
select:查詢表中的數(shù)據(jù)
update:修改表中的數(shù)據(jù)
第三種是數(shù)據(jù)控制語(yǔ)言(DCL),用來(lái)確認(rèn)或者取消對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行的變更。除此之外還可設(shè)定用戶對(duì)關(guān)系數(shù)據(jù)庫(kù)的操作權(quán)限。
create:確認(rèn)對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行的變更
rollback:取消對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行的變更。
crant:賦予用戶操作權(quán)限。
在哪里寫(xiě)SQL語(yǔ)句?
打開(kāi)Navicat客戶端,找到對(duì)應(yīng)的數(shù)據(jù)庫(kù),進(jìn)行如下操作
找到【查詢】,右鍵【新建查詢】,如下圖1
軟件會(huì)出現(xiàn)代碼書(shū)寫(xiě)區(qū)域,可在該區(qū)域編寫(xiě)代碼,如下圖2
寫(xiě)完代碼后,點(diǎn)擊編寫(xiě)區(qū)域上方的三角形,運(yùn)行代碼,運(yùn)行結(jié)果會(huì)在下方區(qū)域展示,如下圖3
基本查詢語(yǔ)句
SQL語(yǔ)句里面最基本的查詢語(yǔ)句之一是Select語(yǔ)句,可以說(shuō)掌握了select語(yǔ)句,就相當(dāng)于是掌握了一半SQL語(yǔ)句。select語(yǔ)句怎么用?
舉個(gè)例子,數(shù)據(jù)庫(kù)中有一張名為‘student’的表,表里面的數(shù)據(jù)如下:
現(xiàn)在,你想從表里面找出所有學(xué)號(hào)和學(xué)生的姓名,則對(duì)應(yīng)的語(yǔ)句應(yīng)該這樣寫(xiě)
select 學(xué)號(hào),姓名
from sutdent;
寫(xiě)完后,點(diǎn)擊編寫(xiě)區(qū)域上方的三角形,運(yùn)行代碼,運(yùn)行結(jié)果會(huì)在下方區(qū)域展示,展示如下為:
語(yǔ)句解析:
select 學(xué)生,性別 /*意思是你想查詢這兩列的數(shù)據(jù)*/
from student; /*意思是你從'student'這張表里面查詢數(shù)據(jù)*/
使用select from 等關(guān)鍵字開(kāi)頭的句子,有一個(gè)通用的稱呼,叫【子句】
抽象一下這個(gè)語(yǔ)句的基本用法:
select 列名1,列名2
from 表名;
書(shū)寫(xiě)規(guī)則:
1. 寫(xiě)完SQL語(yǔ)句后,要用英文分號(hào)結(jié)尾。
2. SQL語(yǔ)句不區(qū)分關(guān)鍵字的大小寫(xiě)。
3. 表明和列名也不區(qū)分大小寫(xiě),但是插入表中的數(shù)據(jù)會(huì)區(qū)分大小寫(xiě)。
4. 輸入符號(hào)的時(shí)候只能使用英文符號(hào)。
5. 列名不能夠加單引號(hào)。
6. select語(yǔ)句中列的順序與表內(nèi)列的順序沒(méi)有關(guān)系,可以依據(jù)自己的需求決定select子句中列的順序。
select語(yǔ)句的幾種延伸用法:
1.如果你不知道一張表里面有多少列,想查看全部列,可以用*代替,寫(xiě)法如下:
select *
from student;
2.如果表的列名都是英文名稱,為了方便理解,你想改成漢字,可以使用as關(guān)鍵字,寫(xiě)法如下:
select name as 姓名
from student;
這樣展示的結(jié)果列中,【name】自動(dòng)更名為【姓名】。
3.如何刪除一列內(nèi)重復(fù)的值,使用distinct
select distinct 姓名
from student;
注意事項(xiàng):
1. 如果distinct后面跟著多個(gè)列名,則每一列的重復(fù)數(shù)據(jù)都會(huì)被去重
2. distinct只能放在列名前面,不能放在其他位置。
對(duì)查詢的結(jié)果添加條件
舉個(gè)例子,這里有一張數(shù)學(xué)成績(jī)表'score',你想從表中查處成績(jī)是80分的學(xué)生,寫(xiě)法如下:
select 姓名,成績(jī)
from score
where 成績(jī) = '80';
語(yǔ)句解析:
select 姓名,成績(jī) /*選擇表中姓名和成績(jī)這兩列*/
from student; /*從'score'這張表里面選擇*/
where 成績(jī) = '80'; /*篩選出成績(jī)是80分的數(shù)據(jù)*/
注意事項(xiàng):
1. SQL語(yǔ)句的運(yùn)行順序和書(shū)寫(xiě)順序是不同的。上面的例子中,書(shū)寫(xiě)順序是1-2-3。SQL語(yǔ)句運(yùn)行順序是2-3-1。SQL語(yǔ)句先運(yùn)行from子句,找到查詢數(shù)據(jù)的表格;再運(yùn)行where子句,找到符合要求的數(shù)據(jù);最后運(yùn)行select子句,展示出符合要求的數(shù)列。
2. 為什么運(yùn)行順序和書(shū)寫(xiě)順序不同?是SQL語(yǔ)句基本規(guī)則之一,記住就好。
運(yùn)算符
如果你想對(duì)查詢出來(lái)的數(shù)據(jù)進(jìn)行計(jì)算處理,就需要用到運(yùn)算符。運(yùn)算符一般有三種:算術(shù)運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符。
算術(shù)運(yùn)算符:
常見(jiàn)的運(yùn)算符有:(+-*/)加減乘數(shù),算數(shù)運(yùn)算符只能和數(shù)值類型的列進(jìn)行計(jì)算
使用規(guī)則和數(shù)學(xué)里的使用規(guī)則一樣,要特別一下說(shuō)明兩點(diǎn):
如果有括號(hào)的,優(yōu)先計(jì)算括號(hào)里的內(nèi)容,例:(1+2)*3
運(yùn)算符與空值(null)一起計(jì)算,結(jié)果為空值。例:1+nulll=null
案例:從成績(jī)表里面(score),計(jì)算處學(xué)生成績(jī)的百分比成績(jī)。
select 學(xué)號(hào),姓名,成績(jī)/100 as 百分比成績(jī)
from scorebi;
比較運(yùn)算符
常見(jiàn)的比較運(yùn)算符如下:
案例:從學(xué)生表里面,篩選出出生日期小于1990-10-1的學(xué)生,寫(xiě)法如下:
select 姓名,出生日期
frome student
whrere 出生日期 <‘1990-10-1’;
注意事項(xiàng):
比較運(yùn)算符可以和所有類型的值進(jìn)行比較,日期類型、數(shù)值類型等。
如果是字符串類型的比較,則按照對(duì)應(yīng)字符的順序比較,例如10 < 2,因?yàn)樽址?0是1開(kāi)頭,1<2 ,所以10<2
邏輯運(yùn)算符
邏輯運(yùn)算符可以將多個(gè)查詢條件組合起來(lái),常見(jiàn)的邏輯運(yùn)算符如下:
案例1:從學(xué)生表里面,篩選出出生日期不小于1990-10-1的學(xué)生,寫(xiě)法如下:
select 姓名,出生日期
frome student
whrere not 出生日期 <‘1990-10-1';
可以看到, where not 出生日期 < ‘1990-10-1’ 的效果等同于:where not 出生日期 >= ‘1990-10-1’。所以,使用石板語(yǔ)句也能實(shí)現(xiàn)not語(yǔ)句的效果,因此簡(jiǎn)單句式中一般不適用not運(yùn)算符。在編寫(xiě)復(fù)雜SQL語(yǔ)句的時(shí)候,有時(shí)候經(jīng)常會(huì)使用not。
案例2:從學(xué)生表里面,篩選出出生日期大于1990-10-1,小于1999-10-1的學(xué)生,寫(xiě)法如下:
select 姓名,出生日期
frome student
whrere not 出生日期 >‘1990-10-1’
and 出生日期 <‘1999-10-1';
其他的運(yùn)算法的用法大同小異,可以依據(jù)上面的句子類推。
注釋的寫(xiě)法
為什么要寫(xiě)注釋?
如果之后寫(xiě)的代碼太長(zhǎng)太復(fù)雜,寫(xiě)注釋可以幫你回憶關(guān)鍵點(diǎn)。而且良好的注釋也能方便別人閱讀你的代碼。
SQL語(yǔ)句有兩種注釋的方法,一種是單行注釋,一種是多行注釋。
單行注釋寫(xiě)法(兩個(gè)橫線):-- 這是單行注釋,漢字和橫線之間要留有空格
多行注釋寫(xiě)法:/* 這是多行注釋*/
以上就是SQL簡(jiǎn)單查詢的常見(jiàn)用法,接下來(lái)將分享復(fù)雜查詢,多表查詢和一些實(shí)戰(zhàn)數(shù)據(jù)分析。歡迎持續(xù)關(guān)注,公號(hào):數(shù)據(jù)產(chǎn)品經(jīng)理之路。