當前位置:首頁 » 編程語言 » sql新語法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql新語法

發布時間: 2023-03-13 21:39:27

sql插入新數據的語法是什麼

我從網上搜的,希望能幫到你

13.3 操作功能
SQL語言的操作功能包括對表中數據的增加、刪除和更新操作。
13.3.1 插入
在一個表的尾部追加數據時,要用到插入功能,SQL的插入命令包括以下3種格式:
格式:
INSERT INTO 〈表名〉 [(〈欄位名1〉 [,〈欄位名2〉,…])]
VALUES(〈表達式1〉)[, 〈表達式2〉,…])

INSERT INTO 〈表名〉 FROM ARRAY 〈數組名〉
INSERT INTO 〈表名〉 FROM MEMVAR
功能:3種格式都是在指定的表的表尾添加一條新記錄。
13.3.1 插入
說明:
(1)第1種格式其值為VALUES後面的表達式的值。當需要插入表中所有欄位的數據時,表名後面的欄位名可以預設,但插入數據的格式必須與表的結構完成吻合;若只需要插入表中某些欄位的數據,就需要列出插入數據的欄位,當然相應表達式的數據位置會與之對應。
(2)第2種格式新記錄的值是指定的數組中各元素的數據。數組中各元素與表中各欄位順序對應。如果數組中元素的數據類型與其對應的欄位類型不一致,則新記錄對應的欄位為空值;如果表中欄位個數大於數組元素的個數,則多的欄位為空值。
(3)第3種格式新記錄的值是指定的內存變數的值。添加的新記錄的值是與指定表各欄位名同名的內存變數的值,如果同名的內存變數不存在,則相應的欄位為空。
Visual FoxPro支持兩種SQL插入命令的格式,第一種格式是標准格式,第二種格式是Visual FoxPro的特殊格式。
13.3.1 插入
【13.42】在訂購單表中,插入元組("E7","S4","OR01",09/25/03)。
INSERT INTO 訂購單(職工號,供應商號,訂購單號,訂購日期,總金額)
VALUES("E7","S4","OR01",{^2003-09-25},1200)
其中「{^2003-09-25}」是日期型欄位訂購日期的值。
圖13.48
13.3.1 插入
假設供應商尚未確定,那麼只能先插入職工號和訂購單號兩個屬性的值,這時可用如下命令:
INSERT INTO 訂購單(職工號,訂購單號) VALUES("E7","OR01")
這時另外三個屬性的值為空。
13.3.1 插入
下面用一組命令來說明INSERT INTO…FROM ARRAY 的使用方式:
USE訂購單 &&打開訂購單
SCATTER to A1 &&將當前記錄讀到數組A1
COPY STRUCTURE TO A2 &&拷貝訂購單表的結構到A2
INSERT INTO A2 FROM ARRAY A1 &&從數組A1插入一條記錄到A2
SELECT A2 &&切換到A2的工作區
BROWSE &&用BROWSE命令驗證插入的結果
USE &&關閉A2.dbf文件
DELETE FILE A2.dbf &&刪除A2.dbf文件
13.3.1 插入
在一個表的尾部追加數據時,要用到插入功能,SQL的插入命令包括以下3種格式:
格式:
INSERT INTO 〈表名〉 [(〈欄位名1〉 [,〈欄位名2〉,…])]
VALUES(〈表達式1〉)[, 〈表達式2〉,…])

INSERT INTO 〈表名〉 FROM ARRAY 〈數組名〉
INSERT INTO 〈表名〉 FROM MEMVAR
功能:3種格式都是在指定的表的表尾添加一條新記錄。
13.3.1 插入
說明:
(1)第1種格式其值為VALUES後面的表達式的值。當需要插入表中所有欄位的數據時,表名後面的欄位名可以預設,但插入數據的格式必須與表的結構完成吻合;若只需要插入表中某些欄位的數據,就需要列出插入數據的欄位,當然相應表達式的數據位置會與之對應。
(2)第2種格式新記錄的值是指定的數組中各元素的數據。數組中各元素與表中各欄位順序對應。如果數組中元素的數據類型與其對應的欄位類型不一致,則新記錄對應的欄位為空值;如果表中欄位個數大於數組元素的個數,則多的欄位為空值。
(3)第3種格式新記錄的值是指定的內存變數的值。添加的新記錄的值是與指定表各欄位名同名的內存變數的值,如果同名的內存變數不存在,則相應的欄位為空。
Visual FoxPro支持兩種SQL插入命令的格式,第一種格式是標准格式,第二種格式是Visual FoxPro的特殊格式。
13.3.1 插入
【13.42】在訂購單表中,插入元組("E7","S4","OR01",09/25/03)。命令執行結果如圖13.48所示。
INSERT INTO 訂購單(職工號,供應商號,訂購單號,訂購日期,總金額)
VALUES("E7","S4","OR01",{^2003-09-25},1200)
其中「{^2003-09-25}」是日期型欄位訂購日期的值。
圖13.48
13.3.1 插入
假設供應商尚未確定,那麼只能先插入職工號和訂購單號兩個屬性的值,這時可用如下命令:
INSERT INTO 訂購單(職工號,訂購單號) VALUES("E7","OR01")
這時另外三個屬性的值為空。
13.3.1 插入
下面用一組命令來說明INSERT INTO…FROM ARRAY 的使用方式:
USE訂購單 &&打開訂購單
SCATTER to A1 &&將當前記錄讀到數組A1
COPY STRUCTURE TO A2 &&拷貝訂購單表的結構到A2
INSERT INTO A2 FROM ARRAY A1 &&從數組A1插入一條記錄到A2
SELECT A2 &&切換到A2的工作區
BROWSE &&用BROWSE命令驗證插入的結果
USE &&關閉A2.dbf文件
DELETE FILE A2.dbf &&刪除A2.dbf文件
13.3.1 插入
用下面一組命令來說明INSERT INTO…FROM MEMVAR的使用方式:
USE訂購單 &&打開訂購單
SCATTER M1 &&將當前記錄讀到內存變數M1中
COPY STRUCTURE TO A2 &&拷貝訂購單表的結構到A2
INSETR INTO A2 FROM M1 &&從內存變數插入一條記錄到A2
SELECT A2 &&切換到A2的工作區
BROWSE &&用BROWSE命令驗證插入的結果
USE &&關閉A2.dbf文件
DELETE FILE A2.dbf &&刪除A2.dbf文件
13.3.1 插入
說明:當一個表定義了主索引或候選索引後,由於相應的欄位具有關鍵字的特性,即不能為空,所以只能用此命令插入記?肌oxPro以前的插入命令(INSERT或APPEND)是先插入一條空記錄,然後再輸入各欄位的值,由於關鍵字欄位不允許為空,所以使用以前的方法就不能成功地插入記錄。
13.3.2 更新
更新是指對存儲在表中的記錄進行修改。
格式:
UPDATE [ 〈資料庫〉! ] 〈表名〉
SET 〈列名1〉=〈表達式1〉 [, 〈列名2〉=〈表達式2〉 …]
[WHERE 〈條件表達式1〉 [AND | OR 〈條件表達式2〉 …]]
13.3.2 更新
說明:
(1)[〈資料庫〉! ]〈表名〉:指定要更新數據的記錄所在的表名及該表所在的資料庫名。
(2)SET 〈列名〉=〈表達式〉:指定被更新的欄位及該欄位的新值。如果省略WHERE子句,則該欄位每一條都用同樣的值更新。
(3)WHERE 〈條件表達式〉:指明將要更新數據的記錄。即更新表中符合條件表達式的記錄,並且一次可以更新多個欄位;如果不使用WHERE子句,則更新全部記錄。
13.3.2 更新
【13.43】在職工表中,給WH1倉庫的職工提高10%的工資。命令執行結果如圖13.49所示。
UPDATE 職工 SET 工資=工資*1.10 WHERE 倉庫號="WH1"
例如: 將所有學生的年齡增加1歲:
UPDATE 學生 SET 年齡=年齡+1
13.3.3 刪除
用SQL語言可以刪除數據表中的記錄。
格式:
DELETE FROM [〈資料庫!〉]〈表名〉
[WHERE 〈條件表達式1〉 [AND | OR 〈條件表達式2〉 …]]
說明:
(1)[〈資料庫!〉]〈表名〉:指定加刪除標記的表名及該表所在的資料庫名,用「!」分割表名和資料庫名,資料庫名為可選項。
(2)WHERE選項:指明只對滿足條件的記錄加刪除標記。如果不使用WHERE子句,則刪除該表中的全部記錄。
(3)上述刪除只是加刪除標記,並沒有從物理上刪除,只有執行了PACK命令,有刪除標記的記錄才能真正從表中刪除。刪除標記可以用REACLL命令取消。
13.3.3 刪除
【13.44】刪除倉庫表中倉庫號值是WH2的記錄。
DELETE FROM 倉庫 WHERE倉庫號="WH2"
說明:SQL DELETE命令同樣是邏輯刪除記錄,如果要物理刪除記錄需要繼續使用PACK命令。
13.3.4 表的刪除
隨著資料庫應用的變化,往往有些表連同它的數據不再需要了,這時可以刪除這些表,以節省存儲空間。
格式:DROP TABLE 〈表名〉
說明:DROP TABLE直接從磁碟上刪除表名所對應的DBF文件。如果表名是資料庫中的表,並且相應的資料庫是當前資料庫,則從資料庫中刪除表;否則雖然從磁碟上刪除了DBF文件,但是記錄在資料庫DBC文件中的信息卻沒有刪除,此後會出現錯誤提示。所以要刪除資料庫中的表時,最好應使資料庫是當前打開的資料庫,在資料庫中進行操作。

② 求sql語法

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語言的基本知識。

資料庫表格

一個典型的關系型資料庫通常由一個或多個被稱作表格的對象組成。資料庫
中的所有數據或信息都被保存在這些資料庫表格中。資料庫中的每一個表格都具有
自己唯一的表格名稱,都是由行和列組成,其中每一列包括了該列名稱,數據類型
,以及列的其它屬性等信息,而行則具體包含某一列的記錄或數據。以下,是一個
名為天氣的資料庫表格的實例。

城市 最高氣溫 最低氣溫
北京 10 5
上海 15 8
天津 8 2
重慶 20 13
該表格中「城市」,「最高氣溫」和「最低氣溫」就是三個不同的列
,而表格中的每一行則包含了具體的表格數據。

數據查詢

在眾多的SQL命令中,select語句應該算是使用最頻繁的。Select語句主要被用來對資料庫進行查詢並返回符合用戶查詢標準的結果數據。Select語句的語法格式如下:

select column1 [, column2,etc] from tablename

[where condition];

([] 表示可選項)
Select語句中位於Select關鍵詞之後的列名用來決定那些列將作為查詢結果返回。用戶可以按照自己的需要選擇任意列,還可以使用通配符「*」來設定返回表格中的所有列。
Select語句中位於from關鍵詞之後的表格名稱用來決定將要進行查詢操作的目
標表格。
Select語句中的where可選從句用來規定哪些數據值或哪些行將被作為查詢結果返回或顯示。在where條件從句中可以使用以下一些運算符來設定查詢標准:
= 等於
> 大於
< 小於
>= 大於等於
<= 小於等於
<> 不等於
除了上面所提到的運算符外,LIKE運算符在where條件從句中也非常重要。
LIKE運算符的功能非常強大,通過使用LIKE運算符可以設定只選擇與用戶規定格式相同的記錄。此外,我們還可以使用通配符「%」用來代替任何字元串。舉例如下:
Select firstname, lastname, city
from employee
where firstname LIKE 『E%』;

(注意,字元串必須被包含在單括弧內)
上述SQL語句將會查詢所有名稱以E開頭的姓名。或者,通過如下語句:

Select * from employee
where firstname = 『May』;
查詢所有名稱為May的行。

SQL語言快速入門(二)

創建表格

SQL語言中的create table語句被用來建立新的資料庫表格。Create table
語句的使用格式如下:
create table tablename
(column1 data type,
column2 data type,
column3 data type);

如果用戶希望在建立新表格時規定列的限制條件,可以使用可選的條件
選項:
create table tablename
(column1 data type [constraint],
column2 data type [constraint],
column3 data type [constraint]);

舉例如下:
create table employee
(firstname varchar(15),
lastname varchar(20),
age number(3),
address varchar(30),
city varchar(20));

簡單來說,創建新表格時,在關鍵詞create table後面加入所要建立的表格
的名稱,然後在括弧內順次設定各列的名稱,數據類型,以及可選的限制條件
等。注意,所有的SQL語句在結尾處都要使用「;」符號。
使用SQL語句創建的資料庫表格和表格中列的名稱必須以字母開頭,後面
可以使用字母,數字或下劃線,名稱的長度不能超過30個字元。注意,用戶在
稱時不要使用SQL語言中的保留關鍵詞,如select, create, insert等,作為表格或
列的名稱。
數據類型用來設定某一個具體列中數據的類型。例如,在姓名列中只能采
用的數據類型,而不能使用number的數據類型。

SQL語言中較為常用的數據類型為:

char(size):固定長度字元串,其中括弧中的size用來設定字元串的最大
度。Char類型的最大長度為255位元組。

varchar(size):可變長度字元串,最大長度由size設定。

number(size):數字類型,其中數字的最大位數由size設定。

Date:日期類型。

number(size,d):數字類型,size決定該數字總的最大位數,而d則用於
設定該數字在小數點後的位數。

最後,在創建新表格時需要注意的一點就是表格中列的限制條件。所謂限
制條件就是當向特定列輸入數據時所必須遵守的規則。
例如,unique這一限制條件要求某一列中不能存在兩個值相同的記錄,所有
記錄的值都必須是唯一的。除unique之外,較為常用的列的限制條件
還包括not, null和primary key等。Not null用來規定表格中某一列的值
不能為空.Primary key則為表格中的所有記錄規定了唯一的標識符。

向表格中插入數據

SQL語言使用insert語句向資料庫表格中插入或添加新的數據行。Insert語
句的使用格式如下:

insert into tablename
(first_column,...last_column)
values (first_value,...last_value);

例如:
insert into employee
(firstname, lastname, age, address, city)
values (『Li』, 『Ming』, 45, 『No.77 Changan Road』, 『Beijing」);

簡單來說,當向資料庫表格中添加新記錄時,在關鍵詞insert into後面輸
入所要添加的表格名稱,然後在括弧中列出將要添加新值的列的名稱。最後
,在關鍵詞values的後面按照前面輸入的列的順序對應的輸入所有要添加的
記錄值。

更新記錄

SQL語言使用update語句更新或修改滿足規定條件的現有記錄。
Update語句的格式為:

update tablename
set columnname = newvalue [, nextcolumn = newvalue2...]
where columnname OPERATOR value [and|or column OPERATOR value];

例如:
update employee
set age = age+1
where first_name= 『Mary』and last_name= 『Williams』;

使用update語句時,關鍵一點就是要設定好用於進行判斷的where條件
從句。

刪除記錄

SQL語言使用delete語句刪除資料庫表格中的行或記錄。Delete語句的
格式為:

delete from tablename
where columnname OPERATOR value [and|or column OPERATOR value];

例如:
delete from employee
where lastname = May;

簡單來說,當需要刪除某一行或某個記錄時,在delete from關鍵詞之
後輸入表格名稱,然後在where從句中設定刪除記錄的判斷條件。注意,
如果用戶在使用delete語句時不設定where從句,則表格中的所有記錄將
全部被刪除。

刪除資料庫表格

在SQL語言中使用drop table命令刪除某個表格以及該表格中的所有記
錄。Drop table命令的使用格式為:

drop table tablename;

例如:

drop table employee;

如果用戶希望將某個資料庫表格完全刪除,只需要在drop table命令後
輸入希望刪除的表格名稱即可。Drop table命令的作用與刪除表格中的所有
記錄不同。刪除表格中的全部記錄之後,該表格仍然存在,而且表格中列
的信息不會改變。而使用drop table命令則會將整個資料庫表格的所有信息
全部刪除。

以上,我們對SQL語言主要的命令和語句進行了較為詳細的介紹。應該說SQL語句的語法結構和風格還是相當簡單和直觀的,只要用戶結合實踐多加練習,一定會在短期內迅速掌握。

SQL語言快速入門(三)

我們日常使用SQL語言的工作過程中,使用最多的還是從已經建立好的資料庫中查詢信息。下面,我們就來詳細介紹一下如何使用SQL語言實現各種資料庫查詢操作。

SELECT…FROM
為方便講解,我們在資料庫中創建名為Store_Information的如下數據表。

Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000

SQL語言中用於資料庫查詢的最簡單的命令就是SELECT…FROM,語法格
式為:
SELECT \"column_name\" FROM \"table_name\"

例如,如果我們希望查詢Store_Information數據表中所有的商店名稱時,可
以使用如下命令:
SELECT store_name FROM Store_Information

查詢結果顯示為:
Store_Name
Los Angeles
San Diego
Los Angeles
Boston

如果用戶希望一次查詢多個欄位,可以將所要查詢的欄位名稱依次加入
SELECT關鍵字之後,中間用「,」隔開即可。

DISTINCT
SELECT關鍵字支持用戶查詢數據表中指定欄位的所有數據,但是這樣有時
就會不可避免的出現重復信息。如果用戶希望只查詢那些具有不同記錄值的信
息的話,可以使用SQL語言的DISTINCT關鍵字。語法格式如下:

SELECT DISTINCT \"column_name\"
FROM \"table_name\"

例如,我們可以使用以下命令查詢Store_Information數據表具有不同記錄值
的所有記錄。

SELECT DISTINCT Store_Name FROM Store_Information

查詢結果如下:
Store_Name
Los Angeles
San Diego
Boston

WHERE
除了選擇具有不同記錄值的記錄之外,有時我們可能還會需要根據某些條
件對資料庫中的數據進行查詢。例如,我們可能需要查詢Store_Information數
據表中銷售額超過1000美圓的商店。為此,我們可以使用SQL語言的WHERE
關鍵字設定查詢條件。語法格式如下:

SELECT \"column_name\"
FROM \"table_name\"
WHERE \"condition\"
由此,我們可以使用如下命令查詢銷售額超過1000美圓的商店信息:

SELECT store_name FROM Store_Information WHERE Sales > 1000

查詢結果顯示為:
store_name
Los Angeles

運算函數
現在,我們已經了解到在使用SQL語言進行資料庫查詢操作時可以通過對
數值的判斷設定靈活的查詢條件。為了增強對運算的支持能力,SQL提供了眾
多實用的運算函數供廣大用戶使用。例如,我們可以直接在SQL命令中調用
SUM或AVG這兩個分別用於計算總數和平均數的函數。語法格式如下:

SELECT \"function type\"(\"column_name\")
FROM \"table_name\"

如果我們希望查詢Store_Information數據表中所有商店的總銷售額的話,可
以使用如下命令:

SELECT SUM(Sales) FROM Store_Information

查詢結果顯示為:
SUM(Sales)
50

COUNT
除了SUM和AVG函數之外,COUNT函數是SQL語言中另一個較為常用
的運算函數。COUNT函數可以用來計算數據表中指定欄位所包含的記錄數目。
語法格式為:

SELECT COUNT(\"column_name\")
FROM \"table_name\"

例如,如果我們希望查詢Store_Information數據表中的有關商店的記錄條數
時,可以使用如下命令:

SELECT COUNT(store_name)
FROM Store_Information

查詢結果顯示為:
Count(store_name)
4

COUNT函數可以和DISTINCT關鍵字一起使用從而可以查詢數據表中指定
欄位中所有具有不同記錄值的記錄數目.例如,如果我們希望查詢Store_Information
數據表中不同商店的數目時,可以使用如下命令:

SELECT COUNT(DISTINCT store_name)
FROM Store_Information

查詢結果顯示為:
Count(DISTINCT store_name)
3

GROUP BY
下面我們來進一步看一下SQL語言中的集合函數。上文中,我們曾使用
SUM函數計算所有商店的銷售總額,如果我們希望計算每一家商店各自的總銷
售額時該怎麼辦呢?要實現這一目的我們需要做兩件事:首先,我們需要查詢
商店名稱和銷售額兩個欄位;然後,我們使用SQL語言的GROUP BY命令將
銷售額按照不同的商店進行分組,從而計算出不同商店的銷售總額。GROUP
BY命令的語法格式為:

SELECT \"column_name1\", SUM(\"column_name2\")
FROM \"table_name\"
GROUP BY \"column_name1\"

我們可以使用如下命令實現上述查詢目的:
SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name

查詢結果顯示為:
store_name SUM(Sales)
Los Angeles 00
San Diego 0
Boston 0

小註:
GROUP BY關鍵字一般應用於同時查詢多個欄位並對欄位進行算術運
算的SQL命令中。

HAVING
用戶在使用SQL語言的過程中可能希望解決的另一個問題就是對由sum或
其它集合函數運算結果的輸出進行限制。例如,我們可能只希望看到Store_
Information數據表中銷售總額超過1500美圓的商店的信息,這時我們就需要使
用HAVING從句。語法格式為:

SELECT \"column_name1\", SUM(\"column_name2\")
FROM \"table_name\"
GROUP BY \"column_name1\"
HAVING (arithematic function condition)
(GROUP BY從句可選)

由此,我們可以使用如下命令實現上述查詢目的:
SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500

查詢結果顯示為:
store_name SUM(Sales)
Los Angeles 00

小註:
SQL語言中設定集合函數的查詢條件時使用HAVING從句而不是
WHERE從句。通常情況下,HAVING從句被放置在SQL命令的結尾處。

ALIAS
下面,我們重點介紹一下如何在SQL命令中設定別名。SQL語言中一般使
用兩種類型的別名,分別為欄位別名和數據表別名。簡單的說,使用欄位別名
可以幫助我們有效的組織查詢的輸出結果。例如,上文所列舉的多個實例中,
當我們計算商店銷售總額時,顯示結果中就會出現SUM(sales)。雖然SUM(sales)
並不會對我們理解查詢結果帶來不便,但是如果我們需要在查詢中使用多項復
雜運算時,顯示結果就不會這么直觀了。如果這時我們使用欄位別名就會極大
的提高查詢結果的可讀性。
對於數據表別名,我們可以通過將別名直接放置在FROM從句中數據表名
稱的後面設定。數據表別名在我們下面將要講述的連接多個數據表進行查詢的
操作中極為有用。
欄位和數據表別名的語法格式如下:

SELECT \"table_alias\".\"column_name1\" \"column_alias\"
FROM \"table_name\" \"table_alias\"

即別名都直接放置在各自對應名稱的後面,中間用空格分開。

以Store_Information數據表為例,我們可以在GROUP BY一節中所使用的
SQL命令中設置如下欄位和數據表別名:

SELECT A1.store_name \ "Store\", SUM(Sales) \"Total Sales\"
FROM Store_Information A1
GROUP BY A1.store_name

查詢結果顯示為:

Store Total Sales
Los Angeles 00
San Diego 0
Boston 0

連接多個數據表
最後,我們來看一下如果使用SQL語言連接多個數據表,實現對多個數據
表的查詢。為方便講解,我們在資料庫中分別創建了兩個名為Store_Information
和Region的數據表。

Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000

Region
Region_Name Store_Name
East Boston
East New York
West Los Angeles
West San Diego

下面,我們就來看一下通過數據表的連接實現按不同區域查詢銷售額。
我們注意到在名為Region的數據表中包含區域和商店兩個欄位信息,而在名為
Store_Information的數據表中則包含每一家商店的銷售信息。因此,為了得到按
區域劃分的銷售信息,我們需要將兩個不同數據表的信息結合在一起進行查詢.
通過對上述兩個數據表的分析,我們發現每個數據表中都包含一個名為
Store_Name的欄位,因此,我們可以使用如下命令實現查詢目的:

SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Region A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name
查詢結果顯示為:
REGION SALES
East 0
West 50

說明:
上述查詢命令的前兩行用於指定所要查詢的目標欄位,分別為Region數據
表中的Region_Name欄位和Store_Information數據表中Sales欄位的記錄值總
數。這里,我們設定兩個欄位的別名分別為REGION和SALES,兩個數據表的
別名分別為A1和A2。如果我們只使用欄位別名而不設定數據表別名的話,上
述SQL命令的第一行就變成如下形式:

SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES

由此我們可以看出有效的使用數據表別名,可以極大的簡化對多個數據表
進行操作的SQL命令。
上述查詢命令的第3行為WHERE從句,正是該從句設定了兩個數據表的
連接條件。因為我們希望確保Region數據表中的Store_Name欄位能夠與
Store_Information數據表中的同名欄位相對應,所以我們規定兩個欄位的記錄
值應當相等。在連接多個數據表時,一定要准確設定數據表的連接條件,如果
WHERE從句設定不正確,則可能導致查詢結果中出現眾多不相關的數據 .

③ SQL的語法 詳細 介紹

SELECT 子句
指定由查詢返回的列。

語法
SELECT [ ALL | DISTINCT ]
[ TOP n [ PERCENT ] [ WITH TIES ] ]
< select_list >

< select_list > ::=

{ *
| { table_name | view_name | table_alias }.*
| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
[ [ AS ] column_alias ]
| column_alias = expression
} [ ,...n ]

參數
ALL

指定在結果集中可以顯示重復行。ALL 是默認設置。

DISTINCT

指定在結果集中只能顯示唯一行。為了 DISTINCT 關鍵字的用途,空值被認為相等。

TOP n [PERCENT]

指定只從查詢結果集中輸出前 n 行。n 是介於 0 和 4294967295 之間的整數。如果還指定了 PERCENT,則只從結果集中輸出前百分之 n 行。當指定時帶 PERCENT 時,n 必須是介於 0 和 100 之間的整數。

如果查詢包含 ORDER BY 子句,將輸出由 ORDER BY 子句排序的前 n 行(或前百分之 n 行)。如果查詢沒有 ORDER BY 子句,行的順序將任意。

WITH TIES

指定從基本結果集中返回附加的行,這些行包含與出現在 TOP n (PERCENT) 行最後的 ORDER BY 列中的值相同的值。如果指定了 ORDER BY 子句,則只能指定 TOP ...WITH TIES。

< select_list >

為結果集選擇的列。選擇列表是以逗號分隔的一系列表達式。

*
指定在 FROM 子句內返回所有表和視圖內的所有列。列按 FROM 子句所指定的由表或視圖返回,並按它們在表或視圖中的順序返回。

table_name | view_name | table_alias.*
將 * 的作用域限制為指定的表或視圖。

column_name
是要返回的列名。限定 column_name 以避免二義性引用,當 FROM 子句中的兩個表內有包含重復名的列時會出現這種情況。例如,Northwind 資料庫中的 Customers 和 Orders 表內都有名為 ColumnID 的列。如果在查詢中聯接這兩個表,可以在選擇列表中將客戶 ID 指定為 Customers.CustomerID。

expression
是列名、常量、函數以及由運算符連接的列名、常量和函數的任意組合,或者是子查詢。

IDENTITYCOL
返回標識列。有關更多信息,請參見 IDENTITY(屬性)、ALTER TABLE 和 CREATE TABLE。
如果 FROM 子句中的多個表內有包含 IDENTITY 屬性的列,則必須用特定的表名(如 T1.IDENTITYCOL)限定 IDENTITYCOL。

ROWGUIDCOL
返回行全局唯一標識列。
如果在 FROM 子句中有多個表具有 ROWGUIDCOL 屬性,則必須用特定的表名(如 T1.ROWGUIDCOL)限定 ROWGUIDCOL。

column_alias
是查詢結果集內替換列名的可選名。例如,可以為名為 quantity 的列指定別名,如"Quantity"或"Quantity to Date"或"Qty"。
別名還可用於為表達式結果指定名稱,例如:

USE Northwind
SELECT AVG(UnitPrice) AS 'Average Price'
FROM [Order Details]

column_alias 可用於 ORDER BY 子句。然而,不能用於 WHERE、GROUP BY 或 HAVING 子句。如果查詢表達式是 DECLARE CURSOR 語句的一部分,則 column_alias 不能用在 FOR UPDATE 子句中。

INTO 子句
創建新表並將結果行從查詢插入新表中。

用戶若要執行帶 INTO 子句的 SELECT 語句,必須在目的資料庫內具有 CREATE TABLE 許可權。SELECT...INTO 不能與 COMPUTE 子句一起使用。有關更多信息,請參見事務和顯式事務。

通過在 WHERE 子句中包含 FALSE 條件,可以使用 SELECT...INTO 創建沒有數據的相同表定義(不同表名)。

語法
[ INTO new_table ]

參數
new_table

根據選擇列表中的列和 WHERE 子句選擇的行,指定要創建的新表名。new_table 的格式通過對選擇列表中的表達式進行取值來確定。new_table 中的列按選擇列表指定的順序創建。new_table 中的每列有與選擇列表中的相應表達式相同的名稱、數據類型和值。

當選擇列表中包含計算列時,新表中的相應列不是計算列。新列中的值是在執行 SELECT...INTO 時計算出的。

在此次發布的 SQL Server 版本中,select into/bulk 資料庫選項對是否可以使用 SELECT INTO 創建永久表沒有影響。對包括 SELECT INTO 在內的某些大容量操作的記錄量,取決於對資料庫有效的恢復模式。有關更多信息,請參見使用恢復模型。

在以前發布的版本中,如果設置了 select into/bulk ,則可用 SELECT INTO 創建永久表。

④ SQL的基本語法

一、基礎
1、說明:創建資料庫
CREATE DATABASE database-name
2、說明:刪除資料庫
drop database dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創建新表:
A:create table tab_new like tab_old (使用舊表創建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、說明:刪除新表
drop table tabname
6、說明:增加一個列
Alter table tabname add column col type
註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵: Alter table tabname add primary key(col)
說明:刪除主鍵: Alter table tabname drop primary key(col)
8、說明:創建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
註:索引是不可更改的,想更改必須刪除重新建。
9、說明:創建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like 』%value1%』 ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
註:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接
A、left (outer) join:
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right (outer) join:
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full/cross (outer) join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
12、分組:Group by:
一張表,一旦分組 完成後,查詢後只能得到組相關的信息。
組相關的信息:(統計信息) count,sum,max,min,avg 分組的標准)
在SQLServer中分組時:不能以text,ntext,image類型的欄位作為分組依據
在selecte統計函數中的欄位,不能和普通的欄位放在一起;
13、對資料庫進行操作:
分離資料庫: sp_detach_db; 附加資料庫:sp_attach_db 後接表明,附加需要完整的路徑名
14.如何修改資料庫的名稱:
sp_renamedb 'old_name', 'new_name'

二、提升
1、說明:復製表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1(僅用於SQlServer)
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、說明:跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in 『具體資料庫』 where 條件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、說明:顯示文章、提交人和最後回復時間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、說明:外連接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數值1 and 數值2
9、說明:in 的使用方法
select * from table1 where a [not] in (『值1』,』值2』,』值4』,』值6』)
10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說明:四表聯查問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、說明:日程安排提前五分鍾提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5
13、說明:一條sql 語句搞定資料庫分頁
select top 10 b.* from (select top 20 主鍵欄位,排序欄位 from 表名 order by 排序欄位 desc) a,表名 b where b.主鍵欄位 = a.主鍵欄位 order by a.排序欄位
具體實現:
關於資料庫分頁:
declare @start int,@end int
@sql nvarchar(600)
set @sql=』select top』+str(@end-@start+1)+』+from T where rid not in(select top』+str(@str-1)+』Rid from T where Rid>-1)』
exec sp_executesql @sql

注意:在top後不能直接跟一個變數,所以在實際應用中只有這樣的進行特殊的處理。Rid為一個標識列,如果top後還有具體的欄位,這樣做是非常有好處的。因為這樣可以避免 top的欄位如果是邏輯索引的,查詢的結果後實際表中的不一致(邏輯索引中的數據有可能和數據表中的不一致,而查詢時如果處在索引則首先查詢索引)
14、說明:前10條記錄
select top 10 * form table1 where 范圍
15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說明:隨機取出10條數據
select top 10 * from tablename order by newid()
18、說明:隨機選擇記錄
select newid()
19、說明:刪除重復記錄
1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
2),select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp
評價: 這種操作牽連大量的數據的移動,這種做法不適合大容量但數據操作
3),例如:在一個外部表中導入數據,由於某些原因第一次只導入了一部分,但很難判斷具體位置,這樣只有在下一次全部導入,這樣也就產生好多重復的欄位,怎樣刪除重復欄位
alter table tablename
--添加一個自增列
add column_b int identity(1,1)
delete from tablename where column_b not in(
select max(column_b) from tablename group by column1,column2,...)
alter table tablename drop column column_b
20、說明:列出資料庫里所有的表名
select name from sysobjects where type='U' // U代表用戶
21、說明:列出表裡的所有的列名
select name from syscolumns where id=object_id('TableName')
22、說明:列示type、vender、pcs欄位,以type欄位排列,case可以方便地實現多重選擇,類似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
顯示結果:
type vender pcs
電腦 A 1
電腦 A 1
光碟 B 2
光碟 A 2
手機 B 3
手機 C 3
23、說明:初始化表table1
TRUNCATE TABLE table1
24、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

⑤ SQL語句語法大全

我整理的一些比較常用的SQL語句語法 需要的朋友可以過來參考下

一 數據控制語句 (DML) 部分

INSERT (往數據表裡插入記錄的語句)

INSERT INTO 表名(欄位名 欄位名 ……) VALUES ( 值 值 ……);

INSERT INTO 表名(欄位名 欄位名 ……) SELECT 欄位名 欄位名 …… FROM 另外的表名;

字元串類型的欄位值必須用單引號括起來 例如: GOOD DAY

如果欄位值里包含單引號 需要進行字元串轉換 我們把它替換成兩個單引號

字元串類型的欄位值超過定義的長度會出錯 最好在插入前進行長度校驗

日期欄位的欄位值可以用當前資料庫的系統時間SYSDATE 精確到秒

或者用字元串轉換成日期型函數TO_DATE(『 YYYY MM DD )

TO_DATE()還有很多種日期格式 可以參看ORACLE DOC

年 月 日 小時:分鍾:秒 的格式YYYY MM DD HH :MI:SS

INSERT時最大可操作的字元串長度小於等於 個單位元組 如果要插入更長的字元串 請考慮欄位用CLOB類型

方法借用ORACLE里自帶的DBMS_LOB程序包

INSERT時如果要用到從 開始自動增長的序列號 應該先建立一個序列號

CREATE SEQUENCE 序列號的名稱 (最好是表名+序列號標記) INCREMENT BY START WITH

MAXVALUE CYCLE NOCACHE;

其中最大的值按欄位的長度來定 如果定義的自動增長的序列號 NUMBER( ) 最大值為

INSERT 語句插入這個欄位值為: 序列號的名稱 NEXTVAL

DELETE (刪除數據表裡記錄的語句)

DELETE FROM表名 WHERE 條件;

注意 刪除記錄並不能釋放ORACLE里被佔用的數據塊表空間 它只把那些被刪除的數據塊標成unused

如果確實要刪除一個大表裡的全部記錄 可以用 TRUNCATE 命令 它可以釋放佔用的數據塊表空間

TRUNCATE TABLE 表名;

此操作不可回退

UPDATE (修改數據表裡記錄的語句)

UPDATE表名 SET 欄位名 =值 欄位名 =值 …… WHERE 條件;

如果修改的值N沒有賦值或定義時 將把原來的記錄內容清為NULL 最好在修改前進行非空校驗;

值N超過定義的長度會出錯 最好在插入前進行長度校驗

注意事項:

A 以上SQL語句對表都加上了行級鎖

確認完成後 必須加上事物處理結束的命令 MIT 才能正式生效

否則改變不一定寫入資料庫里

如果想撤回這些操作 可以用命令 ROLLBACK 復原

B 在運行INSERT DELETE 和 UPDATE 語句前最好估算一下可能操作的記錄范圍

應該把它限定在較小 (一萬條記錄) 范圍內 否則ORACLE處理這個事物用到很大的回退段

程序響應慢甚至失去響應 如果記錄數上十萬以上這些操作 可以把這些SQL語句分段分次完成

其間加上MIT 確認事物處理

二 數據定義 (DDL) 部分

CREATE (創建表 索引 視圖 同義詞 過程 函數 資料庫鏈接等)

ORACLE常用的欄位類型有

CHAR 固定長度的字元串

VARCHAR 可變長度的字元串

NUMBER(M N) 數字型M是位數總長度 N是小數的長度

DATE 日期類型

創建表時要把較小的不為空的欄位放在前面 可能為空的欄位放在後面

創建表時可以用中文的欄位名 但最好還是用英文的欄位名

創建表時可以給欄位加上默認值 例如 DEFAULT SYSDATE

這樣每次插入和修改時 不用程序操作這個欄位都能得到動作的時間

創建表時可以給欄位加上約束條件

例如 不允許重復 UNIQUE 關鍵字 PRIMARY KEY

ALTER (改變表 索引 視圖等)

改變表的名稱

ALTER TABLE 表名 TO 表名 ;

在表的後面增加一個欄位

ALTER TABLE表名 ADD 欄位名 欄位名描述;

修改表裡欄位的定義描述

ALTER TABLE表名 MODIFY欄位名 欄位名描述;

給表裡的欄位加上約束條件

ALTER TABLE 表名 ADD CONSTRAINT 約束名 PRIMARY KEY (欄位名);

ALTER TABLE 表名 ADD CONSTRAINT 約束名 UNIQUE (欄位名);

把表放在或取出資料庫的內存區

ALTER TABLE 表名 CACHE;

ALTER TABLE 表名 NOCACHE;

DROP (刪除表 索引 視圖 同義詞 過程 函數 資料庫鏈接等)

刪除表和它所有的約束條件

DROP TABLE 表名 CASCADE CONSTRAINTS;

TRUNCATE (清空表裡的所有記錄 保留表的結構)

TRUNCATE 表名;

三 查詢語句 (SELECT) 部分

SELECT欄位名 欄位名 …… FROM 表名 [表名 ……] WHERE 條件;

欄位名可以帶入函數

例如: COUNT(*) MIN(欄位名) MAX(欄位名) AVG(欄位名) DISTINCT(欄位名)

TO_CHAR(DATE欄位名 YYYY MM DD HH :MI:SS )

NVL(EXPR EXPR )函數

解釋:

IF EXPR =NULL

RETURN EXPR

ELSE

RETURN EXPR

DECODE(AA﹐V ﹐R ﹐V ﹐R )函數

解釋:

IF AA=V THEN RETURN R

IF AA=V THEN RETURN R

ELSE

RETURN NULL

LPAD(char n char )函數

解釋:

字元char 按制定的位數n顯示 不足的位數用char 字元串替換左邊的空位

欄位名之間可以進行算術運算

例如: (欄位名 *欄位名 )/

查詢語句可以嵌套

例如: SELECT …… FROM

(SELECT …… FROM表名 [表名 ……] WHERE 條件) WHERE 條件 ;

兩個查詢語句的結果可以做集合操作

例如: 並集UNION(去掉重復記錄) 並集UNION ALL(不去掉重復記錄) 差集MINUS 交集INTERSECT

分組查詢

SELECT欄位名 欄位名 …… FROM 表名 [表名 ……] GROUP BY欄位名

[HAVING 條件] ;

兩個以上表之間的連接查詢

SELECT欄位名 欄位名 …… FROM 表名 [表名 ……] WHERE

表名 欄位名 = 表名 欄位名 [ AND ……] ;

SELECT欄位名 欄位名 …… FROM 表名 [表名 ……] WHERE

表名 欄位名 = 表名 欄位名(+) [ AND ……] ;

有(+)號的欄位位置自動補空值

查詢結果集的排序操作 默認的排序是升序ASC 降序是DESC

SELECT欄位名 欄位名 …… FROM 表名 [表名 ……]

ORDER BY欄位名 欄位名 DESC;

字元串模糊比較的方法

INSTR(欄位名 『字元串 )>

欄位名 LIKE 『字元串% [『%字元串% ]

每個表都有一個隱含的欄位ROWID 它標記著記錄的唯一性

四 ORACLE里常用的數據對象 (SCHEMA)

索引 (INDEX)

CREATE INDEX 索引名ON 表名 ( 欄位 [欄位 ……] );

ALTER INDEX 索引名 REBUILD;

一個表的索引最好不要超過三個 (特殊的大表除外) 最好用單欄位索引 結合SQL語句的分析執行情況

也可以建立多欄位的組合索引和基於函數的索引

ORACLE 字元串可以索引的最大長度為 單位元組

ORACLE 字元串可以索引的最大長度為 單位元組

ORACLE DOC上說字元串最大可以建索引的長度約是:數據塊的大小(db_block_size)* %

視圖 (VIEW)

CREATE VIEW 視圖名AS SELECT … FROM … ;

ALTER VIEW視圖名 PILE;

視圖僅是一個SQL查詢語句 它可以把表之間復雜的關系簡潔化

同義詞 (SYNONMY)

CREATE SYNONYM同義詞名FOR 表名;

CREATE SYNONYM同義詞名FOR 表名@資料庫鏈接名;

資料庫鏈接 (DATABASE LINK)

CREATE DATABASE LINK資料庫鏈接名CONNECT TO 用戶名 IDENTIFIED BY 密碼 USING 『資料庫連接字元串 ;

資料庫連接字元串可以用NET EASY CONFIG或者直接修改TNSNAMES ORA里定義

資料庫參數global_name=true時要求資料庫鏈接名稱跟遠端資料庫名稱一樣

資料庫全局名稱可以用以下命令查出

SELECT * FROM GLOBAL_NAME;

查詢遠端資料庫里的表

SELECT …… FROM 表名@資料庫鏈接名;

五 許可權管理 (DCL) 語句

GRANT 賦於許可權

常用的系統許可權集合有以下三個:

CONNECT(基本的連接) RESOURCE(程序開發) DBA(資料庫管理)

常用的數據對象許可權有以下五個:

ALL ON 數據對象名 SELECT ON 數據對象名 UPDATE ON 數據對象名

DELETE ON 數據對象名 INSERT ON 數據對象名 ALTER ON 數據對象名

GRANT CONNECT RESOURCE TO 用戶名;

GRANT SELECT ON 表名 TO 用戶名;

GRANT SELECT INSERT DELETE ON表名 TO 用戶名 用戶名 ;

REVOKE 回收許可權

REVOKE CONNECT RESOURCE FROM 用戶名;

REVOKE SELECT ON 表名 FROM 用戶名;

lishixin/Article/program/MySQL/201311/29570