且不說(shuō)你是否正在從事編程方面的工作或者不打算學(xué)習(xí)SQL,可事實(shí)上幾乎每一位開(kāi)發(fā)者最終都會(huì)遭遇它。你多半還用不著負(fù)責(zé)創(chuàng)建和維持某個(gè)數(shù)據(jù)庫(kù),但你怎么著也該知道以下的一些有關(guān)的SQL知識(shí)。
我為那些感興趣的開(kāi)發(fā)者或者能從數(shù)據(jù)庫(kù)操作中得益的讀者撰寫(xiě)了這篇關(guān)于基本SQL語(yǔ)法的概述性文章。本文主要討論基本的數(shù)據(jù)操作查詢(xún),后續(xù)的文章還會(huì)繼續(xù)討論如何修改數(shù)據(jù)庫(kù)自身以及更高級(jí)的查詢(xún)概念。
SQL數(shù)據(jù)庫(kù)是怎么回事?
SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言)就是負(fù)責(zé)與ANSI維護(hù)的數(shù)據(jù)庫(kù)交互的標(biāo)準(zhǔn)。最新的版本是SQL-99,還有一個(gè)新標(biāo)準(zhǔn)SQL-200n尚處于制定過(guò)程中。大多數(shù)的數(shù)據(jù)庫(kù)都至少遵守ANSI-92標(biāo)準(zhǔn)的部分子集。不過(guò),目前對(duì)最新標(biāo)準(zhǔn)的有效性還存在一些爭(zhēng)論。專(zhuān)有數(shù)據(jù)庫(kù)制造商根據(jù)這些標(biāo)準(zhǔn)開(kāi)發(fā)自己的產(chǎn)品,同時(shí)制定出自己特有的數(shù)據(jù)庫(kù)存儲(chǔ)操作新概念。幾乎各種不同的數(shù)據(jù)庫(kù)都包含了自己特有的語(yǔ)法集合,只是通常很類(lèi)似ANSI標(biāo)準(zhǔn)。在大多數(shù)情況下,盡管有一些數(shù)據(jù)庫(kù)實(shí)例基于特定的擴(kuò)展語(yǔ)法會(huì)因數(shù)據(jù)庫(kù)的不同而產(chǎn)生不同的結(jié)果,但總的說(shuō)來(lái),這些新加的語(yǔ)法不過(guò)是對(duì)原有標(biāo)準(zhǔn)的擴(kuò)充。如果數(shù)據(jù)庫(kù)操作并沒(méi)有得到你希望的結(jié)果,那么你不妨事先讀一讀數(shù)據(jù)庫(kù)制造商提供的產(chǎn)品說(shuō)明。
假如到目前為止你頭回遭遇SQL語(yǔ)言,那么你怎么也得先理解一些基本的SQL概念。我盡量把這些基本知識(shí)闡述得簡(jiǎn)明扼要,如果你對(duì)那些數(shù)據(jù)庫(kù)術(shù)語(yǔ)還能忍受,你盡可跳到下一節(jié),此外你還可以把自己的問(wèn)題提交給以下的討論區(qū)。
籠統(tǒng)地說(shuō),“SQL數(shù)據(jù)庫(kù)”其實(shí)就是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDMS)通俗的叫法。對(duì)某些系統(tǒng)來(lái)說(shuō),“數(shù)據(jù)庫(kù)”也指一組數(shù)據(jù)表、數(shù)據(jù)以及相互區(qū)分但結(jié)構(gòu)類(lèi)似的配置信息。在這種情況下,每一SQL數(shù)據(jù)庫(kù)的安裝都可能由若干數(shù)據(jù)庫(kù)組成。在有些系統(tǒng)上,這種數(shù)據(jù)庫(kù)則指的是表空間。
數(shù)據(jù)表是一種包含多行數(shù)據(jù)的數(shù)據(jù)庫(kù)構(gòu)造,這種數(shù)據(jù)庫(kù)構(gòu)造由命名的列組成。通常數(shù)據(jù)表構(gòu)造為包含關(guān)系信息,同一數(shù)據(jù)庫(kù)或表空間以?xún)?nèi)可以創(chuàng)建若干數(shù)據(jù)表。
表內(nèi)的列保存某一種類(lèi)型的數(shù)據(jù)而且應(yīng)根據(jù)其保存數(shù)據(jù)的內(nèi)容得以命名。例如,被稱(chēng)為“LastName”的列就應(yīng)該在每一行包含姓氏條目。正是這一前提的存在才能讓關(guān)系數(shù)據(jù)庫(kù)查詢(xún)返回一致的結(jié)果。
字段(field)指的是某一行某一列對(duì)應(yīng)的數(shù)據(jù)(或保存數(shù)據(jù)的地方)。另外,數(shù)據(jù)集合(data set)則指的是多行多列的數(shù)據(jù),而且數(shù)據(jù)集合通常說(shuō)明你的數(shù)據(jù)庫(kù)或數(shù)據(jù)表內(nèi)的全部數(shù)據(jù)。結(jié)果集合(result set)就是從數(shù)據(jù)庫(kù)查詢(xún)返回的數(shù)據(jù);它能夠描述從單一字段到數(shù)據(jù)庫(kù)內(nèi)全部數(shù)據(jù)這一范圍內(nèi)的全部信息。
數(shù)據(jù)庫(kù)查詢(xún)就是發(fā)送給數(shù)據(jù)庫(kù)的SQL指令,這些指令向數(shù)據(jù)庫(kù)請(qǐng)求某種施加在數(shù)據(jù)集合或數(shù)據(jù)庫(kù)上的功能。
現(xiàn)在我們就來(lái)看看基本的數(shù)據(jù)庫(kù)查詢(xún),這些查詢(xún)主要涉及到對(duì)數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)的操作。在本文中,所有的例子都采用了標(biāo)準(zhǔn)SQL語(yǔ)言,而且這些基本功能可以轉(zhuǎn)換為應(yīng)用在幾乎各種環(huán)境下。
數(shù)據(jù)查詢(xún)類(lèi)型
SQL語(yǔ)言中的數(shù)據(jù)查詢(xún)分為4種基本類(lèi)型:
SELECT:這條語(yǔ)句要求數(shù)據(jù)庫(kù)返回指定結(jié)果的數(shù)據(jù)集合;你可以用這一語(yǔ)句檢索數(shù)據(jù)庫(kù)中保存的信息。
INSERT:這條語(yǔ)句用來(lái)給數(shù)據(jù)表增加新一行數(shù)據(jù)。
DELETE:該語(yǔ)句從你的數(shù)據(jù)庫(kù)中刪除若干行數(shù)據(jù)。
UPDATE:該語(yǔ)句修改數(shù)據(jù)庫(kù)內(nèi)的現(xiàn)有數(shù)據(jù)。
以上的這些語(yǔ)句都有各種各樣的限定詞和函數(shù)供你用來(lái)定義有關(guān)的數(shù)據(jù)集合,同時(shí)控制查詢(xún)返回的結(jié)果集合。SELECT語(yǔ)句的選項(xiàng)最多。有許多種組合SELECT的查詢(xún)選項(xiàng),例如JOIN和UNION等。不過(guò)就我們目前來(lái)說(shuō),本文主要還是關(guān)注基本用途。
用SELECT語(yǔ)句檢索保存的信息
為了獲得數(shù)據(jù)庫(kù)中保存的信息就必須采用SELECT語(yǔ)句。其基本功能限制在針對(duì)單一數(shù)據(jù)表操作,當(dāng)然,其他范圍的構(gòu)造也是有的。為了返回特定列所對(duì)應(yīng)的所有數(shù)據(jù)行,你可以使用以下語(yǔ)句:
SELECT column1, column2 FROM table_name;
另外,使用通配符“*”可以從表中選出所有的列:
SELECT * FROM table_name;
你要愿意自己編碼分析以上返回的結(jié)果當(dāng)然也沒(méi)問(wèn)題,不過(guò)你完全可以采用方便的WHERE子句限制返回的結(jié)果集合,該子句可以讓你為選擇數(shù)據(jù)定義某些條件。以下查詢(xún)就會(huì)返回“column1”數(shù)值等于3的所以數(shù)據(jù)行:
SELECT * FROM table_name WHERE column1 = 3;
除了“=”(等于)條件之外你還可以用到下列條件運(yùn)算符:
表A
= 等于
<> 不等于
> 大于
< 小于
>= 大于或等于
<= 小于或等于
SQL 條件語(yǔ)句
我為那些感興趣的開(kāi)發(fā)者或者能從數(shù)據(jù)庫(kù)操作中得益的讀者撰寫(xiě)了這篇關(guān)于基本SQL語(yǔ)法的概述性文章。本文主要討論基本的數(shù)據(jù)操作查詢(xún),后續(xù)的文章還會(huì)繼續(xù)討論如何修改數(shù)據(jù)庫(kù)自身以及更高級(jí)的查詢(xún)概念。
SQL數(shù)據(jù)庫(kù)是怎么回事?
SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言)就是負(fù)責(zé)與ANSI維護(hù)的數(shù)據(jù)庫(kù)交互的標(biāo)準(zhǔn)。最新的版本是SQL-99,還有一個(gè)新標(biāo)準(zhǔn)SQL-200n尚處于制定過(guò)程中。大多數(shù)的數(shù)據(jù)庫(kù)都至少遵守ANSI-92標(biāo)準(zhǔn)的部分子集。不過(guò),目前對(duì)最新標(biāo)準(zhǔn)的有效性還存在一些爭(zhēng)論。專(zhuān)有數(shù)據(jù)庫(kù)制造商根據(jù)這些標(biāo)準(zhǔn)開(kāi)發(fā)自己的產(chǎn)品,同時(shí)制定出自己特有的數(shù)據(jù)庫(kù)存儲(chǔ)操作新概念。幾乎各種不同的數(shù)據(jù)庫(kù)都包含了自己特有的語(yǔ)法集合,只是通常很類(lèi)似ANSI標(biāo)準(zhǔn)。在大多數(shù)情況下,盡管有一些數(shù)據(jù)庫(kù)實(shí)例基于特定的擴(kuò)展語(yǔ)法會(huì)因數(shù)據(jù)庫(kù)的不同而產(chǎn)生不同的結(jié)果,但總的說(shuō)來(lái),這些新加的語(yǔ)法不過(guò)是對(duì)原有標(biāo)準(zhǔn)的擴(kuò)充。如果數(shù)據(jù)庫(kù)操作并沒(méi)有得到你希望的結(jié)果,那么你不妨事先讀一讀數(shù)據(jù)庫(kù)制造商提供的產(chǎn)品說(shuō)明。
假如到目前為止你頭回遭遇SQL語(yǔ)言,那么你怎么也得先理解一些基本的SQL概念。我盡量把這些基本知識(shí)闡述得簡(jiǎn)明扼要,如果你對(duì)那些數(shù)據(jù)庫(kù)術(shù)語(yǔ)還能忍受,你盡可跳到下一節(jié),此外你還可以把自己的問(wèn)題提交給以下的討論區(qū)。
籠統(tǒng)地說(shuō),“SQL數(shù)據(jù)庫(kù)”其實(shí)就是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDMS)通俗的叫法。對(duì)某些系統(tǒng)來(lái)說(shuō),“數(shù)據(jù)庫(kù)”也指一組數(shù)據(jù)表、數(shù)據(jù)以及相互區(qū)分但結(jié)構(gòu)類(lèi)似的配置信息。在這種情況下,每一SQL數(shù)據(jù)庫(kù)的安裝都可能由若干數(shù)據(jù)庫(kù)組成。在有些系統(tǒng)上,這種數(shù)據(jù)庫(kù)則指的是表空間。
數(shù)據(jù)表是一種包含多行數(shù)據(jù)的數(shù)據(jù)庫(kù)構(gòu)造,這種數(shù)據(jù)庫(kù)構(gòu)造由命名的列組成。通常數(shù)據(jù)表構(gòu)造為包含關(guān)系信息,同一數(shù)據(jù)庫(kù)或表空間以?xún)?nèi)可以創(chuàng)建若干數(shù)據(jù)表。
表內(nèi)的列保存某一種類(lèi)型的數(shù)據(jù)而且應(yīng)根據(jù)其保存數(shù)據(jù)的內(nèi)容得以命名。例如,被稱(chēng)為“LastName”的列就應(yīng)該在每一行包含姓氏條目。正是這一前提的存在才能讓關(guān)系數(shù)據(jù)庫(kù)查詢(xún)返回一致的結(jié)果。
字段(field)指的是某一行某一列對(duì)應(yīng)的數(shù)據(jù)(或保存數(shù)據(jù)的地方)。另外,數(shù)據(jù)集合(data set)則指的是多行多列的數(shù)據(jù),而且數(shù)據(jù)集合通常說(shuō)明你的數(shù)據(jù)庫(kù)或數(shù)據(jù)表內(nèi)的全部數(shù)據(jù)。結(jié)果集合(result set)就是從數(shù)據(jù)庫(kù)查詢(xún)返回的數(shù)據(jù);它能夠描述從單一字段到數(shù)據(jù)庫(kù)內(nèi)全部數(shù)據(jù)這一范圍內(nèi)的全部信息。
數(shù)據(jù)庫(kù)查詢(xún)就是發(fā)送給數(shù)據(jù)庫(kù)的SQL指令,這些指令向數(shù)據(jù)庫(kù)請(qǐng)求某種施加在數(shù)據(jù)集合或數(shù)據(jù)庫(kù)上的功能。
現(xiàn)在我們就來(lái)看看基本的數(shù)據(jù)庫(kù)查詢(xún),這些查詢(xún)主要涉及到對(duì)數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)的操作。在本文中,所有的例子都采用了標(biāo)準(zhǔn)SQL語(yǔ)言,而且這些基本功能可以轉(zhuǎn)換為應(yīng)用在幾乎各種環(huán)境下。
數(shù)據(jù)查詢(xún)類(lèi)型
SQL語(yǔ)言中的數(shù)據(jù)查詢(xún)分為4種基本類(lèi)型:
SELECT:這條語(yǔ)句要求數(shù)據(jù)庫(kù)返回指定結(jié)果的數(shù)據(jù)集合;你可以用這一語(yǔ)句檢索數(shù)據(jù)庫(kù)中保存的信息。
INSERT:這條語(yǔ)句用來(lái)給數(shù)據(jù)表增加新一行數(shù)據(jù)。
DELETE:該語(yǔ)句從你的數(shù)據(jù)庫(kù)中刪除若干行數(shù)據(jù)。
UPDATE:該語(yǔ)句修改數(shù)據(jù)庫(kù)內(nèi)的現(xiàn)有數(shù)據(jù)。
以上的這些語(yǔ)句都有各種各樣的限定詞和函數(shù)供你用來(lái)定義有關(guān)的數(shù)據(jù)集合,同時(shí)控制查詢(xún)返回的結(jié)果集合。SELECT語(yǔ)句的選項(xiàng)最多。有許多種組合SELECT的查詢(xún)選項(xiàng),例如JOIN和UNION等。不過(guò)就我們目前來(lái)說(shuō),本文主要還是關(guān)注基本用途。
用SELECT語(yǔ)句檢索保存的信息
為了獲得數(shù)據(jù)庫(kù)中保存的信息就必須采用SELECT語(yǔ)句。其基本功能限制在針對(duì)單一數(shù)據(jù)表操作,當(dāng)然,其他范圍的構(gòu)造也是有的。為了返回特定列所對(duì)應(yīng)的所有數(shù)據(jù)行,你可以使用以下語(yǔ)句:
SELECT column1, column2 FROM table_name;
另外,使用通配符“*”可以從表中選出所有的列:
SELECT * FROM table_name;
你要愿意自己編碼分析以上返回的結(jié)果當(dāng)然也沒(méi)問(wèn)題,不過(guò)你完全可以采用方便的WHERE子句限制返回的結(jié)果集合,該子句可以讓你為選擇數(shù)據(jù)定義某些條件。以下查詢(xún)就會(huì)返回“column1”數(shù)值等于3的所以數(shù)據(jù)行:
SELECT * FROM table_name WHERE column1 = 3;
除了“=”(等于)條件之外你還可以用到下列條件運(yùn)算符:
表A
= 等于
<> 不等于
> 大于
< 小于
>= 大于或等于
<= 小于或等于
SQL 條件語(yǔ)句

