程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL查詢語句年夜選集錦

MySQL查詢語句年夜選集錦

編輯:MySQL綜合教程

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';

以下是有意中在收集看到的應用MySql的治理心得,

在windows中MySql以辦事情勢存在,在應用前應確保此辦事曾經啟動,未啟動可用net start mysql敕令啟動。而Linux中啟動時可用“/etc/rc.d/init.d/mysqld start”敕令,留意啟動者應具有治理員權限。

剛裝置好的MySql包括一個含空暗碼的root帳戶和一個匿名帳戶,這是很年夜的平安隱患,關於一些主要的運用我們應將平安性盡量進步,在這裡應把匿名帳戶刪除、 root帳戶設置暗碼,可用以下敕令停止:

use mysql;

delete from User where User=”";

update User set Password=PASSWORD('newpassword') where User='root';

假如要對用戶所用的登錄終端停止限制,可以更新User表中響應用戶的Host字段,在停止了以上更改後應從新啟動數據庫辦事,此時登錄時可用以下相似敕令:

mysql -uroot -p;

mysql -uroot -pnewpassword;

mysql mydb -uroot -p;

mysql mydb -uroot -pnewpassword;

下面敕令參數是經常使用參數的一部門,具體情形可參考文檔。此處的mydb是要登錄的數據庫的稱號。

在停止開辟和現實運用中,用戶不該該只用root用戶停止銜接數據庫,固然應用root用戶停止測試時很便利,但會給體系帶來嚴重平安隱患,也晦氣於治理技巧的進步。我們給一個運用中應用的用戶付與最適當的數據庫權限。如一個只停止數據拔出的用戶不該付與其刪除數據的權限。MySql的用戶治理是經由過程 User表來完成的,添加新用戶經常使用的辦法有兩個,一是在User表拔出響應的數據行,同時設置響應的權限;二是經由過程GRANT敕令創立具有某種權限的用戶。個中GRANT的經常使用用法以下:

grant all on mydb.* to NewUserName@HostName identified by “password” ;

grant usage on *.* to NewUserName@HostName identified by “password”;

grant select,insert,update on mydb.* to NewUserName@HostName identified by “password”;

grant update,delete on mydb.TestTable to NewUserName@HostName identified by “password”;

若 要給此用戶付與他在響應對象上的權限的治理才能,可在GRANT前面添加WITH GRANT OPTION選項。而關於用拔出User表添加的用戶,Password字段運用PASSWORD 函數停止更新加密,以防不軌之人竊看暗碼。關於那些曾經不消的用戶應賜與消除,權限過界的用戶應實時收受接管權限,收受接管權限可以經由過程更新User表響應字段,也能夠應用REVOKE操作。

上面給出自己從其它材料(www.cn-java.com)取得的對經常使用權限的說明:

全局治理權限:

FILE: 在MySQL辦事器上讀寫文件。

PROCESS: 顯示或殺逝世屬於其它用戶的辦事線程。

RELOAD: 重載拜訪掌握表,刷新日記等。

SHUTDOWN: 封閉MySQL辦事。

數據庫/數據表/數據列權限:

ALTER: 修正已存在的數據表(例如增長/刪除列)和索引。

CREATE: 樹立新的數據庫或數據表。

DELETE: 刪除表的記載。

DROP: 刪除數據表或數據庫。

INDEX: 樹立或刪除索引。

INSERT: 增長表的記載。

SELECT: 顯示/搜刮表的記載。

UPDATE: 修正表中已存在的記載。

特殊的權限:

ALL: 許可做任何事(和root一樣)。

USAGE: 只許可登錄–其它甚麼也不許可做。


1、 簡略查詢
簡略的Transact-SQL查詢只包含選擇列表、FROM子句和WHERE子句。它們分離解釋所查詢列、查詢的
表或視圖、和搜刮前提等。


例如,上面的語句查詢testtable表中姓名為“張三”的nickname字段和email字段。


復制內容到剪貼板
代碼:SELECT `nickname`,`email`FROM `testtable`WHERE `name`='張三'

(一) 選擇列表
選擇列表(select_list)指出所查詢列,它可所以一組列名列表、星號、表達式、變量(包含部分變量和全局變量)等組成。


1、選擇一切列
例如,上面語句顯示testtable表中一切列的數據:
復制內容到剪貼板
代碼:SELECT * FROM testtable

2、選擇部門列並指定它們的顯示順序
查詢成果聚集中數據的分列次序與選擇列表中所指定的列名分列次序雷同。
例如:
復制內容到剪貼板
代碼:SELECT nickname,email FROM testtable

3、更改列題目
在選擇列表中,可從新指定列題目。界說格局為:
列題目=列名
列名 列題目
假如指定的列題目不是尺度的標識符格局時,應應用引號定界符,例如,以下語句應用漢字顯示列
題目:
復制內容到剪貼板
代碼:SELECT 昵稱=nickname,電子郵件=email FROM testtable

4、刪除反復行
SELECT語句中應用ALL或DISTINCT選項來顯示表中相符前提的一切行或刪除個中反復的數據行,默許
為ALL。應用DISTINCT選項時,關於一切反復的數據行在SELECT前往的成果聚集中只保存一行。


5、限制前往的行數
應用TOP n [PERCENT]選項限制前往的數據行數,TOP n解釋前往n行,而TOP n PERCENT時,解釋n是
表現一百分數,指定前往的行數等於總行數的百分之幾。
例如:
復制內容到剪貼板
代碼:SELECT TOP 2 * FROM `testtable`
復制內容到剪貼板
代碼:SELECT TOP 20 PERCENT * FROM `testtable`


(二) FROM子句
FROM子句指定SELECT語句查詢及與查詢相干的表或視圖。在FROM子句中最多可指定256個表或視圖,
它們之間用逗號分隔。
在FROM子句同時指定多個表或視圖時,假如選擇列表中存在同名列,這時候應應用對象名限制這些列
所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應
應用上面語句格局加以限制:
復制內容到剪貼板
代碼:SELECT `username`,citytable.cityid
FROM `usertable`,`citytable`
WHERE usertable.cityid=citytable.cityid在FROM子句中可用以下兩種格局為表或視圖指定別號:
復制內容到剪貼板
代碼:表名 as 別號
表名 別號例如下面語句可用表的別號格局表現為:
復制內容到剪貼板
代碼:SELECT `username`,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityidSELECT不只能從表或視圖中檢索數據,它還可以或許從其它查詢語句所前往的成果聚集中查詢數據。
例如:
復制內容到剪貼板
代碼:SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT `title_id`,`title`
FROM `titles`
WHERE ` ytd_sales`>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id此例中,將SELECT前往的成果聚集賜與一別號t,然後再從中檢索數據。


(三) 應用WHERE子句設置查詢前提
WHERE子句設置查詢前提,過濾失落不須要的數據行。例以下面語句查詢年紀年夜於20的數據:
復制內容到剪貼板
代碼:SELECT * FROM usertable WHERE age>20 WHERE子句可包含各類前提運算符:
比擬運算符(年夜小比擬):>、>=、=、、!>、!=10 AND age復制內容到剪貼板
代碼:SELECT * FROM `usertable` ORDER BY `age` DESC,`userid` ASC別的,可以依據表達式停止排序。


2、 結合查詢
UNION運算符可以將兩個或兩個以上上SELECT語句的查詢成果聚集歸並成一個成果聚集顯示,即履行聯
合查詢。

UNION的語法格局為:
復制內容到剪貼板
代碼:select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]個中selectstatement為待結合的SELECT查詢語句。
ALL選項表現將一切行歸並到成果聚集中。不指定該項時,被結合查詢成果聚集中的反復即將只保存一行。
結合查詢時,查詢成果的列題目為第一個查詢語句的列題目。是以,要界說列題目必需在第一個查詢語
句中界說。要春聯合查詢成果排序時,也必需應用第一查詢語句中的列名、列題目或許列序號。
在應用UNION 運算符時,應包管每一個結合查詢語句的選擇列表中有雷同數目的表達式,而且每一個查詢選
擇表達式應具有雷同的數據類型,或是可以主動將它們轉換為雷同的數據類型。在主動轉換時,關於數值類
型,體系將低精度的數據類型轉換為高精度的數據類型。
在包含多個查詢的UNION語句中,其履行次序是自左至右,應用括號可以轉變這一履行次序。例如:
查詢1 UNION (查詢2 UNION 查詢3)


3、銜接查詢
經由過程銜接運算符可以完成多個表查詢。銜接是關系數據庫模子的重要特色,也是它差別於其它類型數據庫治理體系的一個標記。
在關系數據庫治理體系中,表樹立時各數據之間的關系不用肯定,常把一個實體的一切信息寄存在
一個表中。當檢索數據時,經由過程銜接操作查詢出寄存在多個表中的分歧實體的信息。銜接操作給用戶帶
來很年夜的靈巧性,他們可以在任什麼時候候增長新的數據類型。為分歧實體創立新的表,而後經由過程銜接停止
查詢。
銜接可以在SELECT 語句的FROM子句或WHERE子句中樹立,貌同實異在FROM子句中指出銜接時有助於
將銜接操作與WHERE子句中的搜刮前提辨別開來。所以,在Transact-SQL中推舉應用這類辦法。

SQL-92尺度所界說的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 p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)(一)內銜接
內銜接查詢操作列出與銜接前提婚配的數據行,它應用比擬運算符比擬被銜接列的列值。

內銜接分三種:
1、等值銜接:在銜接前提中應用等於號(=)運算符比擬被銜接列的列值,其查詢成果中列出被銜接表中的一切列,包含個中的反復列。
2、不等銜接:在銜接前提應用除等於運算符之外的其它比擬運算符比擬被銜接的列的列值。這些運算符包含>、>=、、!。
3、天然銜接:在銜接前提中應用等於(=)運算符比擬被銜接列的列值,但它應用選擇列表指出查詢成果聚集中所包含的列,並刪除銜接表中的反復列。

例,上面應用等值銜接列出authors和publishers表中位於統一城市的作者和出書社:
代碼:SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city又如應用天然銜接,在選擇列表中刪除authors 和publishers 表中反復列(city和state):
復制內容到剪貼板
代碼:SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city

(二)外銜接內銜接時,前往查詢成果聚集中的僅是相符查詢前提( WHERE 搜刮前提或 HAVING 前提)和銜接前提
的行。而采取外銜接時,它前往到查詢成果聚集中的不只包括相符銜接前提的行,並且還包含左表(左外銜接時)、右表(右外銜接時)或兩個邊接表(全外銜接)中的一切數據行。

以下面應用左外銜接將服裝論壇t.vhao.net內容和作者信息銜接起來:

代碼:SELECT a.*,b.* FROM `luntan` LEFT JOIN usertable as b
ON a.username=b.username上面應用全外銜接將city表中的一切作者和user表中的一切作者,和他們地點的城市:

代碼:SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username

(三)穿插銜接
穿插銜接不帶WHERE 子句,它前往被銜接的兩個表一切數據行的笛卡爾積,前往到成果聚集中的數
據行數等於第一個表中相符查詢前提的數據行數乘以第二個表中相符查詢前提的數據行數。
例,titles表中有6類圖書,而publishers表中有8家出書社,則以下穿插銜接檢索到的記載數將等
於6*8=48行。

代碼:SELECT `type`,`pub_name`
FROM `titles` CROSS JOIN `publishers`
ORDER BY `type`

SQL焦點語句(異常適用的幾個技能)
_ArticleContent1_lblContent>拔出數據
向表中添加一個新記載,你要應用SQL INSERT 語句。這裡有一個若何應用這類語句的例子:
代碼:INSERT mytable (mycolumn) VALUES (‘some data') 這個語句把字符串'some data'拔出表mytable的mycolumn字段中。將要被拔出數據的字段的名字在第一個括號中指定,現實的數據在第二個括號中給出。
INSERT 語句的完全句法以下:

代碼:INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES |
Values_list | select_statement} 假如一個表有多個字段,經由過程把字段名和字段值用逗號離隔,你可以向一切的字段中拔出數據。假定表mytable有三個字段first_column,second_column,和third_column。

上面的INSERT語句添加了一條三個字段都有值的完全記載:

代碼:INSERT mytable (first_column,second_column,third_column)
VALUES (‘some data','some more data','yet more data') 留意
你可使用INSERT語句向文本型字段中拔出數據。然則,假如你須要輸出很長的字符串,你應當應用WRITETEXT語句。這部門內容對本書來講太高等了,是以不加評論辯論。要懂得更多的信息,請參考Microsoft SQL Sever 的文檔。
假如你在INSERT 語句中只指定兩個字段和數據會怎樣樣呢?換句話說,你向一個表中拔出一條新記載,但有一個字段沒有供給數據。在這類情形下,有上面的四種能夠:
假如該字段有一個缺省值,該值會被應用。例如,假定你拔出新記載時沒有給字段third_column供給數據,而這個字段有一個缺省值'some value'。在這類情形下,當新記載樹立時會拔出值'some value'。
假如該字段可以接收空值,並且沒出缺省值,則會被拔出空值。
假如該字段不克不及接收空值,並且沒出缺省值,就會湧現毛病。你會收到毛病信息:
The column in table mytable may not be null.
最初,假如該字段是一個標識字段,那末它會主動發生一個新值。當你向一個有標識字段的表中拔出新記載時,只需疏忽該字段,標識字段會給本身賦一個新值。
留意
向一個有標識字段的表中拔出新記載後,你可以用SQL變量@@identity來拜訪新記載
的標識字段的值。斟酌以下的SQL語句:
復制內容到剪貼板
代碼:INSERT mytable (first_column) VALUES(‘some value') [code]
[code]INSERT anothertable(another_first,another_second)
VALUES(@@identity,'some value') 假如表mytable有一個標識字段,該字段的值會被拔出表anothertable的another_first字段。這是由於變量@@identity老是保留最初一次拔出標識字段的值。
字段another_first應當與字段first_column有雷同的數據類型。然則,字段another_first不克不及是應當標識字段。Another_first字段用來保留字段first_column的值。
刪除記載
要從表中刪除一個或多個記載,須要應用SQL DELETE語句。你可以給DELETE 語句供給WHERE 子句。WHERE子句用來選摘要刪除的記載。例如,上面的這個DELETE語句只刪除字段first_column的值等於'Delete Me'的記載:

代碼:DELETE mytable WHERE first_column='Deltet Me' DELETE 語句的完全句法以下:
復制內容到剪貼板
代碼:DELETE [FROM] {table_name|view_name} [WHERE clause] 在SQL SELECT 語句中可使用的任何前提都可以在DELECT 語句的WHERE子句中應用。例如,上面的這個DELETE語句只刪除那些first_column字段的值為'goodbye'或second_column字段的值為'so long'的記載:

代碼:DELETE mytable WHERE first_column='goodby' OR second_column='so long' 假如你不給DELETE 語句供給WHERE 子句,表中的一切記載都將被刪除。你不該該有這類設法主意。假如你想刪除應當表中的一切記載,應應用第十章所講的TRUNCATE TABLE語句。


留意
為何要用TRUNCATE TABLE 語句取代DELETE語句?當你應用TRUNCATE TABLE語句時,記載的刪除是不作記載的。也就是說,這意味著TRUNCATE TABLE 要比DELETE快很多。
更新記載
要修正表中曾經存在的一條或多筆記錄,應應用SQL UPDATE語句。同DELETE語句一樣,UPDATE語句可使用WHERE子句來選擇更新特定的記載。請看這個例子:

代碼:UPDATE mytable SET first_column='Updated!' WHERE second_column='Update Me!' 這個UPDATE 語句更新一切second_column字段的值為'Update Me!'的記載。對一切被選中的記載,字段first_column的值被置為'Updated!'。
上面是UPDATE語句的完全句法:

代碼:UPDATE {table_name|view_name} SET [{table_name|view_name}]
{column_list|variable_list|variable_and_column_list}
[,{column_list2|variable_list2|variable_and_column_list2}…
[,{column_listN|variable_listN|variable_and_column_listN}]]
[WHERE clause] 留意
你可以對文本型字段應用UPDATE語句。然則,假如你須要更新很長的字符串,應應用UPDATETEXT語句。這部門內容對本書來講太高等了,是以不加評論辯論。要懂得更多的信息,請參考Microsoft SQL Sever 的文檔。
假如你不供給WHERE子句,表中的一切記載都將被更新。有時這是有效的。例如,假如你想把表titles中的一切書的價錢加倍,你可使用以下的UPDATE 語句:
你也能夠同時更新多個字段。例如,上面的UPDATE語句同時更新first_column,second_column,和third_column這三個字段:

代碼:UPDATE mytable SET first_column='Updated!'
Second_column='Updated!'
Third_column='Updated!'
WHERE first_column='Update Me1' 技能
SQL疏忽語句中過剩的空格。你可以把SQL語句寫成任何你最輕易讀的格局。
用SELECT 創立記載和表
你或許曾經留意到,INSERT 語句與DELETE語句和UPDATE語句有一點分歧,它一次只操作一個記載。但是,有一個辦法可使INSERT 語句一次添加多個記載。要作到這一點,你須要把INSERT 語句與SELECT 語句聯合起來,象如許:

代碼:INSERT mytable (first_column,second_column)
SELECT another_first,another_second
FROM anothertable
WHERE another_first='Copy Me!' 這個語句從anothertable拷貝記載到mytable.只要表anothertable中字段another_first的值為'Copy Me!'的記載才被拷貝。
當為一個表中的記載樹立備份時,這類情勢的INSERT 語句長短常有效的。在刪除一個表中的記載之前,你可以先用這類辦法把它們拷貝到另外一個表中。
假如你須要拷貝全部表,你可使用SELECT INTO 語句。例如,上面的語句創立了一個名為newtable的新表,該表包括表mytable的一切數據:

代碼:SELECT * INTO newtable FROM mytable 你也能夠指定只要特定的字段被用來創立這個新表。要做到這一點,只需在字段列表中指定你想要拷貝的字段。別的,你可使用WHERE 子句來限制拷貝到新表中的記載。上面的例子只拷貝字段second_columnd的值等於'Copy Me!'的記載的first_column字段。

代碼:SELECT first_column INTO newtable
FROM mytable
WHERE second_column='Copy Me!' 應用SQL修正曾經樹立的表是很艱苦的。例如,假如你向一個表中添加了一個字段,沒有輕易的方法往來來往除它。別的,假如你不當心把一個字段的數據類型給錯了,你將沒有方法轉變它。然則,應用本節中講述的SQL語句,你可以繞過這兩個成績。
例如,假定你想從一個表中刪除一個字段。應用SELECT INTO 語句,你可以創立該表的一個拷貝,但不包括要刪除的字段。這使你既刪除該字段,又保存了不想刪除的數據。
假如你想轉變一個字段的數據類型,你可以創立一個包括准確數據類型字段的新表。創立好該表後,你便可以聯合應用UPDATE語句和SELECT 語句,把本來表中的一切數據拷貝到新表中。經由過程這類辦法,你既可以修正表的構造,又能保留原本的數據。
_ArticleContent1_lblContent>拔出數據
向表中添加一個新記載,你要應用SQL INSERT 語句。這裡有一個若何應用這類語句的例子:
復制內容到剪貼板
代碼:INSERT mytable (mycolumn) VALUES (‘some data') 這個語句把字符串'some data'拔出表mytable的mycolumn字段中。將要被拔出數據的字段的名字在第一個括號中指定,現實的數據在第二個括號中給出。
INSERT 語句的完全句法以下:
復制內容到剪貼板
代碼:INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES | Values_list | select_statement} 假如一個表有多個字段,經由過程把字段名和字段值用逗號離隔,你可以向一切的字段中拔出數據。假定表mytable有三個字段first_column,second_column,和third_column。上面的INSERT語句添加了一條三個字段都有值的完全記載:
復制內容到剪貼板
代碼:INSERT mytable (first_column,second_column,third_column) VALUES (‘some data','some more data','yet more data')
[code]
留意
你可使用INSERT語句向文本型字段中拔出數據。然則,假如你須要輸出很長的字符串,你應當應用WRITETEXT語句。這部門內容對本書來講太高等了,是以不加評論辯論。要懂得更多的信息,請參考Microsoft SQL Sever 的文檔。
假如你在INSERT 語句中只指定兩個字段和數據會怎樣樣呢?換句話說,你向一個表中拔出一條新記載,但有一個字段沒有供給數據。在這類情形下,有上面的四種能夠:
假如該字段有一個缺省值,該值會被應用。例如,假定你拔出新記載時沒有給字段third_column供給數據,而這個字段有一個缺省值'some value'。在這類情形下,當新記載樹立時會拔出值'some value'。
假如該字段可以接收空值,並且沒出缺省值,則會被拔出空值。
假如該字段不克不及接收空值,並且沒出缺省值,就會湧現毛病。你會收到毛病信息:
The column in table mytable may not be null.
最初,假如該字段是一個標識字段,那末它會主動發生一個新值。當你向一個有標識字段的表中拔出新記載時,只需疏忽該字段,標識字段會給本身賦一個新值。
留意
向一個有標識字段的表中拔出新記載後,你可以用SQL變量@@identity來拜訪新記載
的標識字段的值。斟酌以下的SQL語句:
[code]INSERT mytable (first_column) VALUES(‘some value')
復制內容到剪貼板
代碼:INSERT anothertable(another_first,another_second) VALUES(@@identity,'some value') 假如表mytable有一個標識字段,該字段的值會被拔出表anothertable的another_first字段。這是由於變量@@identity老是保留最初一次拔出標識字段的值。
字段another_first應當與字段first_column有雷同的數據類型。然則,字段another_first不克不及是應當標識字段。Another_first字段用來保留字段first_column的值。
刪除記載
要從表中刪除一個或多個記載,須要應用SQL DELETE語句。你可以給DELETE 語句供給WHERE 子句。WHERE子句用來選摘要刪除的記載。例如,上面的這個DELETE語句只刪除字段first_column的值等於'Delete Me'的記載:
復制內容到剪貼板
代碼:DELETE mytable WHERE first_column='Deltet Me' DELETE 語句的完全句法以下:
復制內容到剪貼板
代碼:DELETE [FROM] {table_name|view_name} [WHERE clause] 在SQL SELECT 語句中可使用的任何前提都可以在DELECT 語句的WHERE子句中應用。例如,上面的這個DELETE語句只刪除那些first_column字段的值為'goodbye'或second_column字段的值為'so long'的記載:
復制內容到剪貼板
代碼:DELETE mytable WHERE first_column='goodby' OR second_column='so long' 假如你不給DELETE 語句供給WHERE 子句,表中的一切記載都將被刪除。你不該該有這類設法主意。假如你想刪除應當表中的一切記載,應應用第十章所講的TRUNCATE TABLE語句。
留意
為何要用TRUNCATE TABLE 語句取代DELETE語句?當你應用TRUNCATE TABLE語句時,記載的刪除是不作記載的。也就是說,這意味著TRUNCATE TABLE 要比DELETE快很多。
更新記載
要修正表中曾經存在的一條或多筆記錄,應應用SQL UPDATE語句。同DELETE語句一樣,UPDATE語句可使用WHERE子句來選擇更新特定的記載。請看這個例子:
復制內容到剪貼板
代碼:UPDATE mytable SET first_column='Updated!' WHERE second_column='Update Me!' 這個UPDATE 語句更新一切second_column字段的值為'Update Me!'的記載。對一切被選中的記載,字段first_column的值被置為'Updated!'。
上面是UPDATE語句的完全句法:
復制內容到剪貼板
代碼:UPDATE {table_name|view_name} SET [{table_name|view_name}]
{column_list|variable_list|variable_and_column_list}
[,{column_list2|variable_list2|variable_and_column_list2}…
[,{column_listN|variable_listN|variable_and_column_listN}]]
[WHERE clause] 留意
你可以對文本型字段應用UPDATE語句。然則,假如你須要更新很長的字符串,應應用UPDATETEXT語句。這部門內容對本書來講太高等了,是以不加評論辯論。要懂得更多的信息,請參考Microsoft SQL Sever 的文檔。
假如你不供給WHERE子句,表中的一切記載都將被更新。有時這是有效的。例如,假如你想把表titles中的一切書的價錢加倍,你可使用以下的UPDATE 語句:
你也能夠同時更新多個字段。例如,上面的UPDATE語句同時更新first_column,second_column,和third_column這三個字段:
復制內容到剪貼板
代碼:UPDATE mytable SET first_column='Updated!'
Second_column='Updated!'
Third_column='Updated!'
WHERE first_column='Update Me1' 技能
SQL疏忽語句中過剩的空格。你可以把SQL語句寫成任何你最輕易讀的格局。
用SELECT 創立記載和表
你或許曾經留意到,INSERT 語句與DELETE語句和UPDATE語句有一點分歧,它一次只操作一個記載。但是,有一個辦法可使INSERT 語句一次添加多個記載。要作到這一點,你須要把INSERT 語句與SELECT 語句聯合起來,象如許:
復制內容到剪貼板
代碼:INSERT mytable (first_column,second_column)
SELECT another_first,another_second
FROM anothertable
WHERE another_first='Copy Me!' 這個語句從anothertable拷貝記載到mytable.只要表anothertable中字段another_first的值為'Copy Me!'的記載才被拷貝。
當為一個表中的記載樹立備份時,這類情勢的INSERT 語句長短常有效的。在刪除一個表中的記載之前,你可以先用這類辦法把它們拷貝到另外一個表中。
假如你須要拷貝全部表,你可使用SELECT INTO 語句。例如,上面的語句創立了一個名為newtable的新表,該表包括表mytable的一切數據:
復制內容到剪貼板
代碼:SELECT * INTO newtable FROM mytable 你也能夠指定只要特定的字段被用來創立這個新表。要做到這一點,只需在字段列表中指定你想要拷貝的字段。別的,你可使用WHERE 子句來限制拷貝到新表中的記載。上面的例子只拷貝字段second_columnd的值等於'Copy Me!'的記載的first_column字段。
復制內容到剪貼板
代碼:SELECT first_column INTO newtable
FROM mytable
WHERE second_column='Copy Me!' 應用SQL修正曾經樹立的表是很艱苦的。例如,假如你向一個表中添加了一個字段,沒有輕易的方法往來來往除它。別的,假如你不當心把一個字段的數據類型給錯了,你將沒有方法轉變它。然則,應用本節中講述的SQL語句,你可以繞過這兩個成績。
例如,假定你想從一個表中刪除一個字段。應用SELECT INTO 語句,你可以創立該表的一個拷貝,但不包括要刪除的字段。這使你既刪除該字段,又保存了不想刪除的數據。
假如你想轉變一個字段的數據類型,你可以創立一個包括准確數據類型字段的新表。創立好該表後,你便可以聯合應用UPDATE語句和SELECT 語句,把本來表中的一切數據拷貝到新表中。經由過程這類辦法,你既可以修正表的構造,又能保留原本的數據。

SQL語法,SQL語句年夜全,SQL基本

SQL 語法參考手冊(SQL)/數據類型
2006-07-24 07:42
《SQL 語法參考手冊(SQL)》
DB2 供給了干系式材料庫的查詢說話 SQL (Structured Query Language),是一種異常白話化、既易學又易懂的語法。此一說話簡直是每一個材料庫體系都必需供給的,用以表現干系式的*作,包括了材料的界說(DDL)和材料的處置(DML)。SQL本來拼成SEQUEL,這說話的原型以“體系 R“的名字在 IBM 聖荷西試驗室完成,經由IBM外部及其他的很多應用性及效力測試,其成果相當使人滿足,並決議在體系R 的技巧基本成長出來 IBM 的產物。並且美國國度尺度學會(ANSI)及國際尺度化組織(ISO)在1987遵守一個簡直是以 IBM SQL 為基本的尺度干系式材料說話界說。
1、材料界說 DDL(Data Definition Language)
材料定說話是指對材料的格局和形狀下界說的說話,他是每一個材料庫要樹立時刻時起首要面臨的,舉凡材料分哪些表格關系、表格內的有什麽欄位主鍵、表格和表格之間相互參考的關系等等,都是在開端的時刻所必需計劃好的。
1、建表格:
Create TABLE table_name(
column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
column2 DATATYPE [NOT NULL],
...)
解釋: 
DATATYPE --是材料的格局,詳見表。
NUT NULL --可弗成以許可材料有空的(還沒有有材料填入)。
PRIMARY KEY --是本表的主鍵。
2、更改表格 
Alter TABLE table_name
ADD COLUMN column_name DATATYPE
解釋:增長一個欄位(沒有刪除某個欄位的語法。
Alter TABLE table_name
ADD PRIMARY KEY (column_name)
解釋:更改表得的界說把某個欄位設為主鍵。
Alter TABLE table_name
Drop PRIMARY KEY (column_name)
解釋:把主鍵的界說刪除。
3、樹立索引 
Create INDEX index_name ON table_name (column_name)
解釋:對某個表格的欄位樹立索引以增長查詢時的速度。
4、刪除 
Drop table_name
Drop index_name
2、的材料形狀 DATATYPEs
smallint
16 位元的整數。
interger
32 位元的整數。
decimal(p,s)
p 准確值和 s 年夜小的十進位整數,准確值p是指全體有幾個數(digits)年夜小值,s是指小數
點後有幾位數。假如沒有特殊指定,則體系會設為 p=5; s=0 。
float
32位元的實數。
double
64位元的實數。
char(n)
n 長度的字串,n不克不及跨越 254。
varchar(n)
長度不固定且其最年夜長度為 n 的字串,n不克不及跨越 4000。
graphic(n)
和 char(n) 一樣,不外其單元是兩個字元 double-bytes, n不克不及跨越127。這個形狀是為
了增援兩個字元長度的字體,例如中文字。
vargraphic(n)
可變長度且其最年夜長度為 n 的雙字元字串,n不克不及跨越 2000。
date
包括了 年份、月份、日期。
time
包括了 小時、分鐘、秒。
timestamp
包括了 年、月、日、時、分、秒、千分之一秒。
3、材料*作 DML (Data Manipulation Language)
材料界說好之後接上去的就是材料的*作。材料的*作不過乎增長材料(insert)、查詢材料(query)、更改材料(update) 、刪除材料(delete)四種形式,以下分離引見他們的語法:
1、增長材料:
Insert INTO table_name (column1,column2,...)
valueS ( value1,value2, ...)
解釋:
1.若沒有指定column 體系則會按表格內的欄位次序填入材料。
2.欄位的材料形狀和所填入的材料必需吻合。
3.table_name 也能夠是景不雅 view_name。
Insert INTO table_name (column1,column2,...)
Select columnx,columny,... FROM another_table
解釋:也能夠經由一個子查詢(subquery)把其余表格的材料填入。
2、查詢材料:
根本查詢
Select column1,columns2,...
FROM table_name
解釋:把table_name 的特定欄位材料全體列出來
Select *
FROM table_name
Where column1 = xxx
[AND column2 〉 yyy] [OR column3 〈〉 zzz]
解釋:
1.'*'表現全體的欄位都列出來。
2.Where 之後是接前提式,把相符前提的材料列出來。
Select column1,column2
FROM table_name
orDER BY column2 [DESC]
解釋:ORDER BY 是指定以某個欄位做排序,[DESC]是指從年夜到小分列,若沒有指明,則是從小到年夜
分列
組合查詢
組合查詢是指所查詢得材料起源其實不只要單一的表格,而是結合一個以上的
表格能力夠獲得成果的。
Select *
FROM table1,table2
Where table1.colum1=table2.column1
解釋:
1.查詢兩個表格中個中 column1 值雷同的材料。
2.固然兩個表格互相比擬的欄位,其材料形狀必需雷同。
3.一個龐雜的查詢其動用到的表格能夠會許多個。
整合性的查詢:
Select COUNT (*)
FROM table_name
Where column_name = xxx
解釋:
查詢相符前提的材料共有幾筆。
Select SUM(column1)
FROM table_name
解釋:
1.盤算出總和,所選的欄位必需是可數的數字形狀。
2.除此之外還有 AVG() 是盤算均勻、MAX()、MIN()盤算最年夜最小值的整合性查詢。
Select column1,AVG(column2)
FROM table_name
GROUP BY column1
HAVING AVG(column2) 〉 xxx
解釋:
1.GROUP BY: 以column1 為一組盤算 column2 的均勻值必需和 AVG、SUM等整合性查詢的症結字
一路應用。
2.HAVING : 必需和 GROUP BY 一路應用作為整合性的限制。
復合性的查詢
Select *
FROM table_name1
Where EXISTS (
Select *
FROM table_name2
Where conditions )
解釋:
1.Where 的 conditions 可所以別的一個的 query。
2.EXISTS 在此是指存在與否。
Select *
FROM table_name1
Where column1 IN (
Select column1
FROM table_name2
Where conditions )
解釋: 
1. IN 後面接的是一個聚集,表現column1 存在聚集外面。
2. Select 出來的材料形狀必需相符 column1。
其他查詢
Select *
FROM table_name1
Where column1 LIKE 'x%'
解釋:LIKE 必需和後面的'x%' 相照應表現以 x為開首的字串。
Select *
FROM table_name1
Where column1 IN ('xxx','yyy',..)
解釋:IN 後面接的是一個聚集,表現column1 存在聚集外面。
Select *
FROM table_name1
Where column1 BETWEEN xx AND yy
解釋:BETWEEN 表現 column1 的值介於 xx 和 yy 之間。
3、更改材料:
Update table_name
SET column1='xxx'
Where conditoins
解釋:
1.更改某個欄位設定其值為'xxx'。
2.conditions 是所要相符的前提、若沒有 Where 則全部 table 的誰人欄位都邑全體被更改。
4、刪除材料:
Delete FROM table_name
Where conditions
解釋:刪除相符前提的材料。
解釋:關於Where前提前面假如包括有日期的比擬,分歧數據庫有分歧的表達式。詳細以下:
(1)假如是ACCESS數據庫,則為:Where mydate〉#2000-01-01#
(2)假如是ORACLE數據庫,則為:Where mydate〉cast('2000-01-01' as date)
或:Where mydate〉to_date('2000-01-01','yyyy-mm-dd')
在Delphi中寫成:
thedate='2000-01-01';
query1.SQL.add('select * from abc where mydate〉cast('+''''+thedate+''''+' as date)');
假如比擬日期時光型,則為:
Where mydatetime〉to_date('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss')
Recordset對象一些有效的屬性"/〉 援用來自 增長一個 :Recordset對象一些有效的屬性
rs.CursorType=
rs.CursorLocation=
rs.LockType =
rs.CacheSize=
rs.Pagesize=
rs.Pagecount=
rs.RecordCount=
''---- CursorType Values ----
Const adOpenForwardOnly = 0 僅向前
Const adOpenKeyset = 1 鍵集游標
Const adOpenDynamic = 2 靜態游標
Const adOpenStatic = 3 靜態游標
''---- LockType Values ----
Const adLockReadOnly = 1 默許值,只讀
Const adLockPessimistic = 2 守舊式記載鎖定
Const adLockOptimistic = 3 開放式記載鎖定,只在挪用Update辦法時鎖定記載
Const adLockBatchOptimistic = 4 開放式批更新
''---- CursorLocation Values ----
Const adUseServer = 2
Const adUseClient = 3
Set rs=Server.CreateObject("ADODB.Rrecordset")
rs.Open.sqlst,conn,1,1 '讀取
rs.Open sqlst,conn,1,2 '新增,修正,或刪除)
下一頁 :《SQL SERVER的數據類型》
〉〉〉---------我想分頁!--這麼長的文章,在這裡來個分頁多好啊!哈哈----------〈〈〈
《SQL SERVER的數據類型》
1.SQL SERVER的數據類型
  數據類弄是數據的一種屬性,表現數據所表現信息的類型。任何一種盤算機說話都界說了本身的數據類型。固然,分歧的法式說話都具有分歧的特色,所界說的數據類型的各類和稱號都或多或少有些分歧。SQLServer 供給了 25 種數據類型:
  ·Binary [(n)]
  ·Varbinary [(n)]
  ·Char [(n)]
  ·Varchar[(n)]
  ·Nchar[(n)]
  ·Nvarchar[(n)]
  ·Datetime
  ·Smalldatetime
  ·Decimal[(p[,s])]
  ·Numeric[(p[,s])]
  ·Float[(n)]
  ·Real
  ·Int
  ·Smallint
  ·Tinyint
  ·Money
  ·Smallmoney
  ·Bit
  ·Cursor
  ·Sysname
  ·Timestamp
  ·Uniqueidentifier
  ·Text
  ·Image
  ·Ntext
(1)二進制數據類型
  二進制數據包含 Binary、Varbinary 和 Image
  Binary 數據類型既可所以固定長度的(Binary),也能夠是變長度的。
  Binary[(n)] 是 n 位固定的二進制數據。個中,n 的取值規模是從 1 到 8000。其存儲窨的年夜小是 n + 4 個字節。
  Varbinary[(n)] 是 n 位變長度的二進制數據。個中,n 的取值規模是從 1 到 8000。其存儲窨的年夜小是 n + 4個字節,不是n 個字節。
  在 Image 數據類型中存儲的數據是以位字符串存儲的,不是由 SQL Server 說明的,必需由運用法式來說明。例如,運用法式可使用BMP、TIEF、GIF 和 JPEG 格局把數據存儲在 Image 數據類型中。
(2)字符數據類型
  字符數據的類型包含 Char,Varchar 和 Text
  字符數據是由任何字母、符號和數字隨意率性組合而成的數據。
  Varchar 是變長字符數據,其長度不跨越 8KB。Char 是定長字符數據,其長度最多為 8KB。跨越 8KB 的ASCII 數據可使用Text數據類型存儲。例如,由於 Html 文檔全體都是 ASCII 字符,而且在普通情形下長度跨越 8KB,所以這些文檔可以 Text 數據類型存儲在SQL Server 中。
(3)Unicode 數據類型
  Unicode 數據類型包含 Nchar,Nvarchar 和Ntext
  在 Microsoft SQL Server 中,傳統的非 Unicode 數據類型許可應用由特定字符集界說的字符。在 SQL Server裝置進程中,許可選擇一種字符集。應用 Unicode 數據類型,列中可以存儲任何由Unicode 尺度界說的字符。在 Unicode 尺度中,包含了以各類字符集界說的全體字符。應用Unicode數據類型,所克服的窨是應用非 Unicode 數據類型所占用的窨年夜小的兩倍。
  在 SQL Server 中,Unicode 數據以 Nchar、Nvarchar 和 Ntext 數據類型存儲。應用這類字符類型存儲的列可以存儲多個字符集中的字符。當列的長度變更時,應當應用Nvarchar 字符類型,這時候最多可以存儲 4000 個字符。當列的長度固定不變時,應當應用 Nchar 字符類型,異樣,這時候最多可以存儲4000 個字符。當應用 Ntext 數據類型時,該列可以存儲多於 4000 個字符。
(4)日期和時光數據類型
  日期和時光數據類型包含 Datetime 和 Smalldatetime兩品種型
  日期和時光數據類型由有用的日期和時光構成。例如,有用的日期和時光數據包含“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個數據類型是日期在前,時光在後一個數據類型是剎那間在前,日期在後。在 Microsoft SQL Server中,日期和時光數據類型包含Datetime 和 Smalldatetime 兩品種型時,所存儲的日期規模是從 1753 年 1 月 1 日開端,到9999 年12 月 31 日停止(每個值請求 8 個存儲字節)。應用 Smalldatetime 數據類型時,所存儲的日期規模是 1900年 1 月 1日 開端,到 2079 年 12 月 31 日停止(每個值請求 4 個存儲字節)。
  日期的格局可以設定。設置日期格局的敕令以下:
  Set DateFormat {format | @format _var|
  個中,format | @format_var 是日期的次序。有用的參數包含 MDY、DMY、YMD、YDM、MYD 和 DYM。在默許情形下,日期格局為MDY。
  例如,當履行 Set DateFormat YMD 以後,日期的格局為年 月 日 情勢;當履行 Set DateFormat DMY 以後,日期的格局為日 月豐年 情勢
(5)數字數據類型
  數字數據只包括數字。數字數據類型包含負數和正數、小數(浮點數)和整數
  整數由正整數和負整數構成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整數存儲的數據類型是    Int,Smallint和 Tinyint。Int 數據類型存儲數據的規模年夜於 Smallint 數據類型存儲數據的規模,而 Smallint 據類型存儲數據的規模年夜於Tinyint 數據類型存儲數據的規模。應用 Int 數據狗昔存儲數據的規模是從 -2 147 483 648 到 2 147 483 647(每個值請求4個字節存儲空間)。應用 Smallint 數據類型時,存儲數據的規模從 -32 768 到 32 767(每個值請求2個字節存儲空間)。應用Tinyint 數據類型時,存儲數據的規模是從0 到255(每個值請求1個字節存儲空間)。
  准確小婁數據在 SQL Server 中的數據類型是 Decimal 和 Numeric。這類數據所占的存儲空間依據該數據的位數後的位數來肯定。
  在SQL Server 中,近似小數數據的數據類型是 Float 和 Real。例如,三分之一這個分數記作。3333333,當應用近似數據類型時能精確表現。是以,從體系中檢索到的數據能夠與存儲在該列中數據不完整一樣。
(6)泉幣數據表現正的或許負的泉幣數目 。
  在 Microsoft SQL Server 中,泉幣數據的數據類型是Money 和 Smallmoney
  Money數據類型請求 8 個存儲字節,Smallmoney 數據類型請求 4 個存儲字節。
(7)特別數據類型
  特別數據類型包含後面沒有提過的數據類型。特別的數據類型有3種,即    Timestamp、Bit 和 Uniqueidentifier。
  Timestamp 用於表現SQL Server 運動的前後次序,以二進投影的格局表現。Timestamp 數據與拔出數據或許日期和時光沒有關系。
  Bit 由 1 或許 0 構成。當表現真或許假、ON 或許 OFF 時,應用 Bit 數據類型。例如,訊問能否是每次拜訪的客戶機要求可以存儲在這類數據類型的列中。
  Uniqueidentifier 由 16 字節的十六進制數字構成,表現一個全局獨一的。當表的記載行請求獨一時,GUID長短常有效。例如,在客戶標識號列應用這類數據類型可以差別分歧的客戶。
2.用戶界說的數據類型
  用戶界說的數據類型基於在 Microsoft SQL Server 中供給的數據類型。當幾個表中必需存儲統一種數據類型時,而且為包管這些列有雷同的數據類型、長度和可空性時,可使用用戶界說的數據類型。例如,可界說一種稱為  postal_code 的數據類型,它基於 Char 數據類型。
  當創立用戶界說的數據類型時,必需供給三個數:數據類型的稱號、所基於的體系數據類型和數據類型的可空性。
(1)創立用戶界說的數據類型
  創立用戶界說的數據類型可使用 Transact-SQL 語句。體系存儲進程 sp_addtype 可以來創立用戶界說的數據類型。其語法情勢以下:
  sp_addtype {type},[,system_data_bype][,'null_type']
  個中,type 是用戶界說的數據類型的稱號。system_data_type 是體系供給的數據類型,例如 Decimal、Int、Char   等等。 null_type 表現該數據類型是若何處置空值的,必需應用單引號惹起來,例如'NULL'、'NOT NULL'或許'NONULL'。
  例子:
  Use cust
  Exec sp_addtype ssn,'Varchar(11)',"Not Null'
  創立一個用戶界說的數據類型 ssn,其基於的體系數據類型是變長為11 的字符,不許可空。
  例子:
  Use cust
  Exec sp_addtype birthday,datetime,'Null'
  創立一個用戶界說的數據類型 birthday,其基於的體系數據類型是 DateTime,許可空。
  例子:
  Use master
  Exec sp_addtype telephone,'varchar(24),'Not Null'
  Eexc sp_addtype fax,'varchar(24)','Null'
  創立兩個數據類型,即 telephone 和 fax
(2)刪除用戶界說的數據類型
  當用戶界說的數據類型不須要時,可刪除。刪除用戶界說的數據類型的敕令是 sp_droptype {'type'}。
  例子:
  Use master
  Exec sp_droptype 'ssn'
  留意:當表中的列還正在應用用戶界說的數據類型時,或許在其下面還綁定有默許或許規矩時,這類用戶界說的數據類型不克不及刪除。
  以下為SQL SERVER7.0以上版本的字段類型解釋。SQL SERVER6.5的字段類型解釋請參考SQL SERVER供給的解釋。
字段類型 描寫
bit 0或1的整型數字
int 從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數字
smallint 從-2^15(-32,768)到2^15(32,767)的整型數字
tinyint 從0到255的整型數字
decimal 從-10^38到10^38-1的定精度與有用位數的數字
numeric decimal的同義詞
money 從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的泉幣數據,最小泉幣單元千分之十
smallmoney 從-214,748.3648到214,748.3647的泉幣數據,最小泉幣單元千分之十
float 從-1.79E+308到1.79E+308可變精度的數字
real 從-3.04E+38到3.04E+38可變精度的數字
datetime 從1753年1月1日到9999年12日31的日期和時光數據,最小時光單元為百分之三秒或3.33毫秒
smalldatetime 從1900年1月1日到2079年6月6日的日期和時光數據,最小時光單元為分鐘
timestamp 時光戳,一個數據庫寬度的獨一數字
uniqueidentifier 全球獨一標識符GUID
char 定長非Unicode的字符型數據,最年夜長度為8000
varchar 變長非Unicode的字符型數據,最年夜長度為8000
text 變長非Unicode的字符型數據,最年夜長度為2^31-1(2G)
nchar 定長Unicode的字符型數據,最年夜長度為8000
nvarchar 變長Unicode的字符型數據,最年夜長度為8000
ntext 變長Unicode的字符型數據,最年夜長度為2^31-1(2G)
binary 定長二進制數據,最年夜長度為8000
varbinary 變長二進制數據,最年夜長度為8000
image 變長二進制數據,最年夜長度為2^31-1(2G)
〉〉〉---------我想分頁!--這麼長的文章,在這裡來個分頁多好啊!哈哈----------〈〈〈
《SQL語句的根本語法》
一.Select語句的完全語法為:
Select[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}
FROM tableexpression[,…][IN externaldatabase]
[Where…]
[GROUP BY…]
[HAVING…]
[ORDER BY…]
[WITH OWNERACCESS OPTION]
解釋:
用中括號([])括起來的部門表現是可選的,用年夜括號({})括起來的部門是表現必需從當選擇個中的一個。
1 FROM子句
FROM子句指定了Select語句中字段的起源。FROM子句前面是包括一個或多個的表達式(由逗號離開),個中的表達式可為單一表稱號、已保留的查詢或由 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 獲得的復合成果。假如表或查詢存儲在內部數據庫,在IN 子句以後指明其完全途徑。
例:以下SQL語句前往一切有訂單的客戶:
Select orderID,Customer.customerID
FROM orders Customers
Where orders.CustomerID=Customers.CustomeersID
2 ALL、DISTINCT、DISTINCTROW、TOP謂詞
(1) ALL 前往知足SQL語句前提的一切記載。假如沒有指明這個謂詞,默許為ALL。
例:Select ALL FirstName,LastName
FROM Employees
(2) DISTINCT 假如有多個記載的選擇字段的數據雷同,只前往一個。
(3) DISTINCTROW 假如有反復的記載,只前往一個
(4) TOP顯示查詢頭尾若干記載。也可前往記載的百分比,這是要用 TOP N PERCENT子句(個中N 表現百分比)
例:前往5%訂貨額最年夜的訂單
Select TOP 5 PERCENT*
FROM [ order Details]
orDER BY UnitPrice*Quantity*(1-Discount) DESC
3 用 AS 子句為字段取別號
假如想為前往的列取一個新的題目,或許,經由對字段的盤算或總結以後,發生了一個新的值,願望把它放到一個新的列裡顯示,則用AS保存。
例:前往FirstName字段取別號為NickName
Select FirstName AS NickName ,LastName ,City
FROM Employees
例:前往新的一列顯示庫存價值
Select ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock
FROM Products
二 .Where 子句指定查詢前提
1 比擬運算符
比擬運算符 寄義
= 等於
〉 年夜於
〈 小於
〉= 年夜於等於
〈= 小於等於
〈〉 不等於
!〉 不年夜於
!〈 不小於
例:前往96年1月的訂單
Select orderID, CustomerID, orderDate
FROM orders
Where orderDate〉#1/1/96# AND orderDate〈#1/30/96#
留意:
Mcirosoft JET SQL 中,日期用‘#'定界。日期也能夠用Datevalue()函數來取代。在比擬字符型的數據時,要加上單引號'',尾空格在比擬中被疏忽。
例:
Where orderDate〉#96-1-1#
也能夠表現為:
Where orderDate〉Datevalue(‘1/1/96')
應用 NOT 表達式求反。
例:檢查96年1月1日今後的訂單
Where Not orderDate〈=#1/1/96#
2 規模(BETWEEN 和 NOT BETWEEN)
BETWEEN …AND…運算符指定了要搜刮的一個閉區間。
例:前往96年1月到96年2月的訂單。
Where orderDate Between #1/1/96# And #2/1/96#
3 列表(IN ,NOT IN)
IN 運算符用來婚配列表中的任何一個值。IN子句可以取代用OR子句銜接的連續串的前提。
例:要找出住在 London、Paris或Berlin的一切客戶
Select CustomerID, CompanyName, ContactName, City
FROM Customers
Where City In(‘London',' Paris',' Berlin')
4 形式婚配(LIKE)
LIKE運算符磨練一個包括字符串數據的字段值能否婚配一指定形式。
LIKE運算符裡應用的通配符
通配符 寄義
? 任何一個單一的字符
* 隨意率性長度的字符
# 0~9之間的單一數字
[字符列表] 在字符列內外的任一值
[!字符列表] 不在字符列內外的任一值
- 指定字符規模,雙方的值分離為其高低限
例:前往郵政編碼在(171)555-0000到(171)555-9999之間的客戶
Select CustomerID ,CompanyName,City,Phone
FROM Customers
Where Phone Like ‘(171)555-####'
LIKE運算符的一些款式及寄義
款式 寄義 不相符
LIKE ‘A*' A後跟隨意率性長度的字符 Bc,c255
LIKE'5
' 5*5 555
LIKE'5?5' 5與5之間有隨意率性一個字符 55,5wer5
LIKE'5##5' 5235,5005 5kd5,5346
LIKE'[a-z]' a-z間的隨意率性一個字符 5,%
LIKE'[!0-9]' 非0-9間的隨意率性一個字符 0,1
LIKE'[[]' 1,*
三 .用ORDER BY子句排序成果
orDER子句按一個或多個(最多16個)字段排序查詢成果,可所以升序(ASC)也能夠是降序(DESC),缺省是升序。ORDER子句平日放在SQL語句的最初。
orDER子句中界說了多個字段,則依照字段的前後次序排序。
例:
Select ProductName,UnitPrice, UnitInStock
FROM Products
orDER BY UnitInStock DESC , UnitPrice DESC, ProductName
orDER BY 子句中可以用字段在選擇列表中的地位號取代字段名,可以混雜字段名和地位號。
例:上面的語句發生與上列雷同的後果。
Select ProductName,UnitPrice, UnitInStock
FROM Products
orDER BY 1 DESC , 2 DESC,3
四 .應用銜接關系完成多表查詢
例:找出統一個城市中供給商和客戶的名字
Select Customers.CompanyName, Suppliers.ComPany.Name
FROM Customers, Suppliers
Where Customers.City=Suppliers.City
例:找生產品庫存量年夜於統一種產物的訂單的數目的產物和訂單
Select ProductName,OrderID, UnitInStock, Quantity
FROM Products, [Order Deails]
Where Product.productID=[Order Details].ProductID
AND UnitsInStock〉Quantity
另外一種辦法是用 Microsof JET SQL 獨有的 JNNER JOIN
語法:
FROM table1 INNER JOIN table2
ON table1.field1 comparision table2.field2
個中comparision 就是後面Where子句用到的比擬運算符。
Select FirstName,lastName,OrderID,CustomerID,OrderDate
FROM Employees
INNER JOIN orders ON Employees.EmployeeID=Orders.EmployeeID
留意:
INNER JOIN不克不及銜接Memo OLE Object Single Double 數據類型字段。
在一個JOIN語句中銜接多個ON子句
語法:
Select fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2 or
ON table1.field3 compopr table2.field3
也能夠
Select fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOER] [( ]tablex[INNER JOIN]
ON table1.field1 compopr table2.field1
ON table1.field2 compopr table2.field2
ON table1.field3 compopr table2.field3
內部銜接前往更多記載,在成果中保存不婚配的記載,不論存不存在知足前提的記載都要前往另外一側的一切記載。
FROM table [LEFT|RIGHT]JOIN table2
ON table1.field1comparision table.field2
用左銜接來樹立內部銜接,在表達式的右邊的表會顯示其一切的數據
例:不論有無訂貨量,前往一切商品
Select ProductName ,OrderID
FROM Products
LEFT JOIN orders ON Products.PrductsID=Orders.ProductID
右銜接與左銜接的差異在於:不論左邊內外有無婚配的記載,它都從左邊表中前往一切記載。
例:假如想懂得客戶的信息,並統計各個地域的客戶散布,這時候可以用一個右銜接,即便某個地域沒有客戶,也要前往客戶信息。
空值不會互相婚配,可以經由過程外銜接能力測試被銜接的某個表的字段能否有空值。
Select *
FROM talbe1
LEFT JOIN table2 ON table1.a=table2.c
1 銜接查詢中應用Iif函數完成以0值顯示空值
Iif表達式: Iif(IsNull(Amount,0,Amout)
例:不管訂貨年夜於或小於¥50,都要前往一個標記。
Iif([Amount]〉50,?Big order?,?Small order?)
五. 分組和總結查詢成果
在SQL的語法裡,GROUP BY和HAVING子句用來對數據停止匯總。GROUP BY子句指清楚明了依照哪幾個字段來分組,而將記載分組後,用HAVING子句過濾這些記載。
GROUP BY 子句的語法
Select fidldlist
FROM table
Where criteria
[GROUP BY groupfieldlist [HAVING groupcriteria]]
注:Microsoft Jet數據庫 Jet 不克不及對備注或OLE對象字段分組。
GROUP BY字段中的Null值以備分組然則不克不及被省略。
在任何SQL算計函數中不盤算Null值。
GROUP BY子句後最多可以帶有十個字段,排序優先級按從左到右的次序分列。
例:在‘WA'地域的雇員表中按頭銜分組後,找出具有一致頭銜的雇員數量年夜於1人的一切頭銜。
Select Title ,Count(Title) as Total
FROM Employees
Where Region = ‘WA'
GROUP BY Title
HAVING Count(Title)〉1
JET SQL 中的聚積函數
集合函數 意義
SUM ( ) 乞降
AVG ( ) 均勻值
COUNT ( ) 表達式中記載的數量
COUNT (* ) 盤算記載的數量
MAX 最年夜值
MIN 最小值
VAR 方差
STDEV 尺度誤差
FIRST 第一個值
LAST 最初一個值
六. 用Parameters聲明創立參數查詢
Parameters聲明的語法:
PARAMETERS name datatype[,name datatype[, …]]
個中name 是參數的標記符,可以經由過程標記符援用參數.
Datatype解釋參數的數據類型.
應用時要把PARAMETERS 聲明置於任何其他語句之前.
例:
PARAMETERS[Low price] Currency,[Beginning date]datatime
Select orderID ,OrderAmount
FROM orders
Where orderAMount〉[low price]
AND orderDate〉=[Beginning date]
七. 功效查詢
所謂功效查詢,現實上是一種操作查詢,它可以對數據庫停止疾速高效的操作.它以選擇查詢為目標,遴選出相符前提的數據,再對數據停止批處置.功效查詢包含更新查詢,刪除查詢,添加查詢,和生成表查詢.
1 更新查詢
Update子句可以同時更改一個或多個表中的數據.它也能夠同時更改多個字段的值.
更新查詢語法:
Update 表名
SET 新值
Where 原則
例:英國客戶的訂貨量增長5%,貨運量增長3%
Update OEDERS
SET orderAmount = orderAmount *1.1
Freight = Freight*1.03
Where ShipCountry = ‘UK'
2 刪除查詢
Delete子句可使用戶刪除年夜量的過時的或冗於的數據.
注:刪除查詢的對象是全部記載.
Delete子句的語法:
Delete [表名.*]
FROM 起源表
Where 原則
例: 要刪除一切94年前的訂單
Delete *
FROM orders
Where orderData〈#94-1-1#
3 追加查詢
Insert子句可以將一個或一組記載追加到一個或多個表的尾部.
INTO 子句指定接收新記載的表
valueS 症結字指定新記載所包括的數據值.
Insert 子句的語法:
INSETR INTO 目標表或查詢(字段1,字段2,…)
valueS(數值1,數值2,…)
例:增長一個客戶
Insert INTO Employees(FirstName,LastName,title)
valueS(‘Harry','Washington','Trainee')
4 生成表查詢
可以一次性地把一切知足前提的記載拷貝到一張新表中.平日制造記載的備份或正本或作為報表的基本.
Select INTO子句用來創立生成表查詢語法:
Select 字段1,字段2,…
INTO 新表[IN 內部數據庫]
FROM 起源數據庫
Where 原則
例:為訂單制造一個存檔備份
Select *
INTO ordersArchive
FROM orders
八. 結合查詢
UNION運算可以把多個查詢的成果歸並到一個成果集裡顯示.
UNION運算的普通語法:
[表]查詢1 UNION [ALL]查詢2 UNION …
例:前往巴西一切供應商和客戶的名字和城市
Select CompanyName,City
FROM Suppliers
Where Country = ‘Brazil'
UNION
Select CompanyName,City
FROM Customers
Where Country = ‘Brazil'
注:
缺省的情形下,UNION子句不前往反復的記載.假如想顯示一切記載,可以加ALL選項
UNION運算請求查詢具有雷同數量的字段.然則,字段數據類型不用雷同.
每個查詢參數中可使用GROUP BY 子句 或 HAVING 子句停止分組.要想以指定的次序來顯示前往的數據,可以在最初一個查詢的尾部應用OREER BY子句.
九. 穿插查詢
穿插查詢可以對數據停止總和,均勻,計數或其他總和盤算法的盤算,這些數據經由過程兩種信息停止分組:一個顯示在表的左部,另外一個顯示在表的頂部.
Microsoft Jet SQL 用TRANSFROM語句創立穿插表查詢語法:
TRANSFORM aggfunction
Select 語句
GROUP BY 子句
PIVOT pivotfield[IN(value1 [,value2[,…]]) ]
Aggfounction指SQL聚積函數,
Select語句選擇作為題目的的字段,
GROUP BY 分組
解釋:
Pivotfield 在查詢成果集中創立列題目時用的字段或表達式,用可選的IN子句限制它的取值.
value代表創立列題目的固定值.
例:顯示在1996年裡每季度每位員工所接的訂單的數量:
TRANSFORM Count(OrderID)
Select FirstName&''&LastName AS FullName
FROM Employees INNER JOIN orders
ON Employees.EmployeeID = orders.EmployeeID
Where DatePart(“yyyy”,OrderDate)= ‘1996'
GROUP BY FirstName&''&LastName
orDER BY FirstName&''&LastName
POVOT DatePart(“q”,OrderDate)&'季度'
十 .子查詢
子查詢可以懂得為 套查詢.子查詢是一個Select語句.
1 表達式的值與子查詢前往的單一值做比擬
語法:
表達式 comparision [ANY|ALL|SOME](子查詢)
解釋:
ANY和SOME謂詞是同義詞,與比擬運算符(=,〈,〉,〈〉,〈=,〉=)一路應用.前往一個布爾值True或False.ANY的意思是,表達式與子查詢前往的一系列的值一一比擬,只需個中的一次比擬發生True成果,ANY測試的前往 True值(既Where子句的成果),對應於該表達式確當前記載將進入主查詢的成果中.ALL測試則請求表達式與子查詢前往的一系列的值的比擬都發生True成果,才回前往True值.
例:主查詢前往單價比任何一個扣頭年夜於等於25%的產物的單價要高的一切產物
Select * FROM Products
Where UnitPrice〉ANY
(Select UnitPrice FROM[Order Details] Where Discount〉0.25)
2 檢討表達式的值能否婚配子查詢前往的一組值的某個值
語法:
[NOT]IN(子查詢)
例:前往庫存價值年夜於等於1000的產物.
Select ProductName FROM Products
Where ProductID IN
(Select PrdoctID FROM [Order DEtails]
Where UnitPrice*Quantity〉= 1000)
3檢測子查詢能否前往任何記載
語法:
[NOT]EXISTS (子查詢)
例:用EXISTS檢索英國的客戶
Select ComPanyName,ContactName
FROM orders
Where EXISTS
(Select *
FROM Customers
Where Country = ‘UK' AND
Customers.CustomerID= orders.CustomerID)
〉〉〉---------我想分頁!--這麼長的文章,在這裡來個分頁多好啊!哈哈----------〈〈〈
Sql Server 和 Access 操作數據庫構造Sql語句
上面是Sql Server 和 Access 操作數據庫構造的經常使用Sql,願望對你有所贊助。
內容由海娃整頓,不准確與不完全的地方還請提出,感謝。
新建表:
create table [表名]
(
[主動編號字段] int IDENTITY (1,1) PRIMARY KEY ,
[字段1] nVarChar(50) default '默許值' null ,
[字段2] ntext null ,
[字段3] datetime,
[字段4] money null ,
[字段5] int default 0,
[字段6] Decimal (12,4) default 0,
[字段7] image null ,
)
刪除表:
Drop table [表名]
拔出數據:
Insert INTO [表名] (字段1,字段2) VALUES (100,'51WINDOWS.NET')
刪除數據:
Delete FROM [表名] Where [字段名]〉100
更新數據:
Update [表名] SET [字段1] = 200,[字段2] = '51WINDOWS.NET' Where [字段三] = 'HAIWA'
新增字段:
Alter TABLE [表名] ADD [字段名] NVARCHAR (50) NULL
刪除字段:
Alter TABLE [表名] Drop COLUMN [字段名]
修正字段:
Alter TABLE [表名] Alter COLUMN [字段名] NVARCHAR (50) NULL
重定名表:(Access 重定名表,請參考文章:在Access數據庫中重定名表)
援用來自 在Access數據庫中重定名表
Dim Conn,ConnStr,oCat,oTbl
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data.mdb")
Set oCat=Server.CreateObject("ADOX.Catalog")
oCat.ActiveConnection = ConnStr
Set oTbl = Server.CreateObject("ADOX.Table")
Set oTbl = oCat.Tables("OldTable") '要重定名的表名:OldTable
oTbl.Name = "NewTable" '新表名
Set oCat = Nothing
Set oTbl = Nothing
sp_rename '表名', '新表名', 'OBJECT'
新建束縛:
Alter TABLE [表名] ADD CONSTRAINT 束縛名 CHECK ([束縛字段] 〈= '2000-1-1')
刪除束縛:
Alter TABLE [表名] Drop CONSTRAINT 束縛名
新建默許值
Alter TABLE [表名] ADD CONSTRAINT 默許值名 DEFAULT '51WINDOWS.NET' FOR [字段名]
刪除默許值
Alter TABLE [表名] Drop CONSTRAINT 默許值名
刪除Sql Server 中的日記,減小數據庫文件年夜小
dump transaction 數據庫名 with no_log
backup log 數據庫名 with no_log
dbcc shrinkdatabase(數據庫名)
exec sp_dboption '數據庫名', 'autoshrink', 'true'

SQL查詢語句精髓年夜全

2009-08-17 10:16

簡略的Transact-SQL查詢只包含選擇列表、FROM子句和WHERE子句。它們分離解釋所查詢列、查詢的
表或視圖、和搜刮前提等。
例如,上面的語句查詢testtable表中姓名為“張三”的nickname字段和email字段。
SELECT nickname,email
FROM testtable
WHERE name='張三'

(一) 選擇列表
選擇列表(select_list)指出所查詢列,它可所以一組列名列表、星號、表達式、變量(包含部分變
量和全局變量)等組成。

1、選擇一切列
例如,上面語句顯示testtable表中一切列的數據:
SELECT *
FROM testtable

2、選擇部門列並指定它們的顯示順序
查詢成果聚集中數據的分列次序與選擇列表中所指定的列名分列次序雷同。
例如:
SELECT nickname,email
FROM testtable

3、更改列題目
在選擇列表中,可從新指定列題目。界說格局為:
列題目=列名
列名 列題目
假如指定的列題目不是尺度的標識符格局時,應應用引號定界符,例如,以下語句應用漢字顯示列
題目:
SELECT 昵稱=nickname,電子郵件=email
FROM testtable

4、刪除反復行
SELECT語句中應用ALL或DISTINCT選項來顯示表中相符前提的一切行或刪除個中反復的數據行,默許
為ALL。應用DISTINCT選項時,關於一切反復的數據行在SELECT前往的成果聚集中只保存一行。

5、限制前往的行數
應用TOP n [PERCENT]選項限制前往的數據行數,TOP n解釋前往n行,而TOP n PERCENT時,解釋n是
表現一百分數,指定前往的行數等於總行數的百分之幾。
例如:
SELECT TOP 2 *
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable

(二) FROM子句
FROM子句指定SELECT語句查詢及與查詢相干的表或視圖。在FROM子句中最多可指定256個表或視圖,
它們之間用逗號分隔。
在FROM子句同時指定多個表或視圖時,假如選擇列表中存在同名列,這時候應應用對象名限制這些列
所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應
應用上面語句格局加以限制:
SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
在FROM子句中可用以下兩種格局為表或視圖指定別號:
表名 as 別號
表名 別號
例如下面語句可用表的別號格局表現為:
SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityid
SELECT不只能從表或視圖中檢索數據,它還可以或許從其它查詢語句所前往的成果聚集中查詢數據。
例如:
SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id
此例中,將SELECT前往的成果聚集賜與一別號t,然後再從中檢索數據。

(三) 應用WHERE子句設置查詢前提
WHERE子句設置查詢前提,過濾失落不須要的數據行。例以下面語句查詢年紀年夜於20的數據:
SELECT *
FROM usertable
WHERE age>20
WHERE子句可包含各類前提運算符:
比擬運算符(年夜小比擬):>、>=、=、<、<=、<>、!>、!<
規模運算符(表達式值能否在指定的規模):BETWEEN…AND…
NOT BETWEEN…AND…
列表運算符(斷定表達式能否為列表中的指定項):IN (項1,項2……)
NOT IN (項1,項2……)
形式婚配符(斷定值能否與指定的字符通配格局符合):LIKE、NOT LIKE
空值斷定符(斷定表達式能否為空):IS NULL、NOT IS NULL
邏輯運算符(用於多前提的邏輯銜接):NOT、AND、OR
1、規模運算符例:age BETWEEN 10 AND 30相當於age>=10 AND age<=30
2、列表運算符例:country IN ('Germany','China')
3、形式婚配符例:經常使用於隱約查找,它斷定列值能否與指定的字符串格局相婚配。可用於char、
varchar、text、ntext、datetime和smalldatetime等類型查詢。
可以使用以下通配字符:
百分號%:可婚配隨意率性類型和長度的字符,假如是中文,請應用兩個百分號即%%。
下劃線_:婚配單個隨意率性字符,它經常使用來限制表達式的字符長度。
方括號[]:指定一個字符、字符串或規模,請求所婚配對象為它們中的任一個。
[^]:其取值也[] 雷同,但它請求所婚配對象為指定字符之外的任一個字符。
例如:
限制以Publishing開頭,應用LIKE '%Publishing'
限制以A開首:LIKE '[A]%'
限制以A開首外:LIKE '[^A]%'
4、空值斷定符例WHERE age IS NULL
5、邏輯運算符:優先級為NOT、AND、OR
(四)查詢成果排序
應用ORDER BY子句對查詢前往的成果按一列或多列排序。ORDER BY子句的語法格局為:
ORDER BY {column_name [ASC|DESC]} [,…n]
個中ASC表現升序,為默許值,DESC為降序。ORDER BY不克不及按ntext、text和image數據類型停止排
序。
例如:
SELECT *
FROM usertable
ORDER BY age desc,userid ASC
別的,可以依據表達式停止排序。

2、 結合查詢
UNION運算符可以將兩個或兩個以上上SELECT語句的查詢成果聚集歸並成一個成果聚集顯示,即履行聯
合查詢。UNION的語法格局為:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
個中selectstatement為待結合的SELECT查詢語句。
ALL選項表現將一切行歸並到成果聚集中。不指定該項時,被結合查詢成果聚集中的反復即將只保存一
行。
結合查詢時,查詢成果的列題目為第一個查詢語句的列題目。是以,要界說列題目必需在第一個查詢語
句中界說。要春聯合查詢成果排序時,也必需應用第一查詢語句中的列名、列題目或許列序號。
在應用UNION 運算符時,應包管每一個結合查詢語句的選擇列表中有雷同數目的表達式,而且每一個查詢選
擇表達式應具有雷同的數據類型,或是可以主動將它們轉換為雷同的數據類型。在主動轉換時,關於數值類
型,體系將低精度的數據類型轉換為高精度的數據類型。
在包含多個查詢的UNION語句中,其履行次序是自左至右,應用括號可以轉變這一履行次序。例如:
查詢1 UNION (查詢2 UNION 查詢3)

3、銜接查詢
經由過程銜接運算符可以完成多個表查詢。銜接是關系數據庫模子的重要特色,也是它差別於其它類型
數據庫治理體系的一個標記。
在關系數據庫治理體系中,表樹立時各數據之間的關系不用肯定,常把一個實體的一切信息寄存在
一個表中。當檢索數據時,經由過程銜接操作查詢出寄存在多個表中的分歧實體的信息。銜接操作給用戶帶
來很年夜的靈巧性,他們可以在任什麼時候候增長新的數據類型。為分歧實體創立新的表,而後經由過程銜接停止
查詢。
銜接可以在SELECT 語句的FROM子句或WHERE子句中樹立,貌同實異在FROM子句中指出銜接時有助於
將銜接操作與WHERE子句中的搜刮前提辨別開來。所以,在Transact-SQL中推舉應用這類辦法。
SQL-92尺度所界說的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 p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)內銜接
內銜接查詢操作列出與銜接前提婚配的數據行,它應用比擬運算符比擬被銜接列的列值。內銜接分
三種:
1、等值銜接:在銜接前提中應用等於號(=)運算符比擬被銜接列的列值,其查詢成果中列出被銜接
表中的一切列,包含個中的反復列。
2、不等銜接: 在銜接前提應用除等於運算符之外的其它比擬運算符比擬被銜接的列的列值。這些
運算符包含>、>=、<=、<、!>、!<和<>。
3、天然銜接:在銜接前提中應用等於(=)運算符比擬被銜接列的列值,但它應用選擇列表指出查詢
成果聚集中所包含的列,並刪除銜接表中的反復列。
例,上面應用等值銜接列出authors和publishers表中位於統一城市的作者和出書社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如應用天然銜接,在選擇列表中刪除authors 和publishers 表中反復列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二)外銜接
內銜接時,前往查詢成果聚集中的僅是相符查詢前提( WHERE 搜刮前提或 HAVING 前提)和銜接前提
的行。而采取外銜接時,它前往到查詢成果聚集中的不只包括相符銜接前提的行,並且還包含左表(左外
銜接時)、右表(右外銜接時)或兩個邊接表(全外銜接)中的一切數據行。
以下面應用左外銜接將服裝論壇t.vhao.net內容和作者信息銜接起來:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
上面應用全外銜接將city表中的一切作者和user表中的一切作者,和他們地點的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username

(三)穿插銜接
穿插銜接不帶WHERE 子句,它前往被銜接的兩個表一切數據行的笛卡爾積,前往到成果聚集中的數
據行數等於第一個表中相符查詢前提的數據行數乘以第二個表中相符查詢前提的數據行數。
例,titles表中有6類圖書,而publishers表中有8家出書社,則以下穿插銜接檢索到的記載數將等
於6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY typeSQL焦點語句(異常適用的幾個技能)拔出數據

向表中添加一個新記載,你要應用SQL INSERT 語句。這裡有一個若何應用這類語句的例子:

INSERT mytable (mycolumn) VALUES (‘some data')

這個語句把字符串'some data'拔出表mytable的mycolumn字段中。將要被拔出數據的字段的名字在第一個括號中指定,現實的數據在第二個括號中給出。

INSERT 語句的完全句法以下:

INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES |

Values_list | select_statement}

假如一個表有多個字段,經由過程把字段名和字段值用逗號離隔,你可以向一切的字段中拔出數據。假定表mytable有三個字段first_column,second_column,和third_column。上面的INSERT語句添加了一條三個字段都有值的完全記載:

INSERT mytable (first_column,second_column,third_column)

VALUES (‘some data','some more data','yet more data')

留意

你可使用INSERT語句向文本型字段中拔出數據。然則,假如你須要輸出很長的字符串,你應當應用WRITETEXT語句。這部門內容對本書來講太高等了,是以不加評論辯論。要懂得更多的信息,請參考Microsoft SQL Sever 的文檔。

假如你在INSERT 語句中只指定兩個字段和數據會怎樣樣呢?換句話說,你向一個表中拔出一條新記載,但有一個字段沒有供給數據。在這類情形下,有上面的四種能夠:

假如該字段有一個缺省值,該值會被應用。例如,假定你拔出新記載時沒有給字段third_column供給數據,而這個字段有一個缺省值'some value'。在這類情形下,當新記載樹立時會拔出值'some value'。

假如該字段可以接收空值,並且沒出缺省值,則會被拔出空值。

假如該字段不克不及接收空值,並且沒出缺省值,就會湧現毛病。你會收到毛病信息:

The column in table mytable may not be null.

最初,假如該字段是一個標識字段,那末它會主動發生一個新值。當你向一個有標識字段的表中拔出新記載時,只需疏忽該字段,標識字段會給本身賦一個新值。

留意

向一個有標識字段的表中拔出新記載後,你可以用SQL變量@@identity來拜訪新記載

的標識字段的值。斟酌以下的SQL語句:

INSERT mytable (first_column) VALUES(‘some value')

INSERT anothertable(another_first,another_second)

VALUES(@@identity,'some value')

假如表mytable有一個標識字段,該字段的值會被拔出表anothertable的another_first字段。這是由於變量@@identity老是保留最初一次拔出標識字段的值。

字段another_first應當與字段first_column有雷同的數據類型。然則,字段another_first不克不及是應當標識字段。Another_first字段用來保留字段first_column的值。

刪除記載

要從表中刪除一個或多個記載,須要應用SQL DELETE語句。你可以給DELETE 語句供給WHERE 子句。WHERE子句用來選摘要刪除的記載。例如,上面的這個DELETE語句只刪除字段first_column的值等於'Delete Me'的記載:

DELETE mytable WHERE first_column='Deltet Me'

DELETE 語句的完全句法以下:

DELETE [FROM] {table_name|view_name} [WHERE clause]

在SQL SELECT 語句中可使用的任何前提都可以在DELECT 語句的WHERE子句中應用。例如,上面的這個DELETE語句只刪除那些first_column字段的值為'goodbye'或second_column字段的值為'so long'的記載:

DELETE mytable WHERE first_column='goodby' OR second_column='so long'

假如你不給DELETE 語句供給WHERE 子句,表中的一切記載都將被刪除。你不該該有這類設法主意。假如你想刪除應當表中的一切記載,應應用第十章所講的TRUNCATE TABLE語句。

留意

為何要用TRUNCATE TABLE 語句取代DELETE語句?當你應用TRUNCATE TABLE語句時,記載的刪除是不作記載的。也就是說,這意味著TRUNCATE TABLE 要比DELETE快很多。

更新記載

要修正表中曾經存在的一條或多筆記錄,應應用SQL UPDATE語句。同DELETE語句一樣,UPDATE語句可使用WHERE子句來選擇更新特定的記載。請看這個例子:

UPDATE mytable SET first_column='Updated!' WHERE second_column='Update Me!'

這個UPDATE 語句更新一切second_column字段的值為'Update Me!'的記載。對一切被選中的記載,字段first_column的值被置為'Updated!'。

上面是UPDATE語句的完全句法:

UPDATE {table_name|view_name} SET [{table_name|view_name}]

{column_list|variable_list|variable_and_column_list}

[,{column_list2|variable_list2|variable_and_column_list2}…

[,{column_listN|variable_listN|variable_and_column_listN}]]

[WHERE clause]

留意

你可以對文本型字段應用UPDATE語句。然則,假如你須要更新很長的字符串,應應用UPDATETEXT語句。這部門內容對本書來講太高等了,是以不加評論辯論。要懂得更多的信息,請參考Microsoft SQL Sever 的文檔。

假如你不供給WHERE子句,表中的一切記載都將被更新。有時這是有效的。例如,假如你想把表titles中的一切書的價錢加倍,你可使用以下的UPDATE 語句:

你也能夠同時更新多個字段。例如,上面的UPDATE語句同時更新first_column,second_column,和third_column這三個字段:

UPDATE mytable SET first_column='Updated!'

Second_column='Updated!'

Third_column='Updated!'

WHERE first_column='Update Me1'

技能

SQL疏忽語句中過剩的空格。你可以把SQL語句寫成任何你最輕易讀的格局。

用SELECT 創立記載和表

你或許曾經留意到,INSERT 語句與DELETE語句和UPDATE語句有一點分歧,它一次只操作一個記載。但是,有一個辦法可使INSERT 語句一次添加多個記載。要作到這一點,你須要把INSERT 語句與SELECT 語句聯合起來,象如許:

INSERT mytable (first_column,second_column)

SELECT another_first,another_second

FROM anothertable

WHERE another_first='Copy Me!'

這個語句從anothertable拷貝記載到mytable.只要表anothertable中字段another_first的值為'Copy Me!'的記載才被拷貝。

當為一個表中的記載樹立備份時,這類情勢的INSERT 語句長短常有效的。在刪除一個表中的記載之前,你可以先用這類辦法把它們拷貝到另外一個表中。

假如你須要拷貝全部表,你可使用SELECT INTO 語句。例如,上面的語句創立了一個名為newtable的新表,該表包括表mytable的一切數據:

SELECT * INTO newtable FROM mytable

你也能夠指定只要特定的字段被用來創立這個新表。要做到這一點,只需在字段列表中指定你想要拷貝的字段。別的,你可使用WHERE 子句來限制拷貝到新表中的記載。上面的例子只拷貝字段second_columnd的值等於'Copy Me!'的記載的first_column字段。

SELECT first_column INTO newtable

FROM mytable

WHERE second_column='Copy Me!'

應用SQL修正曾經樹立的表是很艱苦的。例如,假如你向一個表中添加了一個字段,沒有輕易的方法往來來往除它。別的,假如你不當心把一個字段的數據類型給錯了,你將沒有方法轉變它。然則,應用本節中講述的SQL語句,你可以繞過這兩個成績。

例如,假定你想從一個表中刪除一個字段。應用SELECT INTO 語句,你可以創立該表的一個拷貝,但不包括要刪除的字段。這使你既刪除該字段,又保存了不想刪除的數據。

假如你想轉變一個字段的數據類型,你可以創立一個包括准確數據類型字段的新表。創立好該表後,你便可以聯合應用UPDATE語句和SELECT 語句,把本來表中的一切數據拷貝到新表中。經由過程這類辦法,你既可以修正表的構造,又能保留原本的數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved