1. 程式人生 > >sql server學習筆記

sql server學習筆記

2016/1/25 10:03:24

1.select top

SELECT TOP 子句用於規定要返回的記錄的數目。

註釋:並非所有的資料庫系統都支援 SELECT TOP 子句。

SQL Server / MS Access 語法

SELECT TOP number|percent column_name(s)
FROM table_name;

2.like

LIKE 操作符用於在 WHERE 子句中搜索列中的指定模式。

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

3.萬用字元

萬用字元可用於替代字串中的任何其他字元。

SQL 萬用字元
在 SQL 中,萬用字元與 SQL LIKE 操作符一起使用。
SQL 萬用字元用於搜尋表中的資料。
在 SQL 中,可使用一下萬用字元:

萬用字元描述
%替代 0 個或多個字元
_替代一個字元
[charlist]字元列中的任何單一字元
[^charlist]or[!charlist]不在字元列中的任何單一字元

使用 SQL [charlist] 萬用字元

下面的 SQL 語句選取 City 以 “b”、”s” 或 “p” 開始的所有客戶:

例項

SELECT * FROM Customers
WHERE City LIKE '[bsp]%';

下面的 SQL 語句選取 City 不以 “b”、”s” 或 “p” 開始的所有客戶:

例項

SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';

4.in

IN 操作符允許您在 WHERE 子句中規定多個值。

SQL IN 語法

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

5.between

BETWEEN 操作符用於選取介於兩個值之間的資料範圍內的值。

BETWEEN 操作符選取介於兩個值之間的資料範圍內的值。這些值可以是數值、文字或者日期。

SQL BETWEEN 語法

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

6.Aliases別名

通過使用 SQL,可以為表名稱或列名稱指定別名(Alias)。

列的 SQL Alias 語法

SELECT column_name AS alias_name
FROM table_name;

表的 SQL Alias 語法

SELECT column_name(s)
FROM table_name AS alias_name;

7.Joins連線

SQL join 用於把來自兩個或多個表的行結合起來。

SQL JOIN 子句用於把來自兩個或多個表的行結合起來,基於這些表之間的共同欄位。
最常見的 JOIN 型別:SQL INNER JOIN(簡單的 JOIN)。 SQL INNER JOIN 從多個表中返回滿足 JOIN 條件的所有行。

例項

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

不同的 SQL JOIN(內連線/左外聯接/右外連線/全連線)

  • INNER JOIN:如果表中有至少一個匹配,則返回行
  • LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行
  • RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行
  • FULL JOIN:只要其中一個表中存在匹配,則返回行

8.UNION

SQL UNION 操作符合並兩個或多個 SELECT 語句的結果。

SQL UNION 操作符

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。
請注意,UNION 內部的每個 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每個 SELECT 語句中的列的順序必須相同。

SQL UNION 語法

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

註釋:預設地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL。

SQL UNION ALL 語法

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

9.SELECT INTO

通過 SQL,您可以從一個表複製資訊到另一個表。
SELECT INTO 語句從一個表複製資料,然後把資料插入到另一個新表中。

SQL SELECT INTO 語法

SELECT *
INTO newtable [IN externaldb]
FROM table1;

使用 IN 子句來複製表到另一個數據庫中:

SELECT *
INTO CustomersBackup2013 IN 'Backup.mdb'
FROM Customers;

10.INSERT INTO SELECT

通過 SQL,您可以從一個表複製資訊到另一個表。
INSERT INTO SELECT 語句從一個表複製資料,然後把資料插入到一個已存在的表中。

SQL INSERT INTO SELECT 語法

INSERT INTO table2
SELECT * FROM table1;

11.create建立資料庫和表

建立資料庫

CREATE DATABASE dbname;

建立表

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);

12.約束(Constraints)

在 SQL 中,有如下約束:

  • NOT NULL - 指示某列不能儲存 NULL 值。
  • UNIQUE - 保證某列的每行必須有唯一的值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的結合。確保某列(或兩個列多個列的結合)有唯一標識,有助於更容易更快速地找到表中的一個特定的記錄。
  • FOREIGN KEY - 保證一個表中的資料匹配另一個表中的值的參照完整性。
  • CHECK - 保證列中的值符合指定的條件。
  • DEFAULT - 規定沒有給列賦值時的預設值。

13.CREATE INDEX

CREATE INDEX 語句用於在表中建立索引。
在不讀取整個表的情況下,索引使資料庫應用程式可以更快地查詢資料。

索引

您可以在表中建立索引,以便更加快速高效地查詢資料。

使用者無法看到索引,它們只能被用來加速搜尋/查詢。

註釋:更新一個包含索引的表需要比更新一個沒有索引的表花費更多的時間,這是由於索引本身也需要更新。因此,理想的做法是僅僅在常常被搜尋的列(以及表)上面建立索引。

SQL CREATE INDEX 語法

在表上建立一個簡單的索引。允許使用重複的值:

CREATE INDEX index_name
ON table_name (column_name)
SQL CREATE UNIQUE INDEX 語法

在表上建立一個唯一的索引。不允許使用重複的值:唯一的索引意味著兩個行不能擁有相同的索引值。

Creates a unique index on a table. Duplicate values are not allowed:
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

註釋:用於建立索引的語法在不同的資料庫中不一樣。因此,檢查您的資料庫中建立索引的語法。

14.DROP

通過使用 DROP 語句,可以輕鬆地刪除索引、表和資料庫。

用於 MS SQL Server 的 DROP INDEX 語法:

DROP INDEX table_name.index_name

15.ALTER TABLE

ALTER TABLE 語句

ALTER TABLE 語句用於在已有的表中新增、刪除或修改列。

SQL ALTER TABLE 語法

如需在表中新增列,請使用下面的語法:

ALTER TABLE table_name
ADD column_name datatype

如需刪除表中的列,請使用下面的語法(請注意,某些資料庫系統不允許這種在資料庫表中刪除列的方式):

ALTER TABLE table_name
DROP COLUMN column_name

要改變表中列的資料型別,請使用下面的語法:

SQL Server / MS Access:

ALTER TABLE table_name
ALTER COLUMN column_name datatype

16.AUTO INCREMENT

Auto-increment 會在新記錄插入表中時生成一個唯一的數字。

AUTO INCREMENT 欄位

我們通常希望在每次插入新記錄時,自動地建立主鍵欄位的值。

我們可以在表中建立一個 auto-increment 欄位。

用於 SQL Server 的語法

下面的 SQL 語句把 “Persons” 表中的 “ID” 列定義為 auto-increment 主鍵欄位:

CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

MS SQL Server 使用 IDENTITY 關鍵字來執行 auto-increment 任務。

在上面的例項中,IDENTITY 的開始值是 1,每條新記錄遞增 1。

提示:要規定 “ID” 列以 10 起始且遞增 5,請把 identity 改為 IDENTITY(10,5)。

要在 “Persons” 表中插入新記錄,我們不必為 “ID” 列規定值(會自動新增一個唯一的值):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

上面的 SQL 語句會在 “Persons” 表中插入一條新記錄。”ID” 列會被賦予一個唯一的值。”FirstName” 列會被設定為 “Lars”,”LastName” 列會被設定為 “Monsen”。

17.Views檢視

檢視是視覺化的表。幾乎都不用了,可以藉助軟體的視覺化效果看到結果

SQL CREATE VIEW 語句

在 SQL 中,檢視是基於 SQL 語句的結果集的視覺化的表。
檢視包含行和列,就像一個真實的表。檢視中的欄位就是來自一個或多個數據庫中的真實的表中的欄位。
您可以向檢視新增 SQL 函式、WHERE 以及 JOIN 語句,也可以呈現資料,就像這些資料來自於某個單一的表一樣。

18.SQL日期

SQL 日期(Dates)

當我們處理日期時,最難的任務恐怕是確保所插入的日期的格式,與資料庫中日期列的格式相匹配。
只要您的資料包含的只是日期部分,執行查詢就不會出問題。但是,如果涉及時間部分,情況就有點複雜了。

MySQL Date 函式

函式描述
GETDATE()返回當前的日期和時間
DATEPART()返回日期/時間的單獨部分
DATEADD()在日期中新增或減去指定的時間間隔
DATEDIFF()返回兩個日期之間的時間
CONVERT()用不同的格式顯示日期/時間

SQL Server 使用下列資料型別在資料庫中儲存日期或日期/時間值:

  • DATE - 格式:YYYY-MM-DD
  • DATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式:唯一的數字

19.NULL

NULL 值代表遺漏的未知資料。

預設地,表的列可以存放 NULL 值。

IS NULL 和 IS NOT NULL 操作符才可以匹配NULL值

NULL函式:

SQL Server / MS Access

ISNULL() 如果列值是NULL則返回0,這樣的NULL參與計算不會造成資料錯誤

20.SQL Server資料型別

21.聚合函式和分級函式

SQL Aggregate 函式

  • AVG() - 返回平均值
  • COUNT() - 返回行數
  • FIRST() - 返回第一個記錄的值
  • LAST() - 返回最後一個記錄的值
  • MAX() - 返回最大值
  • MIN() - 返回最小值
  • SUM() - 返回總和

SQL Scalar 函式

  • UCASE() - 將某個欄位轉換為大寫
  • LCASE() - 將某個欄位轉換為小寫
  • MID() - 從某個文字欄位提取字元
  • LEN() - 返回某個文字欄位的長度
  • ROUND() - 對某個數值欄位進行指定小數位數的四捨五入
  • NOW() - 返回當前的系統日期和時間
  • FORMAT() - 格式化某個欄位的顯示方式

22.分組和結果篩選

  • GROUP BY 語句用於結合 Aggregate 函式,根據一個或多個列對結果集進行分組。
  • 在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與 Aggregate 函式一起使用。