當前位置:首頁 » 編程語言 » sql基礎語法

sql基礎語法

發布時間: 2022-04-02 05:26:05

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里最基本的語法是什麼呢

一.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 ProctName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock
FROM Procts
二 .WHERE 子句指定查詢條件
二 . 1比較運算符
比較運算符 含義
= 等於
> 大於
= 大於等於
不等於
!> 不大於
!#1/1/96# AND OrderDate#96-1-1#
也可以表示為:
WHERE OrderDate>Datevalue(『1/1/96』)
使用 NOT 表達式求反。
例:查看96年1月1日以後的定單
WHERE Not OrderDateQuantity
另一種方法是用 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 ProctName ,OrderID
FROM Procts
LEFT JOIN Orders ON Procts.PrctsID=Orders.ProctID
右連接與左連接的差別在於:不管左側表裡有沒有匹配的記錄,它都從左側表中返回所有記錄。
例:如果想了解客戶的信息,並統計各個地區的客戶分布,這時可以用一個右連接,即使某個地區沒有客戶,也要返回客戶信息。
空值不會相互匹配,可以通過外連接才能測試被連接的某個表的欄位是否有空值。
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,,=)一起使用.返回一個布爾值True或False.ANY的意思是,表達式與子查詢返回的一系列的值逐一比較,只要其中的一次比較產生True結果,ANY測試的返回 True值(既WHERE子句的結果),對應於該表達式的當前記錄將進入主查詢的結果中.ALL測試則要求表達式與子查詢返回的一系列的值的比較都產生True結果,才回返回True值.
例:主查詢返回單價比任何一個折扣大於等於25%的產品的單價要高的所有產品
SELECT * FROM Procts
WHERE UnitPrice>ANY
(SELECT UnitPrice FROM[Order Details] WHERE Discount>0.25)
十 .2檢查表達式的值是否匹配子查詢返回的一組值的某個值
語法:
[NOT]IN(子查詢)
例:返回庫存價值大於等於1000的產品.
SELECT ProctName FROM Procts
WHERE ProctID IN
(SELECT PrdoctID FROM [Order DEtails]
WHERE UnitPrice*Quantity>= 1000)
十 .2檢測子查詢是否返回任何記錄
語法:
[NOT]EXISTS (子查詢)
例:用EXISTS檢索英國的客戶
SELECT ComPanyName,ContactName
FROM Orders
WHERE EXISTS
(SELECT *
FROM Customers
WHERE Country = 『UK』 AND
Customers.CustomerID= Orders.CustomerID)

③ 請教SQL基本語句

SQL SELECT 語句
SELECT 語句用於從表中選取數據。表格式的結構被存儲在一個結果表中(稱為結果集)。
語法:SELECT 列名稱 FROM 表名稱
注釋:SQL 語句對大小寫不敏感。SELECT 等效於 select。

Update 語句
Update 語句用於修改表中的數據。
語法:UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

DELETE 語句
DELETE 語句用於刪除表中的行。
語法:DELETE FROM 表名稱 WHERE 列名稱 = 值

④ SQL的基本操作

1.創建表

(1)用Create Table 命令創建表

語法:

Create Table tabl_name

({

}column_name As computed_column_expression

}

}[,...n]

)

[On {fiegroup | Default}]

[Textimage_On {fiegroup | Default}]

例子:

打開cust資料庫,創建一個表,該表包含了學生的有關信息,即有學號、姓名、性別、出生日期、籍貫、聯系電話、住址和備注信息。

Use cust

Create Table students

(

number int not null,

name varchar(10) not null,

sex char(2) null,

birthday datetime null,

hometown varchar(30) null,

telphone_no varchar(12) null,

address varchar(30) null,

others varchar(50) null

)

在這個表中number表示學生代號,數據類型為int,不允許為空;name表示學生姓名,數據類型為varchar,長度為10,不允許為空;sex表示學生的性別,數據類型為char,長度為2,允許為空;birthday表示學生的出生日期,數據類型為datetime,允許為空;hometown表示學生的籍貫,數據類型為varchar,長度為30,允許為空;telephone_no表示學生的聯系電腦,數據類型為varchar,長度為12,允許為空;address表示學生的住址,數據類型為varchar,長度為30,允許為空;others表示學生的備注信息,長度為50,允許為空。

2.修改表的結構

(1)使用T-SQL語句增加和刪除一個新列

語法:

Alter Table table

{

ADO

{[]

|colun_name As computed_column_expression

|[]

}[,...n]

|Drop

{Column column

}[,...n]

}

例子:打開cust資料庫,修改其中的表students的結構,增加一個新欄位,欄位名為ying,數據類型是varchar,長度是10,沒有默認值,充許為空。

Use cust

Alter Table students Add ying varchar(10) null

打開cust資料庫,修改其中的表students的結構,刪除一個欄位,欄位名為ying。

Use cust

Alter Table students Drop Column ying

3.向表中插入數據

(1)用 Insert 語句

語法如下:

Insert [Into]

{table_name|view_name}[(column_list)]

{Values|values_list|select_statement}

注意:在插入數據時,字元數據和日期數據要使用引號引起來。

例子:

Use cust

Insert Into students

Values (11,"影子","男","1999-12-12","湖北","83779805","武漢市橋口區","VB愛好者")

打開cust資料庫,向students表中插入數據

(2)用Default 選項

在插入數據時,可以使用Default選項。Default選項有兩種形式,一種形式是Default Values,另一種是Default。

Default Values 形式為表中的某一行的所有列插入默認值。使用這種形式的前提條件是表中的所有列必須是這四種類型之一:Identity屬性,Timestamp數據類型,允許為Null,或者有一個指定的默認值。否則,會錯誤信息。

例子:

Use cust

Insert Into students Default Values

這個例子會出現錯誤,因為students表的number欄位是設置為不允許為空的。

Default 形式是為表中的某一列插入默認值。要插入的該列必須具備一定的條件,即該列要麼是Timestamp 數據類型,要麼是允許為Null,要麼是有一個指定的默認值,否則,會出現錯誤信息。

例子:

Use cust

Insert Into students Values(11,"影子",Default,Default,Default,Default,Default,Default)

由天前2個欄位不能為空,所以要賦值,否則會出現錯誤,而後面的6個欄位允許為空,因此可以調用Default默認。

(3)插入部分數據

在使用Insert語句插入數據是,還可以插入部分數據,也就是可以為每一行的指定的部分列插入數據。在插入部分數據時,應該注意以下三個問題:

☆在 Insert 子句中,指定要插入數據的列名。

☆在 Values 子句中,列出與列名對應的數據。列名的順序和數據的順序應該完全對應。

☆在 Insert 子句中,沒有列出的列應該至少具有這四種類型之一:Identtty 屬性,Timestamp 數據類型,允許為 Null,或者有一個指定的默認值。否則,會出現錯誤信息。

例子:

Use cust

Insert Into students (number,name)

Values (110,"影子")

打開cust資料庫,向students表中插入一行數據

注意:如用下例語句將發生錯誤,因為name欄位是不允許為空的(在創建資料庫時設定的)

Insert Into students (number)

Values (110)

(4)用 Select 語句插入多條數據

Insert 語句插入數據的特點是每一次只能插入一行數據。相反,Select 也可以用在 Insert 語句中,並且可以一次插入多條數據。使用 Select 語句插入數據的語法形式如下:

Insert table_name

Select column_list

From table_list

Where search_conditions

在使用 Select 語句插入數據時,應該注意下面幾點:

☆在 Insert 語句中使用 Select 時,他們參考的表既可以是相同的,也可以是不同的。

☆要插入數據的表必須已經存在。

☆要插入數據的表必須和 Select 的結果集兼容。兼容的含義是列的數量和順序必須相同,列的數據類型或者相同,或者SQL Server 可以自動轉換。

例子:

Use cust

Insert students

Select number,name,sex,birthday,hometown,telphone_no,address,others

From students

注意:

Select 後面的欄位要輸完整,這個例子是自己向自己插入多條數據(自己向自己插入是被允許的)

補充:

你還可以「From students」後面加上「Where name="影子"」,只插入name等於影子的記錄,可以用And 和 Or 加上多個條件。

(5)使用 Select Into 插入數據到一個新表中

帶有 Into 子句的 Select 語句允許用戶定義一個新表並且把數據插入到新表中。這種方法不同於前面講述的那些方法。在前面的那些方法中,一個共同的特點,是在數據輸入之前表已經存在。而使用 Select Into 插入數據的方法,是在插入數據的過程中建立新表。

Select Into 語句的語法如下:

Select select_list

Into new_table_name

From table_list

Where search_conditions

在使用 Select Into 插入數據時,要注意下面幾點:

☆在某個資料庫中使用 Select Into 插入數據時,設置該資料庫的 Select Into/Bulk Copy 為真。

☆新表不能存在,否則會產生錯誤信息。

☆新表中的列和行是基於查詢結果集

☆要插入的數據不記錄在日誌中。

☆在select_list 中出現的列應該使用別名,否則,新表中的列沒有列名。沒列名的表只能通過 Select * From new_table_name 的形式查詢。因此,應該為列起個別名。

☆這種方法多用在對列進行各種計算的情況。

例子:

Select number,name

Into newcust1

From students

創建新的表newcust1,插入students表中的number和name欄位的所有數據。

補充:如果要插入所有欄位的記錄,則「Select *」,也可在「From students」後加條件,方法和上個例子一樣。

(6)用 UPdate 語句修改表中的數據

Update 語句用來修改表中已存在的數據。Update 語句既可以一次修改一行數據,也可以一次修改許多行,甚至可以一次修改表中的全部數據。Update 語句使用 Where 子句指定要修改的行,使用 Set 子句給出新的數據。新數據可以是常量,也可以是指定的表達式,還可以是使用 From 子句來自其他表的數據。

Update 語句的語法如下:

Update {table_name|view_name}

Set {column_list}=expression [,. . .]

[Where clause]

在使用 Update 語句時,如果沒有使用 Where 子句,那麼就對表中所有的行進行修改。如果使用Update 語句修改數據時與數據完整性約束有沖突,那麼修改就不會發生,整個修改事務全部滾回。例如,這種沖突可能是所輸入的值是錯誤的數據類型,或者所輸入的值違背了在該列定義的規則約束,等等。

例子:

Use cust

Update students

Set name=name+"007"

Where number>100

打開cust資料庫,修改students表,使number>100的數據的name的值全部加"007"。

4.用 Delete 語句刪除表中的數據

當資料庫中的數據不需要的進修可以刪除。一般情況下,刪除數據使用 Delete 語句。Delete 語句可以一次

⑤ SQL最基本的語句是哪些

掌握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 { ,column})]VALUES(columnvalue [{,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_OFFICEFROM EMPLOYEES;這次查詢的結果如表3所示。現在已經消除了重復的行,但結果並不是按照順序排列的。如果你希望以字母表順序將結果列出又該怎麼做呢?只要使用ORDER BY子句就可以按照升序或降序來排列結果:SELECT DISTINCT BRANCH_OFFICEFROM EMPLOYEESORDER BY BRANCH_OFFICE ASC;這一查詢的結果如表4所示。請注意在ORDER BY之後是如何放置列名BRANCH _OFFICE的,這就是我們想要對其進行排序的列。為什麼即使是結果表中只有一個列時我們也必須指出列名呢?這是因為我們還能夠按照表中其他列進行排序,即使它們並不顯示出來。列名BRANCH_ OFFICE之後的關鍵字ASC表示按照升序排列。如果你希望以降序排列,那麼可以用關鍵字DESC。同樣我們應該指出ORDER BY子句只將臨時表中的結果進行排序;並不影響原來的表。假設我們希望得到按部門排序並從工資最高的雇員到工資最低的雇員排列的列表。除了工資括弧中的內容,我們還希望看到按照聘用時間從最近聘用的雇員開始列出的列表。以下是你將要用到的語句:SELECT BRANCH_OFFICE,FIRST_NAME,LAST_NAME,SALARY,HIRE_DATEFROM EMPLOYEESORDER BY SALARY DESC,HIRE_DATE DESC;這里我們進行了多列的選擇和排序。排序的優先順序由語句中的列名順序所決定。SQL將先對列出的第一個列進行排序。如果在第一個列中出現了重復的行時,這些行將被按照第二列進行排序,如果在第二列中又出現了重復的行時,這些行又將被按照第三列進行排序……如此類推。這次查詢的結果如表5所示。將一個很長的表中的所有列名寫出來是一件相當麻煩的事,所以SQL允許在選擇表中所有的列時使用*號:SELECT * FROM EMPLOYEES;這次查詢返回整個EMPLOYEES表,如表1所示。下面我們對開始時給出的SELECT語句的語法進行一下更新(豎直線表示一個可選項,允許在其中選擇一項。):SELECT [DISTINCT](column [{, columns}])| *FROM table [ {, table}][ORDER BY column [ASC] | DESC[ {, column [ASC] | DESC }]];定義選擇標准在我們目前所介紹的SELECT語句中,我們對結果表中的列作出了選擇但返回的是表中所有的行。讓我們看一下如何對SELECT語句進行限制使得它只返回希望得到的行:SELECT columns FROM tables [WHERE predicates];WHERE子句對條件進行了設置,只有滿足條件的行才被包括到結果表中。這些條件由斷言(predicate)進行指定(斷言指出了關於某件事情的一種可能的事實)。如果該斷言對於某個給定的行成立,該行將被包括到結果表中,否則該行被忽略。在SQL語句中斷言通常通過比較來表示。例如,假如你需要查詢所有姓為Jones的職員,則可以使用以下SELECT語句:SELECT * FROM EMPLOYEESWHERE LAST_NAME = 'Jones';LAST_NAME = 'Jones'部分就是斷言。在執行該語句時,SQL將每一行的LAST_NAME列與「Jones」進行比較。如果某一職員的姓為「Jones」,即斷言成立,該職員的信息將被包括到結果表中(見表6)。使用最多的六種比較我們上例中的斷言包括一種基於「等值」的比較(LAST_NAME = 'Jones'),但是SQL斷言還可以包含其他幾種類型的比較。其中最常用的為:等於 =不等於 <>小於 <大於 >小於或等於 <=大於或等於 >=下面給出了不是基於等值比較的一個例子:SELECT * FROM EMPLOYEESWHERE SALARY > 50000;這一查詢將返回年薪高於$50,000.00的職員(參見表7)。邏輯連接符有時我們需要定義一條不止一種斷言的SELECT語句。舉例來說,如果你僅僅想查看Davy Jones的信息的話,表6中的結果將是不正確的。為了進一步定義一個WHERE子句,用戶可以使用邏輯連接符AND,OR和NOT。為了只得到職員Davy Jones的記錄,用戶可以輸入如下語句:SELECT * FROM EMPLOYEESWHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';在本例中,我們通過邏輯連接符AND將兩個斷言連接起來。只有兩個斷言都滿足時整個表達式才會滿足。如果用戶需要定義一個SELECT語句來使得當其中任何一項成立就滿足條件時,可以使用OR連接符:SELECT * FROM EMPLOYEESWHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';有時定義一個斷言的最好方法是通過相反的描述來說明。如果你想要查看除了Boston辦事處的職員以外的其他所有職員的信息時,你可以進行如下的查詢:SELECT * FROM EMPLOYEESWHERE NOT(BRANCH_OFFICE = 'Boston');關鍵字NOT後面跟著用圓括弧括起來的比較表達式。其結果是對結果取否定。如果某一職員所在部門的辦事處在Boston,括弧內的表達式返回true,但是NOT操作符將該值取反,所以該行將不被選中。斷言可以與其他的斷言嵌套使用。為了保證它們以正確的順序進行求值,可以用括弧將它們括起來:SELECT * FROM EMPLOYEESWHERE (LAST_NAME = 'Jones'AND FIRST_NAME = 'Indiana')OR (LAST_NAME = 'Smith'AND FIRST_NAME = 'Bessie');SQL沿用數學上標準的表達式求值的約定?圓括弧內的表達式將最先進行求值,其他表達式將從左到右進行求值。以上對邏輯連接符進行了說明,在對下面的內容進行說明之前,我們再一次對SELECT語句的語法進行更新:SELECT [DISTINCT](column [{, column } ] )| *FROM table [ { , table} ][ORDER BY column [ASC] | [DESC[{ , column [ASC] | [DESC } ] ]

⑥ 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查詢語句的基本語法格式是什麼

select * form 表 where 條件

⑧ 資料庫四大SQL語句的基本語法是怎麼寫的啊 在線等哈~ 謝謝那位大神幫幫忙!

一、增(INSERT向資料庫插入一條記錄)
INSERT INTO 表名(列名1,列名2,列名3……)VALUES('值1,'值2','值3'……)
例子:
INSERT INTO muser(id,name,pwd)
VALUES('1','admin','admin')
注意:列的個數必須和VALUES子句中給出的值的個數相同;數據類型必須和類的數據類型對應。

二、刪(DELETE從表中刪除數據)
DELETE語句用來刪除數據,可以一次刪除一行,也可以刪除多行。
DELETE語句的基本語法:

DELETE FROM 表名 WHERE 條件
例子:
DELETE FROM muser WHERE id='1' and pwd='admin'

三、改(UPDATE修改表中的數據)
UPDATE語句用來修改已經存在的數據,UPDATE可影響一行也可以影響多行,甚至可以修改全部的數據。
UPDATE語句的基本語法:

UPDATE 表名 SET
列名='需要修改成為的數據'
WHERE 修改條件
例子:
UPDATE muser SET
pwd='admin888'
WHERE name='admin' AND pwd='admin'

四、查(使用SELECT查詢資料庫)
SELECT語句主要用來檢索數據
SELECT語句的基本語法:

SELECT 列名
FROM 表名
WHERE 檢索的條件
例子:
SELECT * FROM news WHERE class='國內新聞'
在列名中使用(*)表示從FROM表中指定的返回所有列。

⑨ SQL語法相關

表連接的話應該指定連接條件,對於你的表結構,連接條件應該為
A.deptid=B.deptid
完整語句可以寫作:
select A.workerid,A.workername,B.deptid,B.deptname
from worker as A,dept as B
where A.deptid=B.deptid and B.deptid='101' and A.workerid='1001'

熱點內容
安卓手機怎麼加速進程 發布:2025-01-18 07:29:48 瀏覽:681
塞恩拐彎腳本 發布:2025-01-18 07:29:37 瀏覽:742
師資配置含哪些內容 發布:2025-01-18 07:17:35 瀏覽:706
江西腳本 發布:2025-01-18 07:14:38 瀏覽:392
php中i方法 發布:2025-01-18 07:13:19 瀏覽:369
FTP寶塔Linux面板 發布:2025-01-18 07:10:05 瀏覽:396
無線網卡怎麼改密碼 發布:2025-01-18 06:54:41 瀏覽:766
ava動態編譯 發布:2025-01-18 06:54:39 瀏覽:765
中國學位論文全文資料庫 發布:2025-01-18 06:43:49 瀏覽:689
全局變數存儲類別 發布:2025-01-18 06:39:29 瀏覽:424