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

sql文法

發布時間: 2023-07-20 16:12:29

sql語法:一些最重要的 SQL 命令

SQL語法
資料庫
一個資料庫通常包含一個或多個表。每個表由一個名字標識(例如:Websites),表包含帶有數據的記錄(行)。
在本教程中,我們在 MySQL 的 RUNOOB 資料庫中中創建了 Websites 表,用於存儲網站記錄。
我們可以通過以下命令查看 Websites 表的數據:

mysqluseRUNOOB;;QueryOK,0rowsaffected(0.00sec)mysqlSELECT*FROMWebsites;+----+--------------+---------------------------+-------+---------+|id|name|url|alexa|country|+----+--------------+---------------------------+-------+---------+|1|Google|
解析
use RUNOOB;命令用於選擇資料庫。
set names utf8;命令用於設置使用的字元集。
SELECT * FROM Websites;讀取數據表的信息。
上面的表包含五條記錄(每一條對應一個網站信息)和5個列(id、name、url、alexa 和country)。
SQL 語句
您需要在資料庫上執行簡仔的大部分工作都由 SQL 語句完成。
下面的 SQL 語句從 Websites 表中選取所有記錄:
實盯咐昌例
SELECT * FROM Websites;
在本教程中,我們將為您講解各種不同的 SQL 語句。
請記住...
SQL 對大小寫不敏感:SELECT 與 select 是相同的。
SQL 語句後面的分號?
某些資料庫系統要求在每條 SQL 語句的末端使用分號。
分號是在資料庫系統中分隔每條 SQL 語句的標准方法,這樣就可以在對伺服器的相同請求中執行一條以上的 SQL 語句。
在本教程中,我們將在每條 SQL 語句的末端使用分號。
一些最重要的 SQL 命令
SELECT- 從資料庫中提取數據
UPDATE- 更新資料庫中的數據
DELETE- 從資料庫中刪除數據
INSERT INTO- 向資料庫中插入新數據
CREATE DATABASE- 創建新資料庫
ALTER DATABASE- 修改資料庫
CREATE TABLE- 創建新表
ALTER TABLE- 變更(改變)資料庫表
DROP TABLE- 刪除表
CREATE INDEX- 創建索引(搜索鍵)凱扒
DROP INDEX- 刪除索引

❷ SQL資料庫常用命令及語法舉例

下面是一些常用的SQL語句,雖然很基礎,可是卻很值得收藏,對於初學者非常實用

❸ 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_OFFICE

FROM EMPLOYEES;

這次查詢的結果如表3所示。

現在已經消除了重復的行,但結果並不是按照順序排列的。如果你希望以字母表順序將結果列出又該怎麼做呢?只要使用ORDER BY子句就可以按照升序或降序來排列結果:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

ORDER BY BRANCH_OFFICE ASC;

這一查詢的結果如表4所示。請注意在ORDER BY之後是如何放置列名BRANCH _OFFICE的,這就是我們想要對其進行排序的列。為什麼即使是結果表中只有一個列時我們也必須指出列名呢?這是因為我們還能夠按照表中其他列進行排序,即使它們並不顯示出來。列名BRANCH_ OFFICE之後的關鍵字ASC表示按照升序排列。如果你希望以降序排列,那麼可以用關鍵字DESC。

同樣我們應該指出ORDER BY子句只將臨時表中的結果進行排序;並不影響原來的表。

假設我們希望得到按部門排序並從工資最高的雇員到工資最低的雇員排列的列表。除了工資括弧中的內容,我們還希望看到按照聘用時間從最近聘用的雇員開始列出的列表。以下是你將要用到的語句:

SELECT BRANCH_OFFICE,FIRST_NAME,

LAST_NAME,SALARY,HIRE_DATE

FROM EMPLOYEES

ORDER BY SALARY DESC,

HIRE_DATE DESC;

這里我們進行了多列的選擇和排序。排序的優先順序由語句中的列名順序所決定。SQL將先對列出的第一個列進行排序。如果在第一個列中出現了重復的行時,這些行將被按照第二列進行排序,如果在第二列中又出現了重復的行時,這些行又將被按照第三列進行排序……如此類推。這次查詢的結果如表5所示。

將一個很長的表中的所有列名寫出來是一件相當麻煩的事,所以SQL允許在選擇表中所有的列時使用*號:

SELECT * FROM EMPLOYEES;

這次查詢返回整個EMPLOYEES表,如表1所示。

下面我們對開始時給出的SELECT語句的語法進行一下更新(豎直線表示一個可選項,允許在其中選擇一項。):

SELECT [DISTINCT]

(column [{, 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 EMPLOYEES

WHERE LAST_NAME = 'Jones';

LAST_NAME = 'Jones'部分就是斷言。在執行該語句時,SQL將每一行的LAST_NAME列與「Jones」進行比較。如果某一職員的姓為「Jones」,即斷言成立,該職員的信息將被包括到結果表中(見表6)。

使用最多的六種比較

我們上例中的斷言包括一種基於「等值」的比較(LAST_NAME = 'Jones'),但是SQL斷言還可以包含其他幾種類型的比較。其中最常用的為:

等於 =

不等於 <>

小於 <

大於 >

小於或等於 <=

大於或等於 >=

下面給出了不是基於等值比較的一個例子:

SELECT * FROM EMPLOYEES

WHERE SALARY > 50000;

❹ 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語句的基本語法是怎麼寫的啊 在線等哈~ 謝謝那位大神幫幫忙!

一、增(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的基本語法

一、基礎
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 語法結構包括:

例如: SELECT 與 select 、 Select 是相同的。

數據定義語言(Data Definition Language,DDL)是 SQL 語言集中負責數據結構定義與資料庫對象定義的語言。

DDL 的主要功能是 定義資料庫對象

DDL 的核心指令是 CREATE 、 ALTER 、 DROP 。

數據操縱語言(Data Manipulation Language, DML)是用於資料庫操作,對資料庫其中的對象和數據運行訪問工作的編程語句。

DML 的主要功能是 訪問數據 ,因此其語法都是以 讀寫資料庫 為主。

DML 的核心指令是 INSERT 、 UPDATE 、 DELETE 、 SELECT 。這四個指令合稱 CRUD(Create, Read, Update, Delete),即增刪改查。

事務控制語言 (Transaction Control Language, TCL) 用於 管理資料庫中的事務 。這些用於管理由 DML 語句所做的更改。它還允許將語句分組為邏輯事務。

TCL 的核心指令是 COMMIT 、 ROLLBACK 。

數據控制語言 (Data Control Language, DCL) 是一種可對數據訪問權進行控制的指令,它可以控制特定用戶賬戶對數據表、查看錶、預存程序、用戶自定義函數等資料庫對象的控制權。

DCL 的核心指令是 GRANT 、 REVOKE 。

DCL 以 控制用戶的訪問許可權 為主,因此其指令作法並不復雜,可利用 DCL 控制的許可權有: CONNECT 、 SELECT 、 INSERT 、 UPDATE 、 DELETE 、 EXECUTE 、 USAGE 、 REFERENCES 。

根據不同的 DBMS 以及不同的安全性實體,其支持的許可權控制也有所不同。

(以下為 DML 語句用法)


插入完整的行

插入行的一部分

插入查詢出來的數據



刪除表中的指定數據

清空表中的數據


查詢單列

查詢多列

查詢所有列

查詢不同的值

限制查詢結果


子查詢的子查詢



SELECT 語句中的 WHERE 子句

UPDATE 語句中的 WHERE 子句

DELETE 語句中的 WHERE 子句

IN 示例

BETWEEN 示例

AND 示例

OR 示例

NOT 示例

% 示例

_ 示例


組合查詢



其中, SOUNDEX() 可以將一個字元串轉換為描述其語音表示的字母數字模式。








AVG() 會忽略 NULL 行。

使用 DISTINCT 可以讓匯總函數值匯總不同的值。

指定多個列的排序方向

分組

分組後排序

使用 WHERE 和 HAVING 過濾數據

(以下為 DDL 語句用法)

普通創建

根據已有的表創建新表

添加列

刪除列

修改列

添加主鍵

刪除主鍵



創建表時使用約束條件:

(以下為 TCL 語句用法)


(以下為 DCL 語句用法)




可以使用觸發器來進行審計跟蹤,把修改記錄到另外一張表中。

MySQL 不允許在觸發器中使用 CALL 語句 ,也就是不能調用存儲過程。

BEGIN 和 END

當觸發器的觸發條件滿足時,將會執行 BEGIN 和 END 之間的觸發器執行動作。

NEW 和 OLD

CREATE TRIGGER 指令用於創建觸發器。

語法:

說明:

示例:

❽ 在SQL中存儲過程的一般語法是什麼

1、 創建語法

createproc|procerepro_name

[{@參數數據類型}[=默認值][output],

{@參數數據類型}[=默認值][output],

....

]

as

SQL_statements

2、 創建不帶參數存儲過程

--創建存儲過程

if(exists(select*fromsys.objectswherename='proc_get_student'))

dropprocproc_get_student

go

createprocproc_get_student

as

select*fromstudent;

--調用、執行存儲過程

execproc_get_student;

3、 修改存儲過程

--修改存儲過程

alterprocproc_get_student

as

select*fromstudent;

4、 帶參存儲過程

--帶參存儲過程

if(object_id('proc_find_stu','P')isnotnull)

dropprocproc_find_stu

go

createprocproc_find_stu(@startIdint,@endIdint)

as

select*fromstudentwhereidbetween@startIdand@endId

go

execproc_find_stu2,4;

5、 帶通配符參數存儲過程

--帶通配符參數存儲過程

if(object_id('proc_findStudentByName','P')isnotnull)

dropprocproc_findStudentByName

go

createprocproc_findStudentByName(@namevarchar(20)='%j%',@nextNamevarchar(20)='%')

as

select*fromstudentwherenamelike@nameandnamelike@nextName;

go

execproc_findStudentByName;execproc_findStudentByName'%o%','t%';

(8)sql文法擴展閱讀:

SQL存儲過程優點:

1、重復使用。存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。

2、減少網路流量。存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。

3、安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。

❾ MySQL資料庫SQL語法參考


一、資料定義 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
二、資料操作 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 mydatecast(񟭀-01-01' as date) 或:where mydateto_date(񟭀-01-01','yyyy-mm-dd')
在delphi中寫成:
thedate=񟭀-01-01'
query1.sql.add('select * from abc where mydatecast('+''''+thedate+''''+' as date)');
如果比較日期時間型,則為:
where mydatetimeto_date(񟭀-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss');

❿ SQL語句的基本語法一

一 SELECT語句的完整語法為 SELECT[ALL|DISTINCT|DISTINCTROW|TOP]{*|talbe *|[table ]field [AS alias ][ [table ]field [AS alias ][ …]]}FROM tableexpression[ …][IN externaldatabase][WHERE…][GROUP BY…賀察敗][HAVING…][ORDER BY…][WITH OWNERACCESS OPTION]說明 用中括弧([])括起來的部分表示是可選的 用大括弧({})括起來的部分是表示必須從中選擇其中的一個 FROM子句FROM子句指定了SELECT語句中欄位的來源 FROM子句後面是包含一個或多個的表達式(由沒盯逗號分開) 其中的表達式可為單一表名稱 已保存的查詢或由 INNER JOIN LEFT JOIN 或 RIGHT JOIN 得到的復合結果 如果表或查詢存儲在外部資料庫 在IN 子句之後指明其完整路徑禪顫 例 下列SQL語句返回所有有定單的客戶 SELECT OrderID Customer customerIDFROMOrders CustomersWHERE Orders CustomerID=Customers CustomeersID ALL DISTINCT DISTINCTROW TOP謂詞( ) ALL 返回滿足SQL語句條件的所有記錄 如果沒有指明這個謂詞 默認為ALL 例 SELECT ALL FirstName LastNameFROMEmployees( ) DISTINCT 如果有多個記錄的選擇欄位的數據相同 只返回一個 ( ) DISTINCTROW 如果有重復的記錄 只返回一個( ) TOP顯示查詢頭尾若干記錄 也可返回記錄的百分比 這是要用 TOP N PERCENT子句(其中N 表示百分比)例 返回 %定貨額最大的定單SELECT TOP PERCENT*FROM[ Order Details]ORDER BY UnitPrice*Quantity*( Discount) DESC 用 AS 子句為欄位取別名如果想為返回的列取一個新的標題 或者 經過對欄位的計算或總結之後 產生了一個新的值 希望把它放到一個新的列里顯示 則用AS保留 例 返回FirstName欄位取別名為NickNameSELECT FirstName AS NickName LastName CityFROM Employees例 返回新的一列顯示庫存價值SELECT ProctName UnitPrice UnitsInStock UnitPrice*UnitsInStock AS valueInStockFROMProcts 二 WHERE 子句指定查詢條件 比較運算符比較運算符 含義= 等於> 大於< 小於>= 大於等於<= 小於等於<> 不等於!> 不大於!< 不小於例 返回 年 月的定單SELECT OrderID CustomerID OrderDateFROMOrdersWHERE OrderDate># / / # AND OrderDate<# / / #注意 Mcirosoft JET SQL 中 日期用 # 定界 日期也可以用Datevalue()函數來代替 在比較字元型的數據時 要加上單引號 尾空格在比較中被忽略 例 WHEREOrderDate># #也可以表示為 WHEREOrderDate>Datevalue( / / )使用 NOT 表達式求反 例 查看 年 月 日以後的定單WHERE Not OrderDate<=# / / # 范圍(BEEEN 和 NOT BEEEN)BEEEN …AND…運算符指定了要搜索的一個閉區間 例 返回 年 月到 年 月的定單 WHERE OrderDate Beeen # / / # And # / / # 列表(IN NOT IN)IN 運算符用來匹配列表中的任何一個值 IN子句可以代替用OR子句連接的一連串的條件 例 要找出住在 London Paris或Berlin的所有客戶SELECT CustomerID CompanyName ContactName CityFROMCustomersWHERE City In( London Paris Berlin ) 模式匹配(LIKE)LIKE運算符檢驗一個包含字元串數據的欄位值是否匹配一指定模式 LIKE運算符里使用的通配符通配符 含義? 任何一個單一的字元* 任意長度的字元# ~ 之間的單一數字[字元列表] 在字元列表裡的任一值[!字元列表] 不在字元列表裡的任一值 指定字元范圍 兩邊的值分別為其上下限例 返回郵政編碼在( ) 到( ) 之間的客戶SELECT CustomerID CompanyName City PhoneFROMCustomersWHERE Phone Like ( ) #### LIKE運算符的一些樣式及含義樣式 含義 不符合LIKE A* A後跟任意長度的字元 Bc c LIKE [*] * LIKE ? 與 之間有任意一個字元 wer LIKE ## kd LIKE [a z] a z間的任意一個字元 %LIKE [! ] 非 間的任意一個字元 LIKE [[] * 三 用ORDER BY子句排序結果 ORDER子句按一個或多個(最多 個)欄位排序查詢結果 可以是升序(ASC)也可以是降序(DESC) 預設是升序 ORDER子句通常放在SQL語句的最後 ORDER子句中定義了多個欄位 則按照欄位的先後順序排序 例 SELECTProctName UnitPrice UnitInStockFROMProctsORDER BY UnitInStock DESC UnitPrice DESC ProctNameORDER BY 子句中可以用欄位在選擇列表中的位置號代替欄位名 可以混合欄位名和位置號 例 下面的語句產生與上列相同的效果 SELECTProctName UnitPrice UnitInStockFROMProctsORDER BY DESC DESC 四 運用連接關系實現多表查詢 例 找出同一個城市中供應商和客戶的名字SELECTCustomers CompanyName Suppliers ComPany NameFROM Customers SuppliersWHERECustomers City=Suppliers City例 找出產品庫存量大於同一種產品的定單的數量的產品和定單SELECTProctName OrderID UnitInStock QuantityFROMProcts [Order Deails]WHEREProct proctID=[Order Details] ProctIDAND UnitsInStock>Quantity另一種方法是用 Microsof JET SQL 獨有的 JNNER JOIN語法 FROMtable INNER JOIN table ON table field parision table field 其中parision 就是前面WHERE子句用到的比較運算符 SELECT FirstName lastName OrderID CustomerID OrderDateFROMEmployeesINNER JOIN Orders ONEmployees EmployeeID=Orders EmployeeID注意 INNER JOIN不能連接Memo OLE Object Single Double 數據類型欄位 在一個JOIN語句中連接多個ON子句語法 SELECT fieldsFROMtable INNER JOIN table ON table field popr table field ANDON table field popr table field ORON table field popr table field 也可以SELECT fieldsFROMtable INNER JOIN(table INNER JOIN [( ]table [INNER JOER] [( ]tablex[INNER JOIN]ON table field popr table field ON table field popr table field ON table field popr table field 外部連接返回更多記錄 在結果中保留不匹配的記錄 不管存不存在滿足條件的記錄都要返回另一側的所有記錄 FROM table [LEFT|RIGHT]JOIN table ON table field parision table field 用左連接來建立外部連接 在表達式的左邊的表會顯示其所有的數據例 不管有沒有定貨量 返回所有商品SELECT ProctName OrderIDFROMProctsLEFT JOINOrders ON Procts PrctsID=Orders ProctID lishixin/Article/program/Oracle/201311/16954