SQL

出自ProgWiki

跳轉到: 導航, 搜尋

SQL(Structured Query Language),參照:『維基百科~SQL

目錄

SQL的版本

標準
主要分支版本

SQL基本語法

查詢(Select)

基本模式
SELECT [欄位1, 欄位2, ...] 
    FROM [資料表]
    WHERE [篩選條件] 
    ORDER BY [排序欄位] [ASC/DESC]
相同欄位的多個查詢結果串接(也可使用不同來源的資料表)
SELECT [欄位1, 欄位2, ...] 
    FROM [資料表1]
    WHERE [篩選條件1] 
UNION
SELECT [欄位1, 欄位2, ...] 
    FROM [資料表2]
    WHERE [篩選條件2]

插入(Insert)

基本模式
INSERT INTO [資料表] ([欄位1, 欄位2, ...])
    VALUES ([欄位值1, 欄位值2, ...])
從另一個資料表取資料,插入到另一個資料表之中
INSERT INTO [資料表] ([欄位1, 欄位2, ...])
    SELECT ([欄位1, 欄位2, ...]) FROM [來源資料表] WHERE [篩選條件]

更新(Update)

基本模式
UPDATE [資料表] SET [欄位1 = 欄位值1, 欄位2 = 欄位值2 ...]
    WHERE [篩選條件]
從別的資料表中取出資料,更新到資料表
UPDATE [資料表]
	SET [欄位1=a.欄位1, 欄位2=a.欄位2 ....]
	FROM  [來源資料表] AS a
        WHERE [篩選條件]

刪除(Delete)

基本模式
DELETE FROM [資料表] WHERE [篩選條件]

SQL分頁select

分頁前SQL

SELECT [欄位1, 欄位2, ...] 
    FROM [資料表]
    WHERE [篩選條件] 
    ORDER BY [排序欄位] [ASC/DESC]

MS-SQL

MS-SQL Type A

SELECT [欄位1, 欄位2, ...] FROM [資料表]
    WHERE [主要索引欄位] IN
    (
        SELECT * FROM 
        (
            SELECT TOP [每頁長度*第幾頁] [主要索引欄位]
                FROM [資料表]
                WHERE [篩選條件]     
        )
        AS [資料表别名1]
        WHERE [主要索引欄位] NOT IN
        (
            SELECT TOP [每頁長度] [主要索引欄位] 
                FROM [資料表]
                WHERE [篩選條件] 
        )
    )

MS-SQL Type B

SELECT * FROM 
(
    SELECT TOP [每頁長度] * FROM 
    (
        SELECT TOP [每頁長度*第幾頁] [欄位1, 欄位2, ...] 
        FROM [資料表]
        WHERE [篩選條件]     
        ORDER BY [排序欄位] [DESC/ASC]
    )
    AS [資料表别名1]
    ORDER BY [排序欄位] [ASC/DESC]
)
AS [資料表别名2] 
ORDER BY [排序欄位] [DESC/ASC]

MS-SQL Type C

SELECT * FROM 
(
    SELECT rank() OVER ( ORDER BY [排序欄位] [ASC/DESC] ) AS RankNumber, * FROM
    (
        SELECT [欄位1, 欄位2, ...] 
        FROM [資料表]
        WHERE [篩選條件]     
    )
    AS [資料表别名1]
) AS [資料表别名2]
WHERE RankNumber between [每頁長度*(第幾頁-1)] and [每頁長度*第幾頁]

MS-SQL Type D

SELECT IDENTITY(INT,1,1) AS RankNumber, [欄位1, 欄位2, ...] 
INTO [#暫存資料表名稱] 
FROM [資料表]
ORDER BY [排序欄位] [ASC/DESC];
 
SELECT * FROM [#暫存資料表名稱]
WHERE RankNumber between [每頁長度*(第幾頁-1)] and [每頁長度*第幾頁];
 
DROP TABLE [#暫存資料表名稱];

其他相關

(以SQL預存程序實作SQL-Sever的北風資料庫的分頁範例)

MySQL

SELECT [欄位1, 欄位2, ...] 
        FROM [資料表]
        WHERE [篩選條件]     
        ORDER BY [排序欄位] [ASC/DESC]
        LIMIT [每頁長度] OFFSET [每頁長度*第幾頁]


Oracle

使用ROWNUM做分頁
SELECT * FROM (
        SELECT [欄位1, 欄位2, ...] 
                FROM [資料表]
                WHERE [篩選條件]
                ORDER BY [排序欄位] [ASC/DESC]
)
WHERE   ROWNUM >= [每頁長度*(第幾頁-1)+1]
    AND ROWNUM <= [每頁長度*第幾頁]

相關

Connection Strings

主條目:ConnectionString

SQL資料隱碼

主條目:SQL資料隱碼

FAQ

當Table或欄位的名稱衝到SQL預設的保留字時

跨資料庫轉換

相關軟體
個人工具
名字空間
變換
動作
導航
分類
其他
技術類News或部落格
工具箱