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