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 函數一起使用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章