(一)數據查詢
且不說你是否正在從事編程方面的工作或者不打算學習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;
除了“=”(等於)條件之外你還可以用到下列條件運算符:
= 等於
<> 不等於
> 大於
< 小於
>= 大於或等於
<= 小於或等於
SQL 條件語句
另外,你還可以聯合WHERE語句使用BETWEEN、LIKE等比較運算符以及AND和OR這類邏輯運算符。注意,OR語句是包含性的的。以下有一個例子組合了以上這些概念:
SELECT * FROM table_name WHERE ((Age < 18) AND (LastName BETWEEN ‘Anderson’ AND ‘Miller’)) OR Company LIKE ‘%School%’;
用自然語言來說,這條選擇語句的含義是這樣的:從數據表中選出年齡小於18歲而且姓氏在“Anderson”和“MIller”之間的或者其公司名稱類中有“School”字樣的數據行。
用INSERT語句加入新數據
使用INSERT語句可以創建新的數據行。如果你希望在某一行的某個字段中賦值則要用到UPDATE語句。
插入語句的語法如下:
INSERT INTO table_name (column1, column2, column3)
VALUES (‘data1’, ‘data2’, ‘data3’);
如果你想按照表內現有列的同一順序插入所有的值,那麼你不必指定列名,當然,從可讀性考慮最好不要這樣做。另外,如果你列出列名則不必要按照它們在數據庫中出現的順序包括它們,只要你列出的值與它們一一對應即可。有些列你並沒有為其輸入新的信息所以你自然沒有必要列出它們來。
一旦數據庫中有了數據要修改起來也與此很相似。
UPDATE語句和WHERE子句
UPDATE用來修改現有的值或行裡的空字段,因此它必須在匹配現有的數據集合同時提供可接受的值。除非你真地想要修改所有數據行上的值,否則你必須使用WHERE子句。
UPDATE table_name SET column1 = ‘data1’, column2 = ‘data2’ WHERE column3 = ‘data3’;
你可以采用WHERE子句隨意匹配任何一列,正在修改的一列都可以。這樣會有助於你把某一特定的值修改為另一個值:
UPDATE table_name SET FirstName = ‘Shelley’WHERE FirstName = ‘Shelly’ AND LastName = ‘Doll’;
小心DELETE語句
DELETE語句會從數據庫的數據表中刪除整行。如果你僅僅想刪除單一的字段則應該使用UPDATE語句把它修改為代表應用程序中的NULL的其他空值。一定要小心使用帶WHERE子句的DELETE語句,否則你可能會遭遇清空全部數據表的風險。
DELETE FROM table_name WHERE column1 = ‘data1’;
一旦你數據庫中刪除某一行數據就不可再後悔了,因此一般來說,最好在數據表中包括一名為“IsActive”的列或類似的指示信息,這樣你就可以把該列數據設置為零表示數據禁用。只有在你確信不再需要受到影響的信息之後你才可以用DELETE語句。
小結
SQL就是數據庫的語言,我們已經了解了數據查詢中所采用的最基本命令語句。但還有很多基本概念尚未涉及,例如SUN和COUNT函數等,但以上列出的這些命令應該足夠你開始著手數據庫操作了。