掌握SQL四條最基本的數據操作語句:Insert,Select,Update和Delete。
練掌握SQL是資料庫用戶的寶貴財 富。在本文中,我們將引導你掌握四條最基本的數據操作語句—SQL的核心功能—來依次介紹比較操作符、選擇斷言以及三值邏輯。當你完成這些學習後,顯然你已經開始算是精通SQL了。
在我們開始之前,先使用CREATE TABLE語句來創建一個表(如圖1所示)。DDL語句對資料庫對象如表、列和視進行定義。它們並不對表中的行進行處理,這是因為DDL語句並不處理資料庫中實際的數據。這些工作由另一類SQL語句—數據操作語言(DML)語句進行處理。
SQL中有四種基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由於這是大多數SQL用戶經常用到的,我們有必要在此對它們進行一一說明。在圖1中我們給出了一個名為EMPLOYEES的表。其中的每一行對應一個特定的雇員記錄。請熟悉這張表,我們在後面的例子中將要用到它。
INSERT語句
用戶可以用INSERT語句將一行記錄插入到指定的一個表中。例如,要將雇員John Smith的記錄插入到本例的表中,可以使用如下語句:
INSERT INTO EMPLOYEES VALUES
('Smith','John','1980-06-10',
'Los Angles',16,45000);
通過這樣的INSERT語句,系統將試著將這些值填入到相應的列中。這些列按照我們創建表時定義的順序排列。在本例中,第一個值「Smith」將填到第一個列LAST_NAME中;第二個值「John」將填到第二列FIRST_NAME中……以此類推。
我們說過系統會「試著」將值填入,除了執行規則之外它還要進行類型檢查。如果類型不符(如將一個字元串填入到類型為數字的列中),系統將拒絕這一次操作並返回一個錯誤信息。
如果SQL拒絕了你所填入的一列值,語句中其他各列的值也不會填入。這是因為SQL提供對事務的支持。一次事務將資料庫從一種一致性轉移到另一種一致性。如果事務的某一部分失敗,則整個事務都會失敗,系統將會被恢復(或稱之為回退)到此事務之前的狀態。
回到原來的INSERT的例子,請注意所有的整形十進制數都不需要用單引號引起來,而字元串和日期類型的值都要用單引號來區別。為了增加可讀性而在數字間插入逗號將會引起錯誤。記住,在SQL中逗號是元素的分隔符。
同樣要注意輸入文字值時要使用單引號。雙引號用來封裝限界標識符。
對於日期類型,我們必須使用SQL標准日期格式(yyyy-mm-dd),但是在系統中可以進行定義,以接受其他的格式。當然,2000年臨近,請你最好還是使用四位來表示年份。
既然你已經理解了INSERT語句是怎樣工作的了,讓我們轉到EMPLOYEES表中的其他部分:
INSERT INTO EMPLOYEES VALUES
('Bunyan','Paul','1970-07-04',
'Boston',12,70000);
INSERT INTO EMPLOYEES VALUES
('John','Adams','1992-01-21',
'Boston',20,100000);
INSERT INTO EMPLOYEES VALUES
('Smith','Pocahontas','1976-04-06',
'Los Angles',12,100000);
INSERT INTO EMPLOYEES VALUES
('Smith','Bessie','1940-05-02',
'Boston',5,200000);
INSERT INTO EMPLOYEES VALUES
('Jones','Davy','1970-10-10',
'Boston',8,45000);
INSERT INTO EMPLOYEES VALUES
('Jones','Indiana','1992-02-01',
'Chicago',NULL,NULL);
在最後一項中,我們不知道Jones先生的工薪級別和年薪,所以我們輸入NULL(不要引號)。NULL是SQL中的一種特殊情況,我們以後將進行詳細的討論。現在我們只需認為NULL表示一種未知的值。
有時,像我們剛才所討論的情況,我們可能希望對某一些而不是全部的列進行賦值。除了對要省略的列輸入NULL外,還可以採用另外一種INSERT語句,如下:
INSERT INTO EMPLOYEES(
FIRST_NAME, LAST_NAME,
HIRE_DATE, BRANCH_OFFICE)
VALUE(
'Indiana','Jones',
'1992-02-01','Indianapolis');
這樣,我們先在表名之後列出一系列列名。未列出的列中將自動填入預設值,如果沒有設置預設值則填入NULL。請注意我們改變了列的順序,而值的順序要對應新的列的順序。如果該語句中省略了FIRST_NAME和LAST_NAME項(這兩項規定不能為空),SQL操作將失敗。
讓我們來看一看上述INSERT語句的語法圖:
INSERT INTO table
[(column )]
VALUES
(columnvalue []);
和前一篇文章中一樣,我們用方括弧來表示可選項,大括弧表示可以重復任意次數的項(不能在實際的SQL語句中使用這些特殊字元)。VALUE子句和可選的列名列表中必須使用圓括弧。
SELECT語句
SELECT語句可以從一個或多個表中選取特定的行和列。因為查詢和檢索數據是資料庫管理中最重要的功能,所以SELECT語句在SQL中是工作量最大的部分。實際上,僅僅是訪問資料庫來分析數據並生成報表的人可以對其他SQL語句一竅不通。
SELECT語句的結果通常是生成另外一個表。在執行過程中系統根據用戶的標准從資料庫中選出匹配的行和列,並將結果放到臨時的表中。在直接SQL(direct SQL)中,它將結果顯示在終端的顯示屏上,或者將結果送到列印機或文件中。也可以結合其他SQL語句來將結果放到一個已知名稱的表中。
SELECT語句功能強大。雖然表面上看來它只用來完成本文第一部分中提到的關系代數運算「選擇」(或稱「限制」),但實際上它也可以完成其他兩種關系運算—「投影」和「連接」,SELECT語句還可以完成聚合計算並對數據進行排序。
SELECT語句最簡單的語法如下:
SELECT columns FROM tables;
當我們以這種形式執行一條SELECT語句時,系統返回由所選擇的列以及用戶選擇的表中所有指定的行組成的一個結果表。這就是實現關系投影運算的一個形式。
讓我們看一下使用圖1中EMPLOYEES表的一些例子(這個表是我們以後所有SELECT語句實例都要使用的。而我們在圖2和圖3中給出了查詢的實際結果。我們將在其他的例子中使用這些結果)。
假設你想查看雇員工作部門的列表。那下面就是你所需要編寫的SQL查詢:
SELECT BRANCH_OFFICE FROM EMPLOYEES;
以上SELECT語句的執行將產生如圖2中表2所示的結果。
由於我們在SELECT語句中只指定了一個列,所以我們的結果表中也只有一個列。注意結果表中具有重復的行,這是因為有多個雇員在同一部門工作(記住SQL從所選的所有行中將值返回)。要消除結果中的重復行,只要在SELECT語句中加上DISTINCT子句:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES;
這次查詢的結果如表3所示。
現在已經消除了重復的行,但結果並不是按照順序排列的。如果你希望以字母表順序將結果列出又該怎麼做呢?只要使用ORDER BY子句就可以按照升序或降序來排列結果:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES
ORDER BY BRANCH_OFFICE ASC;
這一查詢的結果如表4所示。請注意在ORDER BY之後是如何放置列名BRANCH _OFFICE的,這就是我們想要對其進行排序的列。為什麼即使是結果表中只有一個列時我們也必須指出列名呢?這是因為我們還能夠按照表中其他列進行排序,即使它們並不顯示出來。列名BRANCH_ OFFICE之後的關鍵字ASC表示按照升序排列。如果你希望以降序排列,那麼可以用關鍵字DESC。
同樣我們應該指出ORDER BY子句只將臨時表中的結果進行排序;並不影響原來的表。
假設我們希望得到按部門排序並從工資最高的雇員到工資最低的雇員排列的列表。除了工資括弧中的內容,我們還希望看到按照聘用時間從最近聘用的雇員開始列出的列表。以下是你將要用到的語句:
SELECT BRANCH_OFFICE,FIRST_NAME,
LAST_NAME,SALARY,HIRE_DATE
FROM EMPLOYEES
ORDER BY SALARY DESC,
HIRE_DATE DESC;
這里我們進行了多列的選擇和排序。排序的優先順序由語句中的列名順序所決定。SQL將先對列出的第一個列進行排序。如果在第一個列中出現了重復的行時,這些行將被按照第二列進行排序,如果在第二列中又出現了重復的行時,這些行又將被按照第三列進行排序……如此類推。這次查詢的結果如表5所示。
將一個很長的表中的所有列名寫出來是一件相當麻煩的事,所以SQL允許在選擇表中所有的列時使用*號:
SELECT * FROM EMPLOYEES;
這次查詢返回整個EMPLOYEES表,如表1所示。
下面我們對開始時給出的SELECT語句的語法進行一下更新(豎直線表示一個可選項,允許在其中選擇一項。):
SELECT [DISTINCT]
(column [])| *
FROM table [ ]
[ORDER BY column [ASC] | DESC
[ ]];
定義選擇標准
在我們目前所介紹的SELECT語句中,我們對結果表中的列作出了選擇但返回的是表中所有的行。讓我們看一下如何對SELECT語句進行限制使得它只返回希望得到的行:
SELECT columns FROM tables [WHERE predicates];
WHERE子句對條件進行了設置,只有滿足條件的行才被包括到結果表中。這些條件由斷言(predicate)進行指定(斷言指出了關於某件事情的一種可能的事實)。如果該斷言對於某個給定的行成立,該行將被包括到結果表中,否則該行被忽略。在SQL語句中斷言通常通過比較來表示。例如,假如你需要查詢所有姓為Jones的職員,則可以使用以下SELECT語句:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = 'Jones';
LAST_NAME = 'Jones'部分就是斷言。在執行該語句時,SQL將每一行的LAST_NAME列與「Jones」進行比較。如果某一職員的姓為「Jones」,即斷言成立,該職員的信息將被包括到結果表中(見表6)。
使用最多的六種比較
我們上例中的斷言包括一種基於「等值」的比較(LAST_NAME = 'Jones'),但是SQL斷言還可以包含其他幾種類型的比較。其中最常用的為:
等於 =
不等於 <>
小於 <
大於 >
小於或等於 <=
大於或等於 >=
下面給出了不是基於等值比較的一個例子:
SELECT * FROM EMPLOYEES
WHERE SALARY > 50000;
② mssql,oracl,db2等資料庫的差異在哪裡.
mysql比sqlsever、db2比oracle更容易操作。
但是mysql貌似不是真正意義的資料庫,只是表和數據的集合,它沒有真正意義↑的索引和約束
,一般多用於web開發。
db2多應用於銀行資料庫,現在也開始用oracle。
sqlsever是微軟資料庫,多與C,C++,C#配套使用,其實也支持其他編程語言,需要相應組件。
學習難度是sqlsever和db2最合適,oracle偏難,mysql因為太簡單只有視頻教程,又是英文界面,反而不適合初學者。
③ 資料庫中 sql server db2 oralce 哪種簡單易學
強烈建議DB2(因為我是IBM認證的DBA),如果學習有什麼問題的話,我還能幫上忙,呵呵
④ SQL SERVER 資料庫好學不
SQL SERVER,不難,因為第一它是微軟的東西,裡面很多的快捷鍵都跟我們電腦中的默認快捷鍵類似,再者它的界面比較清晰,又大部分是中文,多實踐一下,不難學會的,習慣了你就會把它當成用excel一樣順手了,加油!
⑤ DB2與SQL Server的區別
SQL Server是基於伺服器端的中型的資料庫,可以適合大容量數據的應用,在功能上管理上也要比Access要強得多。在處理海量數據的效率,後台開發的靈活性,可擴展性等方面強大。因為現在資料庫都使用標準的SQL語言對資料庫進行管理,所以如果是標准SQL語言,兩者基本上都可以通用的。SQL Server還有更多的擴展,可以用存儲過程,資料庫大小無極限限制
DB2是IBM出口的一系列關系型資料庫管理系統,分別在不同的操作系統平台上服務。雖然DB2產品是基於UNIX的系統和個人計算機操作系統,在基於UNIX系統和微軟在windows系統下的Access方面,DB2追尋了ORACLE的資料庫產品。
這款新型數據伺服器率先實現了可擴展標記語言(XML)和關系數據間無縫交互,而無需考慮數據的格式、平台或位置。來自8個國家的750多名軟體開發人員為「Viper」的問世做出了努力,他們進行了精心設計和調試,力求將其打造成SOA環境下的首選信息引擎.? DB2 9取得了十項重大進步,包括已獲得專利的「pureXML」技術、突破性的「Venom」存儲壓縮以及增強的自動化數據管理能力等。
1、新的XML特性:
在無需重新定義XML數據的格式,或將其置於資料庫大型對象中的前提下,IBM DB2 9允許用戶無縫管理普通關系數據和純XML數據。此項能力是Viper所獨有的,它將有助於客戶增加其信息的實用性、速度和多功能性,同時大大降低與現有數據管理技術相關的管理成本。它還將顯著降低復雜性,並減少普通開發商創建「同時訪問關系數據和XML數據的應用」所花費的時間。
新的XML數據類型,允許客戶在分層的表格欄中存儲規范的XML文檔。
支持SQL語句及SQL/XML函數中的XML數據類型。
支持由萬維網聯盟(W3C)開發的新XQuery語言。IBM DB2 9允許客戶直接調用XQuery語言,調用功能可以從DB2表格與視圖中提取XML數據。
支持XML數據的檢索功能,提高了針對XML文檔的查詢效率。
為支持DB2的編程程序語言中的XML提供支持,允許應用整合對XML及關系型數據的訪問和存儲。
2、新的應用與開發特性:
對應用開發工具和原生XML數據存儲新特性的支持,允許應用訪問和存儲XML及相關數據。
DB2 Developer Workbench是一種綜合開發環境,可用於創建、編輯、調試、測試和部署DB2存儲流程和用戶自定義的功能。客戶還可以使用Developer Workbench開發SQL應用,創建、編輯和運行SQL語句與XML查詢。
面向JDBC和SQLJ的增強型DB2驅動程序符合JDBC 3.0規范,它還同時支持SQLJ語句。
SQLJ語句的功能特性與大多數JDBC方法相似。
此外,還包括其它重要特性:支持眾多新數據類型、DB2獨有的支持到面向z/OS? 數據伺服器IBM DB2 9版可靠連接的方式、異構組合、連接重用等。除支持Visual Studio 2005以外,還包括對Web服務的支持,對本地XML數據存儲的全面支持,以及無需編寫代碼就可以構建應用及Web站點的能力。增強型DB2 Runtime Client支持64位計算,還可在同一台計算機上與其它DB2產品共存。
3、新增自動資料庫管理功能:
適應性、自調式內存分配,通過不斷更新配置參數、調整緩沖池大小和動態分配可用的內存資源,幫助用戶簡化或排除DB2伺服器的配置工作。面向z/OS對象的DB2 UDB自動狀態檢測功能,允許客戶通過控制中心的創建和變更對象策略向導,使面向z/OS對象的DB2 UDB實現對象維護策略評估自動化。
自動存儲支持,可以自動擴充磁碟和文件系統中資料庫的大小,現在可用於多分區資料庫。
自動統計數據收集,創建新資料庫時會自動啟動。
根據DB2資料庫系統的環境特點,自動配置prefetchers進程與頁清潔器。
面向自動表格與索引重組的新策略選項,為資料庫管理員提供更多管理表格與索引重組的功能。
4、性能與可擴展性增強(存儲壓縮等):
利用數據行壓縮技術壓縮數據對象的功能,可以幫助客戶節省磁碟存儲空間,並加快數據訪問速度。
統計數據視圖,為改進查詢功能提供更出色的訪問計劃。
使用定製的腳本或程序加快數據載入速度。
增強型物化查詢表(MQT)可為設計MQT提供更強大地支持,更出色的查詢性能和更完善的MQT維護。
更大的記錄標識符(RID)允許每個對象擁有更多數據頁,系統中每頁擁有更多記錄,一方面為資料庫管理員使用系統和用戶的臨時表格提供了便利,另一方面也便於執行分類和登錄操作。
索引的關鍵字最多可達64組,大小可以擴充至8 KB。
5、新的安全特性與增強:
使用基於標簽的訪問控制(LBAC),改進行、列級別的數據訪問控制功能。
新安全管理器(SECADM)的授權級別,將若干個與安全性相關的優先權集中到一項優先權名下,提高了對於訪問信息資產的控制。
「創建資料庫」語句中新增的「限制」選項,增強了對進入資料庫的控制。
SETSESSIONUSER優先權加強了對擁有轉換會話用戶身份權力的人的控制。它允許掌握該項權力的人轉換為任何被賦予權利的授權ID。
TRANSFER OWNERSHIP SQL語句,提供了改變資料庫對象的歸屬權的能力。
6、使用表格分區改進大型資料庫管理:
表格分區是一種數據組織計劃,在該計劃中,表格數據根據多個表格列,被劃分到多個被稱為表格分區或范圍的存儲對象中。這些存儲對象可能存放在不同的表空間或相同的表空間中,或兩種情況兼而有之。此項新特性的優勢包括:
能夠創建非常大的表格。分區表格包含的數據遠遠超過了普通表格。將表格數據劃分到眾多存儲對象中,有助於顯著增加表格尺寸。
更靈活的管理能力。現在,客戶可以在個別數據分區中完成管理工作,將消耗時間的維護操作分成一系列小型操作。
更加精確地控制索引位置。客戶可以將索引放置在不同的表空間,分別對其進行管理。
快速、輕松地訪問數據或轉出數據。這一功能在數據倉庫環境中尤為有用,客戶經常在此環境中移入或移出數據,運行支持決策的查詢。
改進的查詢功能。通過表格分區分離數據,避免對不相關數據進行掃描,從而改進查詢處理的功能。
7、數據恢復增強:
重新啟動中斷的恢復操作,可以在資料庫恢復時節省寶貴的時間,同時簡化恢復工作。
支持重定向恢復操作,在現有備份鏡像中自動生成腳本。
能夠從表空間備份鏡像中重新構建資料庫。此項功能讓DB2的恢復更加靈活和多樣化,同時為客戶提供更全面的恢復解決方案。
8、自主管理性能增強:
使用適應性、自調內存分配簡化了內存管理。自調內存提供動態配置,能對工作負載特性的重大變化做出積極響應。
客戶創建資料庫時,自動統計數據收集功能會自動啟動。憑借自動統計數據收集,IBM DB2 9版自動在後台運行RUNSTATS實用程序,確保收集到正確的統計數據,並進行維護。
面向多分區資料庫的自動存儲支持。這一功能可以按照需求,自動擴大磁碟和文件系統中資料庫的容量。
ALTER TABLE語句增強允許客戶無需停止或重新創建表格,就可以改變部分表格的屬性。
新的策略選項為資料庫管理員提供了新的表格和索引自動重組功能。
可以拷貝資料庫計劃,創建模塊方案。一旦資料庫管理員創建了模塊方案,他們就可將其作為創建新視圖的模板。
新的管理SQL常式和視圖提供了基本、易用的可編程界面,便於藉助SQL來管理DB2。
動態快速通信管理器(FCM)緩沖和新的配置參數,可通過DB2資料庫管理器進行自動調節。
9、安裝性能增強:
新的CLI驅動程序(面向ODBC和CLI的IBM? DB2驅動程序),客戶可以在不安裝DB2客戶端軟體的情況下安裝此驅動程序。
更加靈活、有效的產品授權管理
可以在同一台計算機上安裝多個DB2版本和修補包。
新的響應文件關鍵字允許IT員工無需與最終用戶交互安裝DB2產品。
自動演進 — 從Stinger到Viper
基於第8.2版推出的增強功能,IBM DB2 9版中新的自動數據管理特性將繼續幫助提高資料庫管理員的生產效率和效用。
其中一些關鍵特性包括:
適應性、自調內存分配功能此項新功能通過不斷更新配置參數和重新調整緩沖池的大小,簡化或排除了DB2伺服器的配置工作。一旦啟動,該功能可在不同內存消耗點之間,動態分配可用的內存資源。在Windows和AIX? 操作系統中,自調內存功能也可以確定資料庫內存總體需求,並會自動調節資料庫共享內存。
面向 z/OS對象的DB2 UDB自動狀態監測功能 通過控制中心的創建和變更對象策略向導,客戶可以實現面向z/OS對象的DB2 UDB對象維護策略評估的自動化,從而可使其按照預定次數和時間間隔運行。對創建了策略警報的對象而言,警報通知會發送至對象維護策略指定的狀況警報聯系處。
自動存儲支持 自動存儲可以自動擴大磁碟與文件系統中資料庫的容量。它消除了對管理存儲器的需求,同時利用了資料庫管理存儲的性能和靈活性。在IBM DB2 9版中,已經添加了面向多分區資料庫的自動存儲功能。此外,在創建新資料庫時,自動存儲會自動啟動。
自動統計數據收集 在IBM DB2 9版中,當創建新資料庫時,使用RUNSTATS命令的自動統計數據收集功能會自動啟動。必要時,DB2伺服器會在後台處理中收集數據的統計信息。
DB2優化器(DB2 optimizer)利用這些信息對資料庫中的信息最有效地恢復。
prefetchers進程和頁清潔器的自動配置 在IBM DB2 9版中,prefetchers進程與頁清潔器的數量可由DB2資料庫系統根據某些環境特性,如CPU的數量、資料庫分區的數量和資料庫表空間的並行設置,自動確定。
表格與索引自動重組功能增強 表格與索引重組的新策略選項,為資料庫管理員提供了更豐富的表格與索引重組管理功能。
⑥ 想學資料庫,oracle、mysql和db2,學那個更好點,對以後的發展
像很多人說的,MYSQL適用於中小型企業,其時更適用於微型公司,因為可以免費使用。現在MYSQL也已經被ORACLE收購了,比較適用於網路產品。
ORACLE和DB2一般是中型和大型資料庫使用。如果學習ORACLE的話,以後應用的地方會很多。學ORACLE可以先學SQL,然後學PL/SQL,最後學習資料庫管理。當然,在學習之前先了解ORACLE的基本結構還是很有必要的。
DB2現在一般是銀行等大型公司的核心系統才使用,運行在主機上。DB2現在的人才很缺,會的人少,精通的人就更少了。當然,學習的難度也比較大,因為平時很難用到。
⑦ sql難不難
SQL不是很難,也不需要其他的編程語言,sql它只是對資料庫操作的命令而已。說它不難呢,是因為在一般的編程中,用到的sql命令都是很基礎的增刪改查。但是呢,如果你想真正的深入了解資料庫,那麼需要你掌握的sql命令就很多了,那個時候也可以算難了,因為相對的sql命令也有很多限制,而且那些限制比較隱晦。總之,如果你只是為了編程來學習sql,那麼就很簡單,如果你是為了了解資料庫來學習sql,那沒就有點難度了……這個要看你怎麼來使用它了。
⑧ 高難度SQL語句
這個是如何算累計的問題,有多種方法:
這里舉一個通用的方法:
SELECT
aa.id
, aa.積分
, SUM(bb.積分) AS 累計積分
FROM jifen_table AS aa
INNER JOIN jifen_table AS bb ON bb.id<=aa.id
GROUP BY aa.id, aa.積分
ORDER BY aa.id,aa.積分
;
就是通過jifen_table自關聯,來實現累加。
累計其實就是把當前的積分和之前出現過的都加起來,
關聯條件:ON bb.id<=aa.id 就是實現這個功能的。
2.方法二:
使用sum()over() 函數。
此方法oracle,db2支持,其他資料庫不知道支不支持。
都是一個語句就ok的,不需要3個步驟 :)
我的空間有類似的案例:
http://hi..com/rsnetwork/blog/item/297c2301c57cea001c958305.html
⑨ 關於DB2 SQL語句的性能分析
記得DB2自帶一個分析器,對SQL語句的運行次數(讀資料庫的次數)和時間進行統計,具體忘了
⑩ IBM DB2通用資料庫好學麽
怎麼說呢,你要是有資料庫的基礎,學起來相對來說會容易點。不過也要看你往哪方面發展了,
編程開發方向:我感覺DB2的sql語句不如oracle的高效和簡潔,db2的規則太多了
資料庫管理:這個方向相對就會輕松一些,db2管理起來基本上很分明,還是有跡可循的,比起oracle來說管理那是相當的輕松。
以上是我徘徊在oracle和db2之間的一些心得和感受,希望對你有幫助