IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置: 首頁數(shù)據(jù)庫MSSQL → 跟我學SQL:一數(shù)據(jù)查詢

跟我學SQL:一數(shù)據(jù)查詢

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

??? 且不說你是否正在從事編程方面的工作或者不打算學習SQL,可事實上幾乎每一位開發(fā)者最終都會遭遇它。你多半還用不著負責創(chuàng)建和維持某個數(shù)據(jù)庫,但你怎么著也該知道以下的一些有關(guān)的SQL知識。
??? 我為那些感興趣的開發(fā)者或者能從數(shù)據(jù)庫操作中得益的讀者撰寫了這篇關(guān)于基本SQL語法的概述性文章。本文主要討論基本的數(shù)據(jù)操作查詢,后續(xù)的文章還會繼續(xù)討論如何修改數(shù)據(jù)庫自身以及更高級的查詢概念。

?? SQL數(shù)據(jù)庫是怎么回事?
?
?? SQL(結(jié)構(gòu)化查詢語言)就是負責與ANSI維護的數(shù)據(jù)庫交互的標準。最新的版本是SQL-99,還有一個新標準SQL-200n尚處于制定過程中。大多數(shù)的數(shù)據(jù)庫都至少遵守ANSI-92標準的部分子集。不過,目前對最新標準的有效性還存在一些爭論。專有數(shù)據(jù)庫制造商根據(jù)這些標準開發(fā)自己的產(chǎn)品,同時制定出自己特有的數(shù)據(jù)庫存儲操作新概念。幾乎各種不同的數(shù)據(jù)庫都包含了自己特有的語法集合,只是通常很類似ANSI標準。在大多數(shù)情況下,盡管有一些數(shù)據(jù)庫實例基于特定的擴展語法會因數(shù)據(jù)庫的不同而產(chǎn)生不同的結(jié)果,但總的說來,這些新加的語法不過是對原有標準的擴充。如果數(shù)據(jù)庫操作并沒有得到你希望的結(jié)果,那么你不妨事先讀一讀數(shù)據(jù)庫制造商提供的產(chǎn)品說明。

?? 假如到目前為止你頭回遭遇SQL語言,那么你怎么也得先理解一些基本的SQL概念。我盡量把這些基本知識闡述得簡明扼要,如果你對那些數(shù)據(jù)庫術(shù)語還能忍受,你盡可跳到下一節(jié),此外你還可以把自己的問題提交給以下的討論區(qū)。

?? 籠統(tǒng)地說,"SQL數(shù)據(jù)庫"其實就是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDMS)通俗的叫法。對某些系統(tǒng)來說,"數(shù)據(jù)庫"也指一組數(shù)據(jù)表、數(shù)據(jù)以及相互區(qū)分但結(jié)構(gòu)類似的配置信息。在這種情況下,每一SQL數(shù)據(jù)庫的安裝都可能由若干數(shù)據(jù)庫組成。在有些系統(tǒng)上,這種數(shù)據(jù)庫則指的是表空間。

?? 數(shù)據(jù)表是一種包含多行數(shù)據(jù)的數(shù)據(jù)庫構(gòu)造,這種數(shù)據(jù)庫構(gòu)造由命名的列組成。通常數(shù)據(jù)表構(gòu)造為包含關(guān)系信息,同一數(shù)據(jù)庫或表空間以內(nèi)可以創(chuàng)建若干數(shù)據(jù)表。

?? 表內(nèi)的列保存某一種類型的數(shù)據(jù)而且應(yīng)根據(jù)其保存數(shù)據(jù)的內(nèi)容得以命名。例如,被稱為"LastName"的列就應(yīng)該在每一行包含姓氏條目。正是這一前提的存在才能讓關(guān)系數(shù)據(jù)庫查詢返回一致的結(jié)果。

?? 字段(field)指的是某一行某一列對應(yīng)的數(shù)據(jù)(或保存數(shù)據(jù)的地方)。另外,數(shù)據(jù)集合(data set)則指的是多行多列的數(shù)據(jù),而且數(shù)據(jù)集合通常說明你的數(shù)據(jù)庫或數(shù)據(jù)表內(nèi)的全部數(shù)據(jù)。結(jié)果集合(result set)就是從數(shù)據(jù)庫查詢返回的數(shù)據(jù);它能夠描述從單一字段到數(shù)據(jù)庫內(nèi)全部數(shù)據(jù)這一范圍內(nèi)的全部信息。

??? 數(shù)據(jù)庫查詢就是發(fā)送給數(shù)據(jù)庫的SQL指令,這些指令向數(shù)據(jù)庫請求某種施加在數(shù)據(jù)集合或數(shù)據(jù)庫上的功能。

?? 現(xiàn)在我們就來看看基本的數(shù)據(jù)庫查詢,這些查詢主要涉及到對數(shù)據(jù)庫內(nèi)數(shù)據(jù)的操作。在本文中,所有的例子都采用了標準SQL語言,而且這些基本功能可以轉(zhuǎn)換為應(yīng)用在幾乎各種環(huán)境下。

?? 數(shù)據(jù)查詢類型

?? SQL語言中的數(shù)據(jù)查詢分為4種基本類型:

SELECT:這條語句要求數(shù)據(jù)庫返回指定結(jié)果的數(shù)據(jù)集合;你可以用這一語句檢索數(shù)據(jù)庫中保存的信息。
INSERT:這條語句用來給數(shù)據(jù)表增加新一行數(shù)據(jù)。
DELETE:該語句從你的數(shù)據(jù)庫中刪除若干行數(shù)據(jù)。
UPDATE:該語句修改數(shù)據(jù)庫內(nèi)的現(xiàn)有數(shù)據(jù)。
?? 以上的這些語句都有各種各樣的限定詞和函數(shù)供你用來定義有關(guān)的數(shù)據(jù)集合,同時控制查詢返回的結(jié)果集合。SELECT語句的選項最多。有許多種組合SELECT的查詢選項,例如JOIN和UNION等。不過就我們目前來說,本文主要還是關(guān)注基本用途。

?? 用SELECT語句檢索保存的信息
?? 為了獲得數(shù)據(jù)庫中保存的信息就必須采用SELECT語句。其基本功能限制在針對單一數(shù)據(jù)表操作,當然,其他范圍的構(gòu)造也是有的。為了返回特定列所對應(yīng)的所有數(shù)據(jù)行,你可以使用以下語句:

?? SELECT column1, column2 FROM table_name;

?? 另外,使用通配符"*"可以從表中選出所有的列:

SELECT * FROM table_name;

?? 你要愿意自己編碼分析以上返回的結(jié)果當然也沒問題,不過你完全可以采用方便的WHERE子句限制返回的結(jié)果集合,該子句可以讓你為選擇數(shù)據(jù)定義某些條件。以下查詢就會返回"column1"數(shù)值等于3的所以數(shù)據(jù)行:
SELECT * FROM table_name WHERE column1 = 3;

?? 除了"="(等于)條件之外你還可以用到下列條件運算符:

? 表A
?
= 等于
?
<> 不等于
?
> 大于
?
< 小于
?
>= 大于或等于
?
<= 小于或等于
?

?? SQL 條件語句

?? 另外,你還可以聯(lián)合WHERE語句使用BETWEEN、LIKE等比較運算符以及AND和OR這類邏輯運算符。注意,OR語句是包含性的的。以下有一個例子組合了以上這些概念:

?? SELECT * FROM table_name WHERE ((Age < 18) AND (LastName BETWEEN ‘Anderson’ AND ‘Miller’)) OR Company LIKE ‘%School%’;

?? 用自然語言來說,這條選擇語句的含義是這樣的:從數(shù)據(jù)表中選出年齡小于18歲而且姓氏在"Anderson"和"MIller"之間的或者其公司名稱類中有"School"字樣的數(shù)據(jù)行。

??? 用INSERT語句加入新數(shù)據(jù)
使用INSERT語句可以創(chuàng)建新的數(shù)據(jù)行。如果你希望在某一行的某個字段中賦值則要用到UPDATE語句。

?? 插入語句的語法如下:
INSERT INTO table_name (column1, column2, column3)
VALUES (‘data1’, ‘data2’, ‘data3’);

? 如果你想按照表內(nèi)現(xiàn)有列的同一順序插入所有的值,那么你不必指定列名,當然,從可讀性考慮最好不要這樣做。另外,如果你列出列名則不必要按照它們在數(shù)據(jù)庫中出現(xiàn)的順序包括它們,只要你列出的值與它們一一對應(yīng)即可。有些列你并沒有為其輸入新的信息所以你自然沒有必要列出它們來。

一旦數(shù)據(jù)庫中有了數(shù)據(jù)要修改起來也與此很相似。

UPDATE語句和WHERE子句
UPDATE用來修改現(xiàn)有的值或行里的空字段,因此它必須在匹配現(xiàn)有的數(shù)據(jù)集合同時提供可接受的值。除非你真地想要修改所有數(shù)據(jù)行上的值,否則你必須使用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語句會從數(shù)據(jù)庫的數(shù)據(jù)表中刪除整行。如果你僅僅想刪除單一的字段則應(yīng)該使用UPDATE語句把它修改為代表應(yīng)用程序中的NULL的其他空值。一定要小心使用帶WHERE子句的DELETE語句,否則你可能會遭遇清空全部數(shù)據(jù)表的風險。
DELETE FROM table_name WHERE column1 = ‘data1’;

一旦你數(shù)據(jù)庫中刪除某一行數(shù)據(jù)就不可再后悔了,因此一般來說,最好在數(shù)據(jù)表中包括一名為"IsActive"的列或類似的指示信息,這樣你就可以把該列數(shù)據(jù)設(shè)置為零表示數(shù)據(jù)禁用。只有在你確信不再需要受到影響的信息之后你才可以用DELETE語句。

小結(jié)
SQL就是數(shù)據(jù)庫的語言,我們已經(jīng)了解了數(shù)據(jù)查詢中所采用的最基本命令語句。但還有很多基本概念尚未涉及,例如SUN和COUNT函數(shù)等,但以上列出的這些命令應(yīng)該足夠你開始著手數(shù)據(jù)庫操作了。

關(guān)鍵詞標簽:查詢,數(shù)據(jù),數(shù)據(jù)庫,語句

相關(guān)閱讀 ASP教程:不連數(shù)據(jù)庫進行查詢分頁的思路 用Asp編程實現(xiàn)QQ的在線情況查詢 跟我學SQL:四查詢多個表格 跟我學SQL:三使用SQL子選擇來合并查詢 SQL Server 分布式查詢:OLE DB連接(一) SQL Server 分布式查詢:OLE DB連接(二)

文章評論
發(fā)表評論

熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟 SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系

相關(guān)下載

人氣排行 配置和注冊O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠程導入(導出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務(wù)端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法