




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SQL是用于訪問和處理數(shù)據(jù)庫的標(biāo)準(zhǔn)的計(jì)算機(jī)語言。
什么是SQL?
?SQL指結(jié)構(gòu)化查詢語言
?SQL使我們有實(shí)力訪問數(shù)據(jù)庫
?SQL是一種ANSI的標(biāo)準(zhǔn)計(jì)算機(jī)語言編者注:ANSI,美國
國家標(biāo)準(zhǔn)化組織
SQL能做什么?
?SQL面對(duì)數(shù)據(jù)庫執(zhí)行查詢
?SQL可從數(shù)據(jù)庫取回?cái)?shù)據(jù)
?SQL可在數(shù)據(jù)庫中插入新的紀(jì)錄
?SQL可更新數(shù)據(jù)庫中的數(shù)據(jù)
?SQL可從數(shù)據(jù)庫刪除記錄
?SQL可創(chuàng)建新數(shù)據(jù)庫
?SQL可在數(shù)據(jù)庫中創(chuàng)建新表
?SQL可在數(shù)據(jù)庫中創(chuàng)建存儲(chǔ)過程
?SQL可在數(shù)據(jù)庫中創(chuàng)建視圖
?SQL可以設(shè)置表、存儲(chǔ)過程和視圖的權(quán)限
SQL是一種標(biāo)準(zhǔn)-但是…
SQL是一門ANSI的標(biāo)準(zhǔn)計(jì)算機(jī)語言,用來訪問和操作數(shù)據(jù)庫系統(tǒng)。
SQL語句用于取回和更新數(shù)據(jù)庫中的數(shù)據(jù)。SQL可與數(shù)據(jù)庫程序協(xié)同工
作,比如MSAccess>DB2>Informix、MSSQLServer、Oracle、
Sybase以和其他數(shù)據(jù)庫系統(tǒng)。
不幸地是,存在著許多不同版本的SQL語言,但是為了與ANSI標(biāo)準(zhǔn)
相兼容,它們必需以相像的方式共同地來支持一些主要的關(guān)鍵詞(比如
SELECT、UPDATE、DELETE、INSERT、WHERE等等)。
注釋:除了SQL標(biāo)準(zhǔn)之外,大部分SQL數(shù)據(jù)庫程序都擁有它們自己的
私有擴(kuò)展!
在您的網(wǎng)站中運(yùn)用SQL
要?jiǎng)?chuàng)建發(fā)布數(shù)據(jù)庫中數(shù)據(jù)的網(wǎng)站,您須要以下要素:
?RDBMS數(shù)據(jù)庫程序(比如MSAccess,SQLServer,MySQL)
?服務(wù)器端腳本語言(比如PHP或ASP)
?SQL
?HTML/CSS
RDBMS
RDBMS指的是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。
RDBMS是SQL的基礎(chǔ),同樣也是全部現(xiàn)代數(shù)據(jù)庫系統(tǒng)的基礎(chǔ),比如
MSSQLServer,IBMDB2,Oracle,MySQL以和MicrosoftAccesso
RDBMS中的數(shù)據(jù)存儲(chǔ)在被稱為表(tables)的數(shù)據(jù)庫對(duì)象中。
表是相關(guān)的數(shù)據(jù)項(xiàng)的集合,它由列和行組成。
SQL語法
數(shù)據(jù)庫表
一個(gè)數(shù)據(jù)庫通常包含一個(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ù)庫上執(zhí)行的大部分工作都由SQL語句完成。
下面的語句從表中選取LastName列的數(shù)據(jù):
SELECTLastNameFROMPersons
在本教程中,我們將為您講解各種不同的SQL語句。
重要事項(xiàng)
肯定要記住,SQL對(duì)大小寫不敏感!
SQL語句后面的分號(hào)?
某些數(shù)據(jù)庫系統(tǒng)要求在每條SQL吩咐的末端運(yùn)用分號(hào)。在我們的教程中
不運(yùn)用分號(hào)。
分號(hào)是在數(shù)據(jù)庫系統(tǒng)中分隔每條SQL語句的標(biāo)準(zhǔn)方法,這樣就可以在對(duì)
服務(wù)器的相同懇求中執(zhí)行一條以上的語句。
假如您運(yùn)用的是MSAccess和SQLServer2000,則不必在每條SQL
語句之后運(yùn)用分號(hào),不過某些數(shù)據(jù)庫軟件要求必需運(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ù)庫表中獲得數(shù)據(jù)
?UPDATE-更新數(shù)據(jù)庫表中的數(shù)據(jù)
?DELETE-從數(shù)據(jù)庫表中刪除數(shù)據(jù)
?INSERTINTO-向數(shù)據(jù)庫表中插入數(shù)據(jù)
SQL的數(shù)據(jù)定義語言(DDL)部分使我們有實(shí)力創(chuàng)建或刪除表格。我們也
可以定義索引(鍵),規(guī)定表之間的鏈接,以和施加表間的約束。
SQL中最重要的DDL語句:
.CREATEDATABASE-創(chuàng)建新數(shù)據(jù)庫
?ALTERDATABASE-修改數(shù)據(jù)庫
.CREATETABLE-創(chuàng)建新表
.ALTERTABLE-變更(變更)數(shù)據(jù)庫表
.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ù)庫表),請(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ù)庫軟件
系統(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購
本章講解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ù)庫系統(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ù)庫系統(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ù)庫中的數(shù)據(jù)時(shí),您可以運(yùn)用SQL通配符。
SQL通配符
在搜尋數(shù)據(jù)庫中的數(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ù)庫對(duì)BETWEEN...AND操作符的處現(xiàn)方式是有差
異的。某些數(shù)據(jù)庫會(huì)列出介于“Adams"和"Carter"之間的人,但不包
括"Adams"和"Carter”;某些數(shù)據(jù)庫會(huì)列出介于"Adams”和
"Carter"之間并包括"Adams"和"Carter"的人;而另一些數(shù)據(jù)庫會(huì)列
出介于"Adams”和“Carter”之間的人,包括“Adams”,但不包括
"Carter"0
所以,請(qǐng)檢查你的數(shù)據(jù)庫是如何處理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ù)庫中的表可通過鍵將彼此聯(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ù):
誰訂購了產(chǎn)品,并且他們訂購了什么產(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ù)。
假如我們希望列出全部人的定購,可以運(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)在,我們希望列出全部人的定購。
您可以運(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ù)庫中,LEFTJOIN稱為LEFTOUTERJOINo
原始的表(用在例子中的):
"Persons"表:
Id_PLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
"Orders'1表:
Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465
左連接(LEFTJOIN)實(shí)例
現(xiàn)在,我們希望列出全部的人,以和他們的定購-假如有的話。
您可以運(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ù)庫中,RIGHTJOIN稱為RIGHTOUTERJOINo
原始的表(用在例子中的):
"Persons',表:
Id_PLastNameFirstNameAddressCity
1AdamsJohnOxfordStreetLondon
2BushGeorgeFifthAvenueNewYork
3CarterThomasChanganStreetBeijing
"Orders11表:
Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465
右連接(RIGHTJOIN)實(shí)例
現(xiàn)在,我們希望列出全部的定單,以和定購它們的人-假如有的話。
您可以運(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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 分?jǐn)?shù)除法 第4課時(shí) 教學(xué)設(shè)計(jì)-2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè)
- 2025年耐高溫高效過濾器項(xiàng)目可行性研究報(bào)告
- 習(xí)作:變形記(教學(xué)設(shè)計(jì))-2024-2025學(xué)年語文六年級(jí)上冊(cè)統(tǒng)編版
- 人教版八年級(jí)歷史與社會(huì)上冊(cè)3.1秦始皇開創(chuàng)大一統(tǒng)基業(yè) 教學(xué)設(shè)計(jì)
- 2025年陶瓷筷架項(xiàng)目可行性研究報(bào)告
- 汽車機(jī)械基礎(chǔ) 第3版 第一章習(xí)題及答案
- 2025至2030年中國2-甲基戊烷數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年無級(jí)調(diào)速開關(guān)項(xiàng)目可行性研究報(bào)告
- 2025年電視/調(diào)頻發(fā)射機(jī)項(xiàng)目可行性研究報(bào)告
- 八年級(jí)語文補(bǔ)差計(jì)劃及措施
- 網(wǎng)絡(luò)營銷講義網(wǎng)絡(luò)營銷產(chǎn)品策略課件
- 《小型混凝土預(yù)制件標(biāo)準(zhǔn)化生產(chǎn)管理辦法》
- 六年級(jí)上冊(cè)英語教案-Culture 2 Going Green 第二課時(shí) 廣東開心英語
- 警察叔叔是怎樣破案的演示文稿課件
- 青年教師個(gè)人成長檔案
- 2021譯林版高中英語選擇性必修三課文翻譯
- 2022年華中科技大學(xué)博士研究生英語入學(xué)考試真題
- 《網(wǎng)店運(yùn)營與管理》整本書電子教案全套教學(xué)教案
- 打印版 《固體物理教程》課后答案王矜奉
- 中考《紅星照耀中國》各篇章練習(xí)題及答案(1-12)
- Q∕GDW 11612.43-2018 低壓電力線高速載波通信互聯(lián)互通技術(shù)規(guī)范 第4-3部分:應(yīng)用層通信協(xié)議
評(píng)論
0/150
提交評(píng)論