SQL-入門新手教程(重要)_第1頁
SQL-入門新手教程(重要)_第2頁
SQL-入門新手教程(重要)_第3頁
SQL-入門新手教程(重要)_第4頁
SQL-入門新手教程(重要)_第5頁
已閱讀5頁,還剩156頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論