版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
SQL是用于訪問和處理數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)的計(jì)算機(jī)語言。
什么是SQL?
?SQL指結(jié)構(gòu)化查詢語言
?SQL使我們有實(shí)力訪問數(shù)據(jù)庫(kù)
?SQL是一種ANSI的標(biāo)準(zhǔn)計(jì)算機(jī)語言編者注:ANSI,美國(guó)
國(guó)家標(biāo)準(zhǔn)化組織
SQL能做什么?
?SQL面對(duì)數(shù)據(jù)庫(kù)執(zhí)行查詢
?SQL可從數(shù)據(jù)庫(kù)取回?cái)?shù)據(jù)
?SQL可在數(shù)據(jù)庫(kù)中插入新的紀(jì)錄
?SQL可更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)
?SQL可從數(shù)據(jù)庫(kù)刪除記錄
?SQL可創(chuàng)建新數(shù)據(jù)庫(kù)
?SQL可在數(shù)據(jù)庫(kù)中創(chuàng)建新表
?SQL可在數(shù)據(jù)庫(kù)中創(chuàng)建存儲(chǔ)過程
?SQL可在數(shù)據(jù)庫(kù)中創(chuàng)建視圖
?SQL可以設(shè)置表、存儲(chǔ)過程和視圖的權(quán)限
SQL是一種標(biāo)準(zhǔn)-但是…
SQL是一門ANSI的標(biāo)準(zhǔn)計(jì)算機(jī)語言,用來訪問和操作數(shù)據(jù)庫(kù)系統(tǒng)。
SQL語句用于取回和更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。SQL可與數(shù)據(jù)庫(kù)程序協(xié)同工
作,比如MSAccess>DB2>Informix、MSSQLServer、Oracle、
Sybase以和其他數(shù)據(jù)庫(kù)系統(tǒng)。
不幸地是,存在著許多不同版本的SQL語言,但是為了與ANSI標(biāo)準(zhǔn)
相兼容,它們必需以相像的方式共同地來支持一些主要的關(guān)鍵詞(比如
SELECT、UPDATE、DELETE、INSERT、WHERE等等)。
注釋:除了SQL標(biāo)準(zhǔn)之外,大部分SQL數(shù)據(jù)庫(kù)程序都擁有它們自己的
私有擴(kuò)展!
在您的網(wǎng)站中運(yùn)用SQL
要?jiǎng)?chuàng)建發(fā)布數(shù)據(jù)庫(kù)中數(shù)據(jù)的網(wǎng)站,您須要以下要素:
?RDBMS數(shù)據(jù)庫(kù)程序(比如MSAccess,SQLServer,MySQL)
?服務(wù)器端腳本語言(比如PHP或ASP)
?SQL
?HTML/CSS
RDBMS
RDBMS指的是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。
RDBMS是SQL的基礎(chǔ),同樣也是全部現(xiàn)代數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ),比如
MSSQLServer,IBMDB2,Oracle,MySQL以和MicrosoftAccesso
RDBMS中的數(shù)據(jù)存儲(chǔ)在被稱為表(tables)的數(shù)據(jù)庫(kù)對(duì)象中。
表是相關(guān)的數(shù)據(jù)項(xiàng)的集合,它由列和行組成。
SQL語法
數(shù)據(jù)庫(kù)表
一個(gè)數(shù)據(jù)庫(kù)通常包含一個(gè)或多個(gè)表。每個(gè)表由一個(gè)名字標(biāo)識(shí)(例如“客
戶”或者“訂單”)o表包含帶有數(shù)據(jù)的記錄(行)。
下面的例子是一個(gè)名為"Persons”的表:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
上面的表包含三條記錄(每一條對(duì)應(yīng)一個(gè)人)和五個(gè)列(Id、姓、名、地
址和城市)。
SQL語句
您須要在數(shù)據(jù)庫(kù)上執(zhí)行的大部分工作都由SQL語句完成。
下面的語句從表中選取LastName列的數(shù)據(jù):
SELECTLastNameFROMPersons
在本教程中,我們將為您講解各種不同的SQL語句。
重要事項(xiàng)
肯定要記住,SQL對(duì)大小寫不敏感!
SQL語句后面的分號(hào)?
某些數(shù)據(jù)庫(kù)系統(tǒng)要求在每條SQL吩咐的末端運(yùn)用分號(hào)。在我們的教程中
不運(yùn)用分號(hào)。
分號(hào)是在數(shù)據(jù)庫(kù)系統(tǒng)中分隔每條SQL語句的標(biāo)準(zhǔn)方法,這樣就可以在對(duì)
服務(wù)器的相同懇求中執(zhí)行一條以上的語句。
假如您運(yùn)用的是MSAccess和SQLServer2000,則不必在每條SQL
語句之后運(yùn)用分號(hào),不過某些數(shù)據(jù)庫(kù)軟件要求必需運(yùn)用分號(hào)。
SQLDML和DDL
可以把SQL分為兩個(gè)部分:數(shù)據(jù)操作語言(DML)和數(shù)據(jù)定義語言
(DDL)o
SQL(結(jié)構(gòu)化查詢語言)是用于執(zhí)行查詢的語法。但是SQL語言也包含用
于更新、插入和刪除記錄的語法。
查詢和更新指令構(gòu)成了SQL的DML部分:
?SELECT-從數(shù)據(jù)庫(kù)表中獲得數(shù)據(jù)
?UPDATE-更新數(shù)據(jù)庫(kù)表中的數(shù)據(jù)
?DELETE-從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù)
?INSERTINTO-向數(shù)據(jù)庫(kù)表中插入數(shù)據(jù)
SQL的數(shù)據(jù)定義語言(DDL)部分使我們有實(shí)力創(chuàng)建或刪除表格。我們也
可以定義索引(鍵),規(guī)定表之間的鏈接,以和施加表間的約束。
SQL中最重要的DDL語句:
.CREATEDATABASE-創(chuàng)建新數(shù)據(jù)庫(kù)
?ALTERDATABASE-修改數(shù)據(jù)庫(kù)
.CREATETABLE-創(chuàng)建新表
.ALTERTABLE-變更(變更)數(shù)據(jù)庫(kù)表
.DROPTABLE-刪除表
?CREATEINDEX-創(chuàng)建索引(搜尋
SQLSELECT語句
本章講解SELECT和SELECT*語句。
SQLSELECT^6j
SELECT語句用于從表中選取數(shù)據(jù)。結(jié)果被存儲(chǔ)在一個(gè)結(jié)果表中(稱
為結(jié)果集)。
SQLSELECT語法
SELECT歹ij名稱FROM表名稱
以和:
SELECT*FROM表名稱
注釋:SQL語句對(duì)大小寫不敏感。SELECT等效于select。
SQLSELECT實(shí)例
如需獲得名為“LastName”和“FirstName”的列的內(nèi)容(從名為
"Persons*,的數(shù)據(jù)庫(kù)表),請(qǐng)運(yùn)用類似這樣的SELECT語句:
SELECTLastName,FirstNameFROMPersons
"Persons”表:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
結(jié)果:
LastNameFirstName
AdamsJohn
BushGeorge
CarterThomas
SQLSELECT*實(shí)例
現(xiàn)在我們希望從"Persons"表中選取全部的列。
請(qǐng)運(yùn)用符號(hào)*取代列的名稱,就像這樣:
SELECT*FROMPersons
提示:星號(hào)(*)是選取全部列的快捷方式。
結(jié)果:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
在結(jié)果集(result-set)中導(dǎo)航
由SQL查詢程序獲得的結(jié)果被存放在一個(gè)結(jié)果集中。大多數(shù)數(shù)據(jù)庫(kù)軟件
系統(tǒng)都允許運(yùn)用編程函數(shù)在結(jié)果集中進(jìn)行導(dǎo)航,比如:
Move-To-First-RecordNGet-Record-Content、Move-To-Next-Record
寸守。
類似這些編程函數(shù)不在本教程講解之列。如需學(xué)習(xí)通過函數(shù)調(diào)用訪問數(shù)據(jù)
的學(xué)問,請(qǐng)?jiān)L問我們的ADO教程和PHP教程。
SQLSELECTDISTINCT購(gòu)
本章講解SELECTDISTINCT語句。
SQLSELECTDISTINCT勒
在表中,可能會(huì)包含重復(fù)值。這并不成問題,不過,有時(shí)您或許希望僅僅
列出不同(distinct)的值。
關(guān)鍵詞DISTINCT用于返回唯一不同的值。
語法:
SELECTDISTINCT列名稱FROM表名稱
運(yùn)用DISTINCT關(guān)鍵詞
假如要從"Company"列中選取全部的值,我們須要運(yùn)用SELECT語
句:
SELECTCompanyFROMOrders
“Orders”表:
CompanyOrderNumber
IBM3532
W3School2356
Apple4698
W3School6953
結(jié)果:
Company
IBM
W3School
Apple
W3School
請(qǐng)留意,在結(jié)果集中,W3School被列出了兩次。
如需從Company,,列中僅選取唯一不同的值,我們須要運(yùn)用SELECT
DISTINCT語句:
SELECTDISTINCTCompanyFROMOrders
結(jié)果:
Company
IBM
W3School
Apple
現(xiàn)在,在結(jié)果集中,"W3School”僅被列出了一次。
SQLWHERE子句
WHERE子句用于規(guī)定選擇的標(biāo)準(zhǔn)。
WHERE子句
如需有條件地從表中選取數(shù)據(jù),可將WHERE子句添加到SELECT語
句。
語法
SELECT列名稱FROM表名稱WHERE列運(yùn)算符值
下面的運(yùn)算符可在WHERE子句中運(yùn)用:
操作符描述
=等于
<>不等于
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某個(gè)范圍內(nèi)
LIKE搜尋某種模式
注釋:在某些版本的SQL中,操作符<>可以寫為!=。
運(yùn)用WHERE子句
假如只希望選取居住在城市“Beijing”中的人,我們須要向SELECT語
句添加WHERE子句:
SELECT*FROMPersonsWHERECity=Beijing'
Tersons"表
LastNameFirstNameAddressCityYear
AdamsJohnOxfordStreetLondon1970
BushGeorgeFifthAvenueNewYork1975
CarterThomasChanganStreetBeijing1980
GatesBillXuanwumen10Beijing1985
結(jié)果:
LastNameFirstNameAddressCityYear
CarterThomasChanganStreetBeijing1980
GatesBillXuanwumen10Beijing1985
引號(hào)的運(yùn)用
請(qǐng)留意,我們?cè)诶又械臈l件值四周運(yùn)用的是單引號(hào)。
SQL運(yùn)用單引號(hào)來環(huán)繞文本值(大部分?jǐn)?shù)據(jù)庫(kù)系統(tǒng)也接受雙引號(hào))。假
如是數(shù)值,請(qǐng)不要運(yùn)用引號(hào)。
文本值:
這是正確的:
SELECT*FROMPersonsWHEREFirstName=,Bush,
這是借誤的:
SELECT*FROMPersonsWHEREFirstName=Bush
數(shù)值:
這是正確的:
SELECT*FROMPersonsWHEREYear>1965
這是錯(cuò)誤的:
SELECT*FROMPersonsWHEREYear>'1965'
SQLAND&OR運(yùn)算符
AND和OR運(yùn)算符用于基于一個(gè)以上的條件對(duì)記錄進(jìn)行過濾。
AND和OR運(yùn)算符
AND和OR可在WHERE子語句中把兩個(gè)或多個(gè)條件結(jié)合起來。
假如第一個(gè)條件和其次個(gè)條件都成立,則AND運(yùn)算符顯示一條記錄。
假如第一個(gè)條件和其次個(gè)條件中只要有一個(gè)成立,則OR運(yùn)算符顯示一
條記錄。
原始的表(用在例子中的):
LastNameFirstNameAddressCity
AdamsJohnOxfordStreetLondon
BushGeorgeFifthAvenueNewYork
CarterThomasChanganStreetBeijing
CarterWilliamXuanwumen10Beijing
AND運(yùn)算符實(shí)例
運(yùn)用AND來顯示全部姓為"Carter-并且名為叮homas”的人:
SELECT*FROMPersonsWHEREFirstName='Thomas'AND
LastName='Carter,
結(jié)果:
LastNameFirstNameAddressCity
CarterThomasChanganStreetBeijing
OR運(yùn)算符實(shí)例
運(yùn)用OR來顯示全部姓為"Carter"或者名為"Thomas'1的人:
SELECT*FROMPersonsWHEREfirstname='Thomas'OR
lastname='Carter'
結(jié)果:
LastNameFirstNameAddressCity
CarterThomasChanganStreetBeijing
CarterWilliamXuanwumen10Beijing
結(jié)合AND和OR運(yùn)算符
我們也可以把AND和OR結(jié)合起來(運(yùn)用圓括號(hào)來組成困難的表達(dá)
式):
SELECT*FROMPersonsWHERE(FirstName='Thomas'OR
FirstName='William')
ANDLastName='Carter'
結(jié)果:
LastNameFirstNameAddressCity
CarterThomasChanganStreetBeijing
CarterWilliamXuanwumen10Beijing
SQLORDERBY子句
ORDERBY語句用于對(duì)結(jié)果集進(jìn)行排序。
ORDERBY語句
ORDERBY語句用于依據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序。
ORDERBY語句默認(rèn)依據(jù)升序?qū)τ涗涍M(jìn)行排序。
假如您希望依據(jù)降序?qū)τ涗涍M(jìn)行排序,可以運(yùn)用DESC關(guān)鍵字。
原始的表(用在例子中的):
Orders表:
CompanyOrderNumber
IBM3532
W3School2356
Apple4698
W3School6953
實(shí)例1
以字母依次顯示公司名稱:
SELECTCompany,OrderNumberFROMOrdersORDERBY
Company
結(jié)果:
CompanyOrderNumber
Apple4698
IBM3532
W3School6953
W3School2356
實(shí)例2
以字母依次顯示公司名稱(Company),并以數(shù)字依次顯示依次號(hào)
(OrderNumber):
SELECTCompany,OrderNumberFROMOrdersORDERBY
Company,OrderNumber
結(jié)果:
CompanyOrderNumber
Apple4698
IBM3532
W3School2356
W3School6953
實(shí)例3
以逆字母依次顯示公司名稱:
SELECTCompany,OrderNumberFROMOrdersORDERBY
CompanyDESC
結(jié)果:
CompanyOrderNumber
W3School6953
W3School2356
IBM3532
Apple4698
實(shí)例4
以逆字母依次顯示公司名稱,并以數(shù)字依次顯示依次號(hào):
SELECTCompany,OrderNumberFROMOrdersORDERBY
CompanyDESC,OrderNumberASC
結(jié)果:
CompanyOrderNumber
W3School2356
W3School6953
IBM3532
Apple4698
留意:在以上的結(jié)果中有兩個(gè)相等的公司名稱(W3School)。只有這一次,
在第一列中有相同的值時(shí),其次列是以升序排列的。假如第一列中有些值
為nulls時(shí),狀況也是這樣的。
SQLINSERTINTO語句
INSERTINTO語句
INSERTINTO語句用于向表格中插入新的行。
語法
INSERTINTO表名稱VALUES(值1,值2,....)
我們也可以指定所要插入數(shù)據(jù)的列:
INSERTINTOtable_name(列1,列2,…)VALUES(值1,值2,….)
插入新的行
"Persons”表:
LastNameFirstNameAddressCity
CarterThomasChanganStreetBeijing
SQL語句:
INSERTINTOPersonsVALUES('Gates','BilF,'Xuanwumen10;
,Beijing')
結(jié)果:
LastNameFirstNameAddressCity
CarterThomasChanganStreetBeijing
GatesBillXuanwumen10Beijing
在指定的列中插入數(shù)據(jù)
"Persons"表:
LastNameFirstNameAddressCity
CarterThomasChanganStreetBeijing
GatesBillXuanwumen10Beijing
SQL語句:
INSERTINTOPersons(LastName,Address)VALUES('Wilson',
'Champs-Elysees')
結(jié)果:
LastNameFirstNameAddressCity
CarterThomasChanganStreetBeijing
GatesBillXuanwumen10Beijing
WilsonChamps-Elysees
SQLUPDATE勒
Update語句
Update語句用于修改表中的數(shù)據(jù)。
語法:
UPDATE表名稱SET列名稱=新值WHERE列名稱=某值
Person:
LastNameFirstNameAddressCity
GatesBillXuanwumen10Beijing
WilsonChamps-Elysees
更新某一行中的一個(gè)列
我們?yōu)閘astname是"Wilson"的人添加firstname:
UPDATEPersonSETFirstName='Fred'WHERELastName=
,Wilson'
結(jié)果:
LastNameFirstNameAddressCity
GatesBillXuanwumen10Beijing
WilsonFredChampsElysees
更新某一行中的若干列
我們會(huì)修改地址(address),并添加城市名稱(city):
UPDATEPersonSETAddress='Zhongshan23',City='Nanjing'
WHERELastName='Wilson'
結(jié)果:
LastNameFirstNameAddressCity
GatesBillXuanwumen10Beijing
WilsonFredZhongshan23Nanjing
SQLDELETE語句
DELETE語句
DELETE語句用于刪除表中的行。
語法
DELETEFROM表名稱WHERE列名稱=值
Person:
LastNameFirstNameAddressCity
GatesBillXuanwumen10Beijing
WilsonFredZhongshan23Nanjing
刪除某行
"FredWilson*'會(huì)被刪除:
DELETEFROMPersonWHERELastName='Wilson'
結(jié)果:
LastNameFirstNameAddressCity
GatesBillXuanwumen10Beijing
刪除全部行
可以在不刪除表的狀況下刪除全部的行。這意味著表的結(jié)構(gòu)、屬性和索引
都是完整的:
DELETEFROMtable_name
或者:
DELETE*FROMtable_name
SQL高級(jí)
SQLTOP子句
TOP子句
TOP子句用于規(guī)定要返回的記錄的數(shù)目。
對(duì)于擁有數(shù)千條記錄的大型表來說,TOP子句是特別有用的。
注釋:并非全部的數(shù)據(jù)庫(kù)系統(tǒng)都支持TOP子句。
SQLServer的語法:
SELECTTOPnumber|percentcolumn_name(s)
FROMtable_name
MySQL和Oracle中的SQLSELECTTOP是等價(jià)的
MySQL語法
SELECTcolumn_name(s)
FROMtable_name
LIMITnumber
例子
SELECT*
FROMPersons
LIMIT5
Oracle語法
SELECTcolumn_name(s)
FROMtable_name
WHEREROWNUM<=number
例子
SELECT*
FROMPersons
WHEREROWNUM<=5
原始的表(用在例子中的):
Persons表:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
4ObamaBarackPennsylvaniaAvenueWashington
SQLTOP實(shí)例
現(xiàn)在,我們希望從上面的“Persons”表中選取頭兩條記錄。
我們可以運(yùn)用下面的SELECT語句:
SELECTTOP2*FROMPersons
結(jié)果:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
SQLTOPPERCENT實(shí)例
現(xiàn)在,我們希望從上面的“Persons”表中選取50%的記錄。
我們可以運(yùn)用下面的SELECT語句:
SELECTTOP50PERCENT*FROMPersons
結(jié)果:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
SQLLIKE操作符
LIKE操作符用于在WHERE子句中搜尋列中的指定模式。
LIKE操作符
LIKE操作符用于在WHERE子句中搜尋列中的指定模式。
SQLLIKE操作符語法
SELECTcolumn_name(s)
FROMtable_name
WHEREcolumn_nameLIKEpattern
原始的表(用在例子中的):
Persons表:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
LIKE操作符實(shí)例
例子1
現(xiàn)在,我們希望從上面的Persons"表中選取居住在以“N”起先的城市
里的人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERECityLIKE'N%'
提示:"%"可用于定義通配符(模式中缺少的字母)o
結(jié)果集:
IdLastNameFirstNameAddressCity
2BushGeorgeFifthAvenueNewYork
例子2
接下來,我們希望從“Persons”表中選取居住在以結(jié)尾的城市里的
人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERECityLIKE'%g'
結(jié)果集:
IdLastNameFirstNameAddressCity
3CarterThomasChanganStreetBeijing
例子3
接下來,我們希望從"Persons"表中選取居住在包含nlon"的城市里的
人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERECityLIKE'%lon%'
結(jié)果集:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
例子4
通過運(yùn)用NOT關(guān)鍵字,我們可以從Persons"表中選取居住在不包含
“Ion”的城市里的人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERECityNOTLIKE'%lon%'
結(jié)果集:
IdLastNameFirstNameAddressCity
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
SQL通配符
在搜尋數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),您可以運(yùn)用SQL通配符。
SQL通配符
在搜尋數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),SQL通配符可以替代一個(gè)或多個(gè)字符。
SQL通配符必需與LIKE運(yùn)算符一起運(yùn)用。
在SQL中,可運(yùn)用以下通配符:
通配符描述
%替代一個(gè)或多個(gè)字符
_僅替代一個(gè)字符
[charlist]字符列中的任何單一字符
[Acharlist]不在字符列中的任何單一字符
或者
[Icharlist]
原始的表(用在例子中的):
Persons表:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
運(yùn)用%通配符
例子1
現(xiàn)在,我們希望從上面的"Persons,1表中選取居住在以“Ne”起先的城
市里的人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERECityLIKE'Ne%'
結(jié)果集:
IdLastNameFirstNameAddressCity
2BushGeorgeFifthAvenueNewYork
例子2
接下來,我們希望從“Persons”表中選取居住在包含“l(fā)ond”的城市里
的人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERECityLIKE'%lond%'
結(jié)果集:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
運(yùn)用一通配符
例子1
現(xiàn)在,我們希望從上面的"Persons"表中選取名字的第一個(gè)字符之后是
”eorge”的人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHEREFirstNameLIKELeorge'
結(jié)果集:
IdLastNameFirstNameAddressCity
2BushGeorgeFifthAvenueNewYork
例子2
接下來,我們希望從“Persons”表中選取的這條記錄的姓氏以"C"開
頭,然后是一個(gè)隨意字符,然后是Mr",然后是隨意字符,然后是“er”:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERELastNameLIKE'C_r_er'
結(jié)果集:
IdLastNameFirstNameAddressCity
3CarterThomasChanganStreetBeijing
運(yùn)用[charUst]通配符
例子1
現(xiàn)在,我們希望從上面的"Persons"表中選取居住的城市以N或"L"
或開頭的人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERECityLIKE'[ALN]%'
結(jié)果集:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
例子2
現(xiàn)在,我們希望從上面的"Persons,1表中選取居住的城市不以”A”或
“L"或"N"開頭的人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERECityLIKE[!ALN]%'
結(jié)果集:
IdLastNameFirstNameAddressCity
3CarterThomasChanganStreetBeijing
SQLIN操作符
IN操作符
IN操作符允許我們?cè)赪HERE子句中規(guī)定多個(gè)值。
SQLIN語法
SELECTcolumn_name(s)
FROMtable_name
WHEREcolumn_nameIN(value1,value2,...)
原始的表(在實(shí)例中運(yùn)用:)
Persons表:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
____________
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
IN操作符實(shí)例
現(xiàn)在,我們希望從上表中選取姓氏為Adams和Carter的人:
我們可以運(yùn)用下面的SELECT語句:
SELECT*FROMPersons
WHERELastNameIN('Adams','Carter')
結(jié)果集:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
3CarterThomasChanganStreetBeijing
SQLBETWEEN操作符
BETWEEN操作符在WHERE子句中運(yùn)用,作用是選取介于兩個(gè)值之
間的數(shù)據(jù)范圍。
BETWEEN操作符
操作符BETWEEN...AND會(huì)選取介于兩個(gè)值之間的數(shù)據(jù)范圍。這些值
可以是數(shù)值、文本或者日期。
SQLBETWEEN語法
SELECTcolumn_name(s)
FROMtable_name
WHEREcolumn_name
BETWEENvalue1ANDvalue2
原始的表(在實(shí)例中運(yùn)用:)
Persons表:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
4GatesBillXuanwumen10Beijing
BETWEEN操作符實(shí)例
如需以字母依次顯示介于“Adams"(包括)和“Carter”(不包括)之間
的人,請(qǐng)運(yùn)用下面的SQL:
SELECT*FROMPersons
WHERELastName
BETWEEN'Adams'AND'Carter'
結(jié)果集:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
重要事項(xiàng):不同的數(shù)據(jù)庫(kù)對(duì)BETWEEN...AND操作符的處現(xiàn)方式是有差
異的。某些數(shù)據(jù)庫(kù)會(huì)列出介于“Adams"和"Carter"之間的人,但不包
括"Adams"和"Carter”;某些數(shù)據(jù)庫(kù)會(huì)列出介于"Adams”和
"Carter"之間并包括"Adams"和"Carter"的人;而另一些數(shù)據(jù)庫(kù)會(huì)列
出介于"Adams”和“Carter”之間的人,包括“Adams”,但不包括
"Carter"0
所以,請(qǐng)檢查你的數(shù)據(jù)庫(kù)是如何處理BETWEEN....AND操作符的!
實(shí)例2
如需運(yùn)用上面的例子顯示范圍之外的人,請(qǐng)運(yùn)用NOT操作符:
SELECT*FROMPersons
WHERELastName
NOTBETWEEN'Adams'AND'Carter'
結(jié)果集:
IdLastNameFirstNameAddressCity
3CarterThomasChanganStreetBeijing
4GatesBillXuanwumen10Beijing
SQLAHas(別名)
通過運(yùn)用SQL,可以為列名稱和表名稱指定別名(Alias)。
SQLAHas
表的SQLAUas語法
SELECTcolumn_name(s)
FROMtable_name
ASalias_name
列的SQLAHas語法
SELECTcolumn_nameASalias_name
FROMtable_name
AHas實(shí)例:運(yùn)用表名稱別名
假設(shè)我們有兩個(gè)表分別是:"Persons"和"Product_Orders"o我們分別
為它們指定別名"P"和"po"o
現(xiàn)在,我們希望列出"JohnAdams"的全部定單。
我們可以運(yùn)用下面的SELECT語句:
SELECTpo.OrderlD,p.LastName,p.FirstName
FROMPersonsASp,Product_OrdersASpo
WHEREp.LastName="Adams'
WHEREp.FirstName='John'
不運(yùn)用別名的SELECT語句:
SELECTProduct_Orders.OrderlD,Persons.LastName,
Persons.FirstName
FROMPersons,Product_Orders
WHEREPersons.LastName='Hansen'
WHEREPersons.FirstName=,Ola'
從上面兩條SELECT語句您可以看到,別名使查詢程序更易閱讀和書
寫。
Alias實(shí)例:運(yùn)用一個(gè)列名別名
表Persons:
IdLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
SQL:
SELECTLastNameASFamily,FirstNameASName
FROMPersons
結(jié)果:
FamilyName
AdamsJohn
BushGeorge
CarterThomas
SQLJOIN
SQLjoin用于依據(jù)兩個(gè)或多個(gè)表中的列之間的關(guān)系,從這些表中查詢數(shù)
據(jù)。
Join和Key
有時(shí)為了得到完整的結(jié)果,我們須要從兩個(gè)或更多的表中獲得結(jié)果。我們
就須要執(zhí)行joino
數(shù)據(jù)庫(kù)中的表可通過鍵將彼此聯(lián)系起來。主鍵(PrimaryKey)是一個(gè)列,
在這個(gè)列中的每一行的值都是唯一的。在表中,每個(gè)主鍵的值都是唯一的。
這樣做的目的是在不重復(fù)每個(gè)表中的全部數(shù)據(jù)的狀況下,把表間的數(shù)據(jù)交
叉捆綁在一起。
請(qǐng)看"Persons"表:
Id_PLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
請(qǐng)留意,"Id_P”列是Persons表中的的主鍵。這意味著沒有兩行能夠擁
有相同的Id_P。即使兩個(gè)人的姓名完全相同,Id_P也可以區(qū)分他們。
接下來請(qǐng)看"Orders',表:
Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465
請(qǐng)留意,"Id_O”列是Orders表中的的主鍵,同時(shí),"Orders”表中的
"Id_P"列用于引用"Persons"表中的人,而無需運(yùn)用他們的準(zhǔn)確姓名。
請(qǐng)留意,”Id_P”列把上面的兩個(gè)表聯(lián)系了起來。
引用兩個(gè)表
我們可以通過引用兩個(gè)表的方式,從兩個(gè)表中獲得數(shù)據(jù):
誰訂購(gòu)了產(chǎn)品,并且他們訂購(gòu)了什么產(chǎn)品?
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons,Orders
WHEREPersons.Id_P=Orders.Id_P
結(jié)果集:
LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
SQLJOIN-運(yùn)用Join
除了上面的方法,我們也可以運(yùn)用關(guān)鍵詞JOIN來從兩個(gè)表中獲得數(shù)據(jù)。
假如我們希望列出全部人的定購(gòu),可以運(yùn)用下,面的SELECT語句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
INNERJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
結(jié)果集:
LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
不同的SQLJOIN
除了我們?cè)谏厦娴睦又羞\(yùn)用的INNERJOIN(內(nèi)連接),我們還可以
其他幾種連接。
下面列出了您可以運(yùn)用的JOIN類型,以和它們之間的差異。
?JOIN:假如表中有至少一個(gè)匹配,則返回行
?LEFTJOIN:即使右表中沒有匹配,也從左表返回全部的行
.RIGHTJOIN:即使左表中沒有匹配,也從右表返回全部的行
?FULLJOIN:只要其中一個(gè)表中存在匹配,就返回行
SQLINNERJOIN關(guān)鍵字
SQLINNERJOIN關(guān)鍵字
在表中存在至少一個(gè)匹配時(shí),INNERJOIN關(guān)鍵字返回行。
INNERJOIN關(guān)鍵字語法
SELECTcolumn_name(s)
FROMtable_namel
INNERJOINtable_name2
ONtable_namel.column_name=table_name2.column_name
注釋:INNERJOIN與JOIN是相同的。
原始的表(用在例子中的):
"Persons',表:
Id_PLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
"Orders11表:
Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465
內(nèi)連接(INNERJOIN)實(shí)例
現(xiàn)在,我們希望列出全部人的定購(gòu)。
您可以運(yùn)用下面的SELECT語句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
INNERJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
結(jié)果集:
LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
INNERJOIN關(guān)鍵字在表中存在至少一個(gè)匹配時(shí)返回行。假如
"Persons"中的行在"Orders”中沒有匹配,就不會(huì)列出這些行。
SQLLEFTJOIN關(guān)鍵字
SQLLEFTJOIN關(guān)鍵字
LEFTJOIN關(guān)鍵字會(huì)從左表(table_namel)那里返回全部的行,即使
在右表(table_name2)中沒有匹配的行。
LEFTJOIN關(guān)鍵字語法
SELECTcolumn_name(s)
FROMtable_namel
LEFTJOINtable_name2
ONtable_namel.column_name=table_name2.column_name
注釋:在某些數(shù)據(jù)庫(kù)中,LEFTJOIN稱為L(zhǎng)EFTOUTERJOINo
原始的表(用在例子中的):
"Persons"表:
Id_PLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
"Orders'1表:
Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465
左連接(LEFTJOIN)實(shí)例
現(xiàn)在,我們希望列出全部的人,以和他們的定購(gòu)-假如有的話。
您可以運(yùn)用下面的SELECT語句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
LEFTJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
結(jié)果集:
LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
BushGeorge
LEFTJOIN關(guān)鍵字會(huì)從左表(Persons)那里返回全部的行,即使在右表
(Orders)中沒有匹配的行。
SQLRIGHTJOIN關(guān)鍵字
SQLRIGHTJOIN關(guān)鍵字
RIGHTJOIN關(guān)鍵字會(huì)右表(table_name2)那里返回全部的行,即使在
左表(table_namel)中沒有匹配的行。
RIGHTJOIN關(guān)鍵字語法
SELECTcolumn_name(s)
FROMtable_namel
RIGHTJOINtable_name2
ONtable_namel.column_name=table_name2.column_name
注釋:在某些數(shù)據(jù)庫(kù)中,RIGHTJOIN稱為RIGHTOUTERJOINo
原始的表(用在例子中的):
"Persons',表:
Id_PLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
"Orders11表:
Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465
右連接(RIGHTJOIN)實(shí)例
現(xiàn)在,我們希望列出全部的定單,以和定購(gòu)它們的人-假如有的話。
您可以運(yùn)用下面的SELECT語句:
SELECTPersons.LastName,Pers
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 木地板安裝合同范例
- 電源材料采購(gòu)合同范例
- 簡(jiǎn)約勞動(dòng)合同范例
- 義診合作協(xié)議合同范例
- 抖音短編劇合同范例
- 完整版100以內(nèi)加減法混合運(yùn)算4000道112
- 鐵門關(guān)職業(yè)技術(shù)學(xué)院《計(jì)算機(jī)控制技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)數(shù)學(xué)二年級(jí)第二學(xué)期口算計(jì)算共5073道題
- 小學(xué)數(shù)學(xué)二年級(jí)第二學(xué)期口算計(jì)算共5083道題
- 小學(xué)數(shù)學(xué)二年級(jí)第二學(xué)期口算計(jì)算共5093道題
- 建筑工程質(zhì)量管理體系培訓(xùn)講義
- 消防檢測(cè)應(yīng)急預(yù)案3篇
- 14S501-1 球墨鑄鐵單層井蓋及踏步施工
- 70周歲老人三力測(cè)試模擬能力考試題答案
- 外科學(xué)(1)智慧樹知到答案章節(jié)測(cè)試2023年溫州醫(yī)科大學(xué)
- 哈利波特課件完整版
- Python數(shù)據(jù)科學(xué)方法與實(shí)踐(山東聯(lián)盟)智慧樹知到答案章節(jié)測(cè)試2023年山東師范大學(xué)
- 土地增值稅稅源明細(xì)表(從事房地產(chǎn)開發(fā)的納稅人清算適用、從事房地產(chǎn)開發(fā)的納稅人按核定征收方式清算適用、納稅人整體轉(zhuǎn)讓在建工程適用)
- hsk5-成語學(xué)習(xí)知識(shí)
- 河道清理工程環(huán)境影響評(píng)價(jià)報(bào)告書
- GB/T 28712.1-2012熱交換器型式與基本參數(shù)第1部分:浮頭式熱交換器
評(píng)論
0/150
提交評(píng)論