什麼是PL/SQL 結構化查詢語言(Structured Query Language 簡稱SQL)是用來訪問關系型資料庫一種通用語言 它屬於第四代語言( GL) 其執行特點是非過程化 即不用指明執行的具體方法和途徑 而是簡單的調斗滾用相應語句來直接取得結果即可 例 delete from students where major= Nutrition ; 然而 對於有些復雜的業務流程又要求相應的程序空鄭余來描述 那麼 GL就有些無能為力了 PL/SQL通過增加了用在其它過程性語言中的結構來對SQL進行了擴展 使得它不僅僅是一個資料庫查詢語言 而且也是一個編程語言
PL/SQL代表面向過程化的語言與SQL語言的結合 在編寫PL/SQL代叢肆碼時可以在SQL語句中使用 ( )變數和類型( )控制語句( )過程和函數( )對象類型和方法PL/SQL語言實現了將過程結構與Oracle SQL的無縫集成例 修改一個學生的專業 如果沒有該學生 就插入一個新的記錄 gl_ gl sqlDECLARE v_newmajor VARCHAR ( ):= History ; v_firstname VARCHAR ( ):= Scott ; v_lastname VARCHAR ( ):= Urman ;
BEGIN update students set major=v_newmajor where first_name=v_last_name and last_name=v_last_name;
lishixin/Article/program/Oracle/201311/16583
⑵ sql語言(結構化查詢語言)簡介
SQL是英文Structured Query Language的縮寫,意思為結構化查詢語言。SQL語言的主要功能就是同各種資料庫建立聯系,進行溝通。按照ANSI(美國國家標准協會)的規定,SQL被作為關系型資料庫管理系統的標准語言。SQL語句可以用來執行各種各樣的操作,例如更新資料庫中的數據,從資料庫中提取數據等。目前,絕大多數流行的關系型資料庫管理系統,如Oracle, Sybase, Microsoft SQL Server, Access等都採用了SQL語言標准。雖然很多資料庫都對SQL語句進行了再開發和擴展,但是包括Select, Insert, Update, Delete, Create,以及Drop在內的標準的SQL命令仍然可以被用來完成幾乎所有的資料庫操作。
SQL Server
SQL Server 是一個關系資料庫管理系統它最初是由Microsoft Sybase 和Ashton-Tate三家公司共同開發的於1988 年推出了第一個OS/2 版本在Windows NT 推出後Microsoft與Sybase 在SQL Server 的開發上就分道揚鑣了Microsoft 將SQL Server 移植到Windows NT
系統上專注於開發推廣SQL Server 的Windows NT 版本Sybase 則較專注於SQL Server在UNIX 操作系統上的應用在本書中介紹的是Microsoft SQL Server 以後簡稱為SQL Server或MS SQL Server
SQL Server 2000 是Microsoft 公司推出的SQL Server 資料庫管理系統的最新版本該版本繼承了SQL Server 7.0 版本的優點同時又比它增加了許多更先進的功能具有使用方便可伸縮性好與相關軟體集成程度高等優點可跨越從運行Microsoft Windows 98 的膝上型電腦到運行Microsoft Windows 2000 的大型多處理器的伺服器等多種平台使用
⑶ SQL的簡單介紹
SQL是Structured Quevy Language(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出「做什麼」的命令,「怎麼做」是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支持SQL。 <br>
##1 二、SQL資料庫數據體系結構 <br>
SQL資料庫的數據體系結構基本上是三級結構,但使用術語與傳統關系模型術語不同。在擾碼SQL中,關系模式(模式)稱為「基本表」(base table);存儲模式(內模式)稱為「存儲文件」(stored file);子模式(外模式)稱為「視圖」(view);元組稱為「行」(row);屬性稱為「列」(column)。名稱對稱如^00100009a^: <br>
##1 三、SQL語言的組成 <br>
在正式學習SQL語言之前,首先讓我們對SQL語言有一個基本認識,介紹一下SQL語言的組成: <br>
1.一個SQL資料庫是表(Table)的集合,它由一個或多個SQL模式定義。 <br>
2.一個SQL表由行集構成,一行是列的序列(集合),每列與行對應一個數據項。 <br>
3.一個表或者是一個基本表或者是一個視圖。基本表是實際空脊存儲在資料庫的表,而視圖是由若干基本表或其他視圖構成的表的定義。 <br>
4.一個基本表可以跨一個或多個存儲文件,一個存儲文件也可存放一個或多個基本表。每個存儲文件與外部存儲上一個物理文件對應。 <br>
5.用戶可以用SQL語句對視圖和基本表進行查詢等操作。在用戶角度來看,視圖和基本表是一樣的,沒有區別,都是關系(表格)。 <br>
6.SQL用戶可以是應用程序,也可以是終端用戶。SQL語句可嵌入在宿主語言的程序中使用,宿主語言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada語言等。SQL用戶也能作為獨立的用戶介面,供交互環境下的終端用戶使用。 <br>
##1 四、對資料庫進行操作 <br>
SQL包括了所有對資料庫的操作,主要是由4個部分組成: <br>
1.數據定義:這一部分又稱為「SQL DDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。 <br>
2.數據操縱:這一部分又稱為「SQL DML」,其中包括數據查詢和數據更新兩大類操作,其中數據更新又包括插入、刪除和更新三種操斗李滲作。 <br>
3.數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。 <br>
4.嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。 <br>
下面我們將分別介紹: <br>
##2 (一)數據定義 <br>
SQL數據定義功能包括定義資料庫、基本表、索引和視圖。 <br>
首先,讓我們了解一下SQL所提供的基本數據類型:(如^00100009b^) <br>
1.資料庫的建立與刪除 <br>
(1)建立資料庫:資料庫是一個包括了多個基本表的數據集,其語句格式為: <br>
CREATE DATABASE <資料庫名> 〔其它參數〕 <br>
其中,<資料庫名>在系統中必須是唯一的,不能重復,不然將導致數據存取失誤。〔其它參數〕因具體資料庫實現系統不同而異。 <br>
例:要建立項目管理資料庫(xmmanage),其語句應為: <br>
CREATE DATABASE xmmanage <br>
(2) 資料庫的刪除:將資料庫及其全部內容從系統中刪除。 <br>
其語句格式為:DROP DATABASE <資料庫名> <br>
例:刪除項目管理資料庫(xmmanage),其語句應為: <br>
DROP DATABASE xmmanage <br>
2.基本表的定義及變更 <br>
本身獨立存在的表稱為基本表,在SQL語言中一個關系唯一對應一個基本表。基本表的定義指建立基本關系模式,而變更則是指對資料庫中已存在的基本表進行刪除與修改。 <br>
……<br>
⑷ 什麼是MySql資料庫
MySQL資料庫:
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。
MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
資料庫簡介:
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
由於MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有前綴「my」已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
MySQL的海豚標志的名字叫「sakila」,它是由MySQL AB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。
MySQL,雖然功能未必很強大,但因為它的開源、廣泛傳播,導致很多人都了解到這個資料庫。它的歷史也富有傳奇性。
MySQL資料庫歷史:
MySQL的歷史最早可以追溯到1979年,那時Oracle也才小打小鬧,微軟的SQL Server影子都沒有。有一個人叫Monty Widenius, 為一個叫TcX的小公司打工,並用BASIC設計了一個報表工具,可以在4M主頻和16KB內存的計算機上運行。過了不久,又將此工具,使用C語言重寫,移植到Unix平台,當時,它只是一個很底層的面向報表的存儲引擎。這個工具叫做Unireg。
可是,這個小公司資源有限,Monty天賦極高,面對資源有限的不利條件,他反而更能發揮潛能,總是力圖寫出最高效的代碼。並因此養成了習慣。與Monty同在一起的還有一些別的同事,很少有人能堅持把那些代碼持續寫到20年後,而Monty卻做到了。
1990年,TcX的customer 中開始有人要求要為它的API提供SQL支持,當時,有人想到了直接使用商用資料庫算了,但是Monty覺得商用資料庫的速度難令人滿意。於是,他直接藉助於mSQL的代碼,將它集成到自己的存儲引擎中。但不巧的是,效果並不太好。於是, Monty雄心大起,決心自己重寫一個SQL支持。
1996年,MySQL 1.0發布,只面向一小撥人,相當於內部發布。到了96年10月,MySQL 3.11.1發布了,呵呵,沒有2.x版本。最開始,只提供了Solaris下的二進製版本。一個月後,Linux版本出現了。
緊接下來的兩年裡,MySQL依次移植到各個平台下。它發布時,採用的許可策略,有些與眾不同:允許免費商用,但是不能將MySQL與自己的產品綁定在一起發布。如果想一起發布,就必須使用特殊許可,意味著要花銀子。當然,商業支持也是需要花銀子的。其它的,隨用戶怎麼用都可以。這種特殊許可為MySQL帶來了一些收入,從而為它的持續發展打下了良好的基礎。(細想想,PostgreSQL曾經有幾年限入低谷,可能與它的完全免費,不受任何限制有關系)。
MySQL3.22應該是一個標志性的版本,提供了基本的SQL支持。
MySQL關系型資料庫於1998年1月發行第一個版本。它使用系統核心提供的多線程機制提供完全的多線程運行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等編程語言的編程介面(APIs),支持多種欄位類型並且提供了完整的操作符支持查詢中的SELECT和WHERE操作。
MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。
1999-2000年,有一家公司在瑞典成立了,叫MySQL AB (AB是瑞典語「股份公司」的意思)。 雇了幾個人,與Sleepycat合作,開發出了 Berkeley DB引擎, 因為BDB支持事務處理,所以,MySQL從此開始支持事務處理了。
2000年4月,MySQL對舊的存儲引擎進行了整理,命名為MyISAM。同時,2001年,Heikiki Tuuri向MySQL提出建議,希望能集成他們的存儲引擎InnoDB,這個引擎同樣支持事務處理,還支持行級鎖。
如今,遺憾的是,BDB和InnoDB好像都被Oracle收購了,為了消滅競爭對手,哪怕是開源的,都是不擇手段。
MySQL與InnoDB的正式結合版本是4.0。
到了MySQL5.0,2003年12月,開始有View,存儲過程之類的東東,當然,其間, bug也挺多。
在2008年1月16號 MySQL被Sun公司收購。
最近,MySQL的創始人Monty Widenius已經向Sun提交了辭呈。head都要走了。
據說,被Sun收購的公司多薄命,不知道MySQL今後前途如何,希望一路走好。相信MySQL的生命力還是很長久的。
時至今日 mysql 和 php 的結合絕對是完美.很多大型的網站也用到mysql資料庫.mysql的發展前景是非常光明的!
MySQL常用命令:
1:使用SHOW語句找出在伺服器上當前存在什麼資料庫:
mysql> SHOW DATABASES;
2:2、創建一個資料庫MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3:選擇你所創建的資料庫
mysql> USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)
4:查看現在的資料庫中存在什麼表
mysql> SHOW TABLES;
5:創建一個資料庫表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:顯示表的結構:
mysql> DESCRIBE MYTABLE;
7:往表中加入記錄
mysql> insert into MYTABLE values (」hyq」,」M」);
8:用文本方式將數據裝入資料庫表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE 「D:/mysql.txt」 INTO TABLE MYTABLE;
9:導入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:刪除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中數據
mysql>update MYTABLE set sex=」f」 where name=』hyq』;
全局管理許可權對應解釋:
FILE: 在MySQL伺服器上讀寫文件。
PROCESS: 顯示或殺死屬於其它用戶的服務線程。
RELOAD: 重載訪問控製表,刷新日誌等。
SHUTDOWN: 關閉MySQL服務。
資料庫/數據表/數據列許可權:
ALTER: 修改已存在的數據表(例如增加/刪除列)和索引。
CREATE: 建立新的資料庫或數據表。
DELETE: 刪除表的記錄。
DROP: 刪除數據表或資料庫。
INDEX: 建立或刪除索引。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄。
UPDATE: 修改表中已存在的記錄。
特別的許可權:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄–其它什麼也不允許做。
MySQL資料庫導入方法:
MySQL資料庫的導入,有兩種方法:
1) 先導出資料庫SQL腳本,再導入;
2) 直接拷貝資料庫目錄和文件。
在不同操作系統或MySQL版本情況下,直接拷貝文件的方法可能會有不兼容的情況發生。
所以一般推薦用SQL腳本形式導入。下面分別介紹兩種方法。
2. 方法一 SQL腳本形式
操作步驟如下:
2.1. 導出SQL腳本
在原資料庫伺服器上,可以用phpMyAdmin工具,或者mysqlmp命令行,導出SQL腳本。
2.1.1 用phpMyAdmin工具
導出選項中,選擇導出「結構」和「數據」,不要添加「DROP DATABASE」和「DROP TABLE」選項。
選中「另存為文件」選項,如果數據比較多,可以選中「gzipped」選項。
將導出的SQL文件保存下來。
2.1.2 用mysqlmp命令行
命令格式
mysqlmp -u 用戶名 -p 資料庫名 > 資料庫名.sql
範例:
mysqlmp -u root -p abc > abc.sql
(導出資料庫abc到abc.sql文件)
提示輸入密碼時,輸入該資料庫用戶名的密碼。
2.2. 創建空的資料庫
通過主控界面/控制面板,創建一個資料庫。假設資料庫名為abc,資料庫全權用戶為abc_f。
2.3. 將SQL腳本導入執行
同樣是兩種方法,一種用phpMyAdmin(mysql資料庫管理)工具,或者mysql命令行。
2.3.1 用phpMyAdmin工具
從控制面板,選擇創建的空資料庫,點「管理」,進入管理工具頁面。
在"SQL"菜單中,瀏覽選擇剛才導出的SQL文件,點擊「執行」以上載並執行。
注意:phpMyAdmin對上載的文件大小有限制,php本身對上載文件大小也有限制,如果原始sql文件
比較大,可以先用gzip對它進行壓縮,對於sql文件這樣的文本文件,可獲得1:5或更高的壓縮率。
gzip使用方法:
# gzip xxxxx.sql
得到
xxxxx.sql.gz文件。
提示輸入密碼時,輸入該資料庫用戶名的密碼。
3 直接拷貝
如果資料庫比較大,可以考慮用直接拷貝的方法,但不同版本和操作系統之間可能不兼容,要慎用。
3.1 准備原始文件
用tar打包為一個文件
3.2 創建空資料庫
3.3 解壓
在臨時目錄中解壓,如:
cd /tmp
tar zxf mydb.tar.gz
3.4 拷貝
將解壓後的資料庫文件拷貝到相關目錄
cd mydb/
cp * /var/lib/mysql/mydb/
對於FreeBSD:
cp * /var/db/mysql/mydb/
3.5 許可權設置
將拷貝過去的文件的屬主改為mysql:mysql,許可權改為660
chown mysql:mysql /var/lib/mysql/mydb/*
chmod 660 /var/lib/mysql/mydb/*
Mssql轉換mysql的方法:
1.導表結構
使用MySQL生成create腳本的方法。找到生成要導出的腳本,按MySQL的語法修改一下到MySQL資料庫中創建該表的列結構什麼的。
2.導表數據
在MSSQL端使用bcp導出文本文件:
bcp 「Select * FROM dbname.dbo.tablename;」 queryout tablename.txt -c -Slocalhostdb2005 -Usa
其中」"中是要導出的sql語句,-c指定使用 進行欄位分隔,使用 進行記錄分隔,-S指定資料庫伺服器及實例,-U指定用戶名,-P指定密碼.
在MySQL端使用mysqlimport 導入文本文件到相應表中
mysqlimport -uroot -p databasename /home/test/tablename.txt
其中-u指定用戶名,-p指定密碼,databasename指定資料庫名稱,表名與文件名相同
MySQL備份與恢復:
MySQL備份恢復數據的一般步驟
備份一個資料庫的例子:
1、備份前讀鎖定涉及的表
mysql>LOCK TABLES tbl1 READ,tbl1 READ,…
如果,你在mysqlmp實用程序中使用--lock-tables選項則不必使用如上SQL語句。
2、導出資料庫中表的結構和數據
shell>mysqlmp --opt db_name>db_name.sql
3、啟用新的更新日誌
shell>mysqladmin flush-logs
這樣可以記錄你備份後的數據改變為恢復數據准備。
4、解除表的讀鎖
mysql>UNLOCK TABLES;
為了加速上述過程,你可以這樣做:
shell> mysqlmp --lock-tables --opt db_name>db_name.sql; mysqladmin flush-logs
但是這樣可能會有點小問題。上命令在啟用新的更新日誌前就恢復表的讀鎖,
在更新繁忙的站點,可能有備份後的更新數據沒有記錄在新的日誌中。
現在恢復上面備份的資料庫
1、對涉及的表使用寫鎖
mysql>LOCK TABLES tbl1 WRITE,tbl1 WRITE,…
2、恢復備份的數據
shell>mysql db_name < db_name.sql
3、恢復更新日誌的內容
shell>mysql --one-database db_name < hostname.nnn
假設需要使用的日誌名字為hostname.nnn
4、啟用新的更新日誌
shell>mysqladmin flush-logs
5、解除表的寫鎖
mysql>UNLOCK TABLES;
希望上面的例子能給你啟發,因為備份數據的手法多種多樣,你所使用的和上面所述可能大不一樣,但是對於備份和恢復中,表的鎖定、啟用新的更新日誌的時機應該是類似的,仔細考慮這個問題。
MySQL資料庫優化:
選擇InnoDB作為存儲引擎
大型產品的資料庫對於可靠性和並發性的要求較高,InnoDB作為默認的MySQL存儲引擎,相對於MyISAM來說是個更佳的選擇。
優化資料庫結構
組織資料庫的schema、表和欄位以降低I/O的開銷,將相關項保存在一起,並提前規劃,以便隨著數據量的增長,性能可以保持較高的水平。
設計數據表應盡量使其佔用的空間最小化,表的主鍵應盡可能短。·對於InnoDB表,主鍵所在的列在每個輔助索引條目中都是可復制的,因此如果有很多輔助索引,那麼一個短的主鍵可以節省大量空間。
僅創建你需要改進查詢性能的索引。索引有助於檢索,但是會增加插入和更新操作的執行時間。
InnoDB的ChangeBuffering特性
InnoDB提供了changebuffering的配置,可減少維護輔助索引所需的磁碟I/O。大規模的資料庫可能會遇到大量的表操作和大量的I/O,以保證輔助索引保持最新。當相關頁面不在緩沖池裡面時,InnoDB的changebuffer將會更改緩存到輔助索引條目,從而避免因不能立即從磁碟讀取頁面而導致耗時的I/O操作。當頁面被載入到緩沖池時,緩沖的更改將被合並,更新的頁面之後會刷新到磁碟。這樣做可提高性能,適用於MySQL5.5及更高版本。
InnoDB頁面壓縮
InnoDB支持對表進行頁面級的壓縮。當寫入數據頁的時候,會有特定的壓縮演算法對其進行壓縮。壓縮後的數據會寫入磁碟,其打孔機制會釋放頁面末尾的空塊。如果壓縮失敗,數據會按原樣寫入。表和索引都會被壓縮,因為索引通常是資料庫總大小中佔比很大的一部分,壓縮可以顯著節約內存,I/O或處理時間,這樣就達到了提高性能和伸縮性的目的。它還可以減少內存和磁碟之間傳輸的數據量。MySQL5.1及更高版本支持該功能。
注意,頁面壓縮並不能支持共享表空間中的表。共享表空間包括系統表空間、臨時表空間和常規表空間。
使用批量數據導入
在主鍵上使用已排序的數據源進行批量數據的導入可加快數據插入的過程。否則,可能需要在其他行之間插入行以維護排序,這會導致磁碟I/O變高,進而影響性能,增加頁的拆分。關閉自動提交的模式也是有好處的,因為它會為每個插入執行日誌刷新到磁碟。在批量插入期間臨時轉移唯一鍵和外鍵檢查也可顯著降低磁碟I/O。對於新建的表,最好的做法是在批量導入後創建外鍵/唯一鍵約束。
一旦你的數據達到穩定的大小,或者增長的表增加了幾十或幾百兆位元組,就應該考慮使用OPTIMIZETABLE語句重新組織表並壓縮浪費的空間。對重新組織後的表進行全表掃描所需要的I/O會更少。
優化InnoDB磁碟I/O
增加InnoDB緩沖池大小可以讓查詢從緩沖池訪問而不是通過磁碟I/O訪問。通過調整系統變數innodb_flush_method來調整清除緩沖的指標使其達到最佳水平。
MySQL的內存分配
在為MySQL分配足夠的內存之前,請考慮不同領域對MySQL的內存需求。要考慮的關鍵領域是:並發連接——對於大量並發連接,排序和臨時表將需要大量內存。在撰寫本文時,對於處理3000+並發連接的資料庫,16GB到32GB的RAM是足夠的。
內存碎片可以消耗大約10%或更多的內存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等緩存和緩沖區要消耗大約80%的已分配內存。
日常維護
定期檢查慢的查詢日誌並優化查詢機制以有效使用緩存來減少磁碟I/O。優化它們,以掃描最少的行數,而不是進行全表掃描。
其他可以幫助DBA檢查和分析性能的日誌包括:錯誤日誌、常規查詢日誌、二進制日誌、DDL日誌(元數據日誌)。
定期刷新緩存和緩沖區以降低碎片化。使用OPTIMIZETABLE語句重新組織表並壓縮任何可能被浪費的空間。
⑸ SQLserver資料庫的介紹
美國Microsoft公司推出的一種關系型資料庫系統。SQL Server是一個可擴展的、高性能的、為分布式客戶機/伺服器計算所設計的資料庫管理系統,實現了與WindowsNT的有機結合,提供了基於事務的企業級信息管理系統方案。
⑹ 通用SQL資料庫查詢語句精華使用簡介
一 簡單查詢簡單的Transact SQL查詢只包括選擇列表 FROM子句和WHERE子句 它們分別說明所查詢列 查詢的表或視圖 以及搜索條件等
例如 下面的語句查詢testtable表中姓名為 張三 的nickname欄位和email欄位
SELECT nickname emailFROM testtableWHERE name= 張三
(一) 選擇列表
選擇列表(select_list)指出所查詢列 它可以是一組列名列表 星號 表達式 變數(包括局部變數和全局變數)等構成
選擇所有列
例如 下面語句顯示testtable表中所有列的數據
SELECT *FROM testtable
選擇部分列並指定它們的顯示次序
查詢結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同
例如
SELECT nickname emailFROM testtable
更改列標題
在選擇列表中 可重新指定列標題 定義格式為
列標題=列名列名 列標題
如果指定的列標題不是標準的標識符格式時 應使用引號定界符 例如 下列語句使用漢字顯示列標題
SELECT 昵稱=nickname 電子郵件=emailFROM testtable
刪除重復行
SELECT語句中使用ALL或DISTINCT選項來顯示表中符合條件的所有行或刪除其中重復的數據行 默認為ALL 使用DISTINCT選項時 對於所有重復的數據行在SELECT返回的結果集合中只保留一行
限制返回的行數
使用TOP n [PERCENT]選項限制返回的數據行數 TOP n說明返回n行 而TOP n PERCENT時 說明n是表示一百分數 指定返回的行數等於總行數的百分之幾
例如
SELECT TOP *FROM testtable SELECT TOP PERCENT * FROM testtable
(二) FROM子句
FROM子句指定SELECT語句查詢及與查詢相關的表或視圖 在FROM子句中最多可指定 個表或視圖 它們之間用逗號分隔
在FROM子句同時指定多個表或視圖時 如果選擇列表中存在同名列 這時應使用對象名限定這些列所屬的表或視圖 例如在usertable和citytable表中同時存在cityid列 在查詢兩個表中的cityid時應使用下面語句格式加以限定
SELECT username citytable cityidFROM usertable citytableWHERE usertable cityid=citytable cityid
在FROM子句中可用以下兩種格式為表或視圖指定別名
表名 as 別名表名 別名
例如上面語句可用表的別名格式表示為
SELECT username b cityidFROM usertable a citytable bWHERE a cityid=b cityid
SELECT不僅能從表或視圖中檢索數據 它還能夠從其它查詢語句所返回的結果集合中查詢數據
例如
SELECT a au_fname+a au_lnameFROM authors a titleauthor ta(SELECT title_id titleFROM titlesWHERE ytd_sales> ) AS tWHERE a au_id=ta au_idAND ta title_id=t title_id
此例中 將SELECT返回的結果集合給予一別名t 然後再從中檢索數據
(三) 使用WHERE子句設置查詢條件
WHERE子句設置查詢條件 過濾掉不需要的數據行 例如下面語句查詢年齡大於 的數據
SELECT *FROM usertableWHERE age>
WHERE子句可包括各種條件運算符
比較運算符(大小比較) > >= = < <= <> !> !<范圍運算符(表達式值是否在指定的范圍) BEEEN…AND…NOT BEEEN…AND…列表運算符(判斷表達式是否為列表中的指定項) IN (項 項 ……)NOT IN (項 項 ……)模式匹配符(判斷值是否與指定的字元通配格式相符):LIKE NOT LIKE空值判斷符(判斷表達式是否為空) IS NULL NOT IS NULL邏輯運算符(用於多條件的邏輯連接) NOT AND OR
范圍運算符例 age BEEEN AND 相當於age>= AND age<=
列表運算符例 country IN ( Germany China )
模式匹配符例 常用於模糊查找 它判斷列值是否與指定的字元串格式相匹配 可用於char varchar text ntext datetime和 *** alldatetime等類型查詢
可使用以下通配字元
百分號% 可匹配任意類型和長度的字元 如果是中文 請使用兩個百分號即%%
下劃線_ 匹配單個任意字元 它常用來限製表達式的字元長度
方括弧[] 指定一個字元 字元串或范圍 要求所匹配對象為它們中的任一個 [^] 其取值也[] 相同 但它要求所匹配對象為指定字元以外的任一個字元
例如
限制以Publishing結尾 使用LIKE %Publishing
限制以A開頭 LIKE [A]%
限制以A開頭外 LIKE [^A]%
空值判斷符例WHERE age IS NULL
邏輯運算符 優先順序為NOT AND OR
(四)查詢結果排序
使用ORDER BY子句對查詢返回的結果按一列或多列排序 ORDER BY子句的語法格式為
ORDER BY {column_name [ASC|DESC]} [ …n]
其中ASC表示升序 為默認值 DESC為降序 ORDER BY不能按ntext text和image數據類型進行排序例如
SELECT *FROM usertableORDER BY age desc userid ASC
另外 可以根據表達式進行排序
二 聯合查詢
UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合並成一個結果集合顯示 即執行聯合查詢 UNION的語法格式為
select_statementUNION [ALL] selectstatement[UNION [ALL] selectstatement][…n]
其中selectstatement為待聯合的SELECT查詢語句
ALL選項表示將所有行合並到結果集合中 不指定該項時 被聯合查詢結果集合中的重復行將只保留一行
聯合查詢時 查詢結果的列標題為第一個查詢語句的列標題 因此 要定義列標題必須在第一個查詢語句中定義 要對聯合查詢結果排序時 也必須使用第一查詢語句中的列名 列標題或者列序號
在使用UNION 運算符時 應保證每個聯合查詢語句的選擇列表中有相同數量的表達式 並且每個查詢選擇表達式應具有相同的數據類型 或是可以自動將它們轉換為相同的數據類型 在自動轉換時 對於數值類型 系統將低精度的數據類型轉換為高精度的數據類型
在包括多個查詢的UNION語句中 其執行順序是自左至右 使用括弧可以改變這一執行順序 例如
查詢 UNION (查詢 UNION 查詢 )
三 連接查詢
通過連接運算符可以實現多個表查詢 連接是關系資料庫模型的主要特點 也是它區別於其它類型資料庫管理系統的一個標志
在關系資料庫管理系統中 表建立時各數據之間的關系不必確定 常把一個實體的所有信息存放在一個表中 當檢索數據時 通過連接操作查詢出存放在多個表中的不同實體的信息 連接操作給用戶帶來很大的靈活性 他們可以在任何時候增加新的數據類型 為不同實體創建新的表 爾後通過連接進行查詢
連接可以在SELECT 語句的FROM子句或WHERE子句中建立 似是而非在FROM子句中指出連接時有助於將連接操作與WHERE子句中的搜索條件區分開來 所以 在Transact SQL中推薦使用這種方法
SQL 標准所定義的FROM子句的連接語法格式為
FROM join_table join_type join_table[ON (join_condition)]
其中join_table指出參與連接操作的表名 連接可以對同一個表操作 也可以對多表操作 對同一個表操作的連接又稱做自連接
join_type 指出連接類型 可分為三種 內連接 外連接和交叉連接 內連接(INNER JOIN)使用比較運算符進行表間某(些)列數據的比較操作 並列出這些表中與連接條件相匹配的數據行 根據所使用的比較方式不同 內連接又分為等值連接 自然連接和不等連接三種 外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN) 右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種 與內連接不同的是 外連接不只列出與連接條件相匹配的行 而是列出左表(左外連接時) 右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數據行
交叉連接(CROSS JOIN)沒有WHERE 子句 它返回連接表中所有數據行的笛卡爾積 其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數
連接操作中的ON (join_condition) 子句指出連接條件 它由被連接表中的列和比較運算符 邏輯運算符等構成
無論哪種連接都不能對text ntext和image數據類型列進行直接連接 但可以對這三種列進行間接連接 例如
SELECT p pub_id p pub_id p pr_infoFROM pub_info AS p INNER JOIN pub_info AS p ON DATALENGTH(p pr_info)=DATALENGTH(p pr_info)
(一)內連接
內連接查詢操作列出與連接條件匹配的數據行 它使用比較運算符比較被連接列的列值 內連接分三種
等值連接 在連接條件中使用等於號(=)運算符比較被連接列的列值 其查詢結果中列出被連接表中的所有列 包括其中的重復列
不等連接 在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值 這些運算符包括> >= <= < !> !<和<>
自然連接 在連接條件中使用等於(=)運算符比較被連接列的列值 但它使用選擇列表指出查詢結果集合中所包括的列 並刪除連接表中的重復列
例 下面使用等值連接列出authors和publishers表中位於同一城市的作者和出版社
SELECT *FROM authors AS a INNER JOIN publishers AS pON a city=p city
又如使用自然連接 在選擇列表中刪除authors 和publishers 表中重復列(city和state)
SELECT a * p pub_id p pub_name p countryFROM authors AS a INNER JOIN publishers AS pON a city=p city
(二)外連接
內連接時 返回查詢結果集合中的僅是符合查詢條件( WHERE 搜索條件或 HAVING 條件)和連接條件的行 而採用外連接時 它返回到查詢結果集合中的不僅包含符合連接條件的行 而且還包括左表(左外連接時) 右表(右外連接時)或兩個邊接表(全外連接)中的所有數據行 如下面使用左外連接將論壇內容和作者信息連接起來
SELECT a * b * FROM luntan LEFT JOIN usertable as bON a username=b username
下面使用全外連接將city表中的所有作者以及user表中的所有作者 以及他們所在的城市
SELECT a * b *FROM city as a FULL OUTER JOIN user as bON a username=b username
(三)交叉連接
交叉連接不帶WHERE 子句 它返回被連接的兩個表所有數據行的笛卡爾積 返回到結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數 例 titles表中有 類圖書 而publishers表中有 家出版社 則下列交叉連接檢索到的記錄數將等
於 * = 行
lishixin/Article/program/SQL/201311/16231
⑺ SQL是什麼
SQL:SQLSERVER資料庫
SQL Server 資料庫簡介:
SQL Server是由Microsoft開發和推廣的關系資料庫管理系統(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發的,並於1988年推出了第一個OS/2版本。 SQL Server近年來不斷更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用戶見面;SQL Server 2000是Microsoft公司於2000年推出的最新版本。
SQL Server 特點:
1.真正的客戶機/伺服器體系結構。
2.圖形化用戶界面,使系統管理和資料庫管理更加直觀、簡單。
3.豐富的編程介面工具,為用戶進行程序設計提供了更大的選擇餘地。
4.SQL Server與Windows NT完全集成,利用了NT的許多功能,如發送和接受消息,管理登錄安全性等。SQL Server也可以很好地與Microsoft BackOffice產品集成。
5.具有很好的伸縮性,可跨越從運行Windows 95/98的膝上型電腦到運行Windows 2000的大型多處理器等多種平台使用。
6.對Web技術的支持,使用戶能夠很容易地將資料庫中的數據發布到Web頁面上。
7.SQL Server提供數據倉庫功能,這個功能只在Oracle和其他更昂貴的DBMS中才有。
SQL Server 2000與以前版本相比較,又具有以下新特性 :
1.支持XML(Extensive Markup Language,擴展標記語言)
2.強大的基於Web的分析
3.支持OLE DB和多種查詢
4.支持分布式的分區視圖
安裝、運行SQL Server 2000的硬體需求
(1)計算機
Inter及其兼容計算機,Pentium 166Mz或者更高處理器或DEC Alpha和其兼容系統。
(2)內存(RAM)
企業版最少64MB內存,其他版本最少需要32MB內存,建議使用更多的內存。
(3)硬碟空間
完全安裝(Full)需要180MB的空間,典型安裝(Typical)需要170MB的空間,最小安裝(Minimum)需要65MB的空間。