SQL(Structured Query Language)結構化查詢語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統。 數據庫
SQL 能夠作什麼 測試
SQL語言包括三個部分:數據定義語言(DDL),數據操做語言(DML)及數據控制語言(DCL).net
語法:SELECT 列名 FROM 表名 (SQL 語句對大小寫並不敏感)
例子:設計
獲取 「LastName」 和 「FirstName」 列內容,SELECT LastName,FirstName FROM Persons對象
語法 SELECT DISTINCT 列名 FROM 表名
例排序
需從 Company「 列中僅選取惟一不一樣的值,SELECT DISTINCT Company FROM Orders
結果:索引
語法:SELECT 列名 FROM 表名 WHERE 列 運算符 值
可在子句中使用的運算符: = <> > < >= <= BETWEEN LIKE
例子ip
但願選取 居住在「Beijing」 的人,SELECT * FROM Persons WHERE City='Beijing' ci
AND & OR 運算符(在WHERE 子句中把兩個或多個條件結合起來)get
使用AND 來顯示全部姓爲 「Carter」 而且名爲「Thomas」 或者「William」的人:
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName ='William') AND LastName='Carter'
以逆字母順序顯示公司名稱,並以數字順序顯示順序號:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
INSERT INTO語句(向表中插入新行)
語法: INSERT INTO 表名VALUES (值1, 值2,....)
例 1 插入新的行
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
例 2 指定的列中插入數據
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
語法:UPDATE 表名 SET 列名 = 新值 WHERE 列名 = 某值
例1:更新某一行中的一個列
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
例2:更新某一行中的若干列
修改地址(address),並添加城市(city)
UPDATE Person SET Address = ‘Zhongshan 23’, City = ‘Nanjing’ WHERE LastName = 'Wilson'
語法:DELETE FROM 表名WHERE 列名= 值
刪除某行
DELETE FROM Person WHERE LastName = 'Wilson'
刪除全部行
DELETE FROM table_name
DELETE * FROM table_name
SQL Server語法:
SELECT TOP number|percent column_name(s) FROM tabel_name
例1 從表中選取頭2條記錄 SELECT TOP 2 * FROM Persons
例2 從表中選取50%的記錄 SELECT TOP 50 PERCENT * FROM Persons
MySQL語法:
SELECT column_name(s) FROM table_name LIMIT number
例 SELECT * FROM Persons LIMIT 5
Oracle語法:
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
例 SELECT * FROM Persons WHERE ROWNUM <=5
語法 SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
例 選取Persons表中居住在以N開始的城市裏的人
SELECT * FROM Persons WHERE City LIKE 'N%'
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
Persons」 表中選取居住在城市不以「A」 或「L」 或「N」 開頭的人:
SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%'
語法:SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
例子:選取姓氏爲Adams 和Carter 的人
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
語法:SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
注意:不一樣的數據庫對BETWEEN...AND 操做符的處理方式是有差別,主要體如今邊界。
誰訂購了產品,而且他們訂購了什麼產品?
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName
注意:INNER JOIN 關鍵字在表中至少存在一個匹配時返回行。若是"Persons" 中的行在"Orders" 中沒有匹配,就不會列出這些
在表中至少存在一個匹配時,INNER JOIN 關鍵字返回行
例 前面兩張表格中中,列出全部人的定購
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:INNER JOIN 關鍵字在表中至少存在一個匹配時返回行。若是"Persons" 中的行在"Orders" 中沒有匹配,就不會列出這些
從左表返回全部的行,即便右表中沒有匹配的行。
例 前面兩張表格中中,列出全部人的定購
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:左表的記錄將會所有表示出來,而右表只會顯示符合搜索條件的記錄。右表記錄不足的地方均爲NULL。
會從右表(table_name2) 那裏返回全部的行,即便在左表(table_name1) 中沒有匹配的行 。
例 前面兩張表格中中,列出全部人的定購
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:右表的記錄將會所有表示出來,而左表只會顯示符合搜索條件的記錄。左表記錄不足的地方均爲NULL。
只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回。
例 前面兩張表格中中,列出全部人的定購
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:FULL JOIN 關鍵字會從左表(Persons) 和右表(Orders) 那裏返回全部的行。若是"Persons" 表中的行在表"Orders" 中沒有匹配,或者"Orders" 表中的行在表"Persons" 中沒有匹配,這些行一樣會列出。
「Orders」 表已存在的狀況下爲「Id_P」 列建立FOREIGN KEY 約束
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
撤銷 FOREIGN KEY 約束
以MySQL 爲例
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders
注:UNION 內部的SELECT 語句必須擁有相同數量的列。列也必須擁有類似的數據類型。同時,每條SELECT 語句中列的順序必須相同。
UNION 語法:SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
UNION 操做符默認選取不一樣的值。若是容許重複值,請使用UNION ALL
語法:CREATE DATABASE database_name
語法:CRATE TABLE 表名
(
列名1 數據類型,
列名2 數據類型,
列名3 數據類型,
....
)
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
能夠在建立表時規定約束(經過 CREATE TABLE 語句),或者在表建立以後也能夠(經過 ALTER TABLE 語句)。
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
主鍵必須包含惟一的值
主鍵列不能包含NULL 值
每一個表都應該有一個主鍵,而且每一個表只能有一個主鍵
以MySql爲例
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID PRIMARY KEY (Id_P,LastName)
)
若是在表已存在的狀況下爲「Id_P」 列建立PRIMARY KEY 約束
ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
注:若是使用ALTER TABLE 語句添加主鍵,必須把主鍵列聲明爲不包含NULL 值(在表首次建立時
撤銷 PRIMARY KEY 約束
MySql語法 ALTER TABLE Persons DROP PRIMARY KEY
SQL Server / Oracle / MS Access語法:
ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
一個表中的FOREIGN KEY 指向另外一個表中的PRIMARY KEY,FOREIGN KEY 約束能防止非法數據插入外鍵列,由於它必須是它指向的那個表中的值之一
以MySql爲例:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (O_Id),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
「Orders」 表已存在的狀況下爲「Id_P」 列建立FOREIGN KEY 約束
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
撤銷 FOREIGN KEY 約束
以MySQL 爲例
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders
下面的 SQL 在"Persons" 表建立時爲"Id_P" 列建立CHECK 約束。CHECK 約束規定"Id_P" 列必須只包含大於0 的整數。
以MySql爲例
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
表已存在的狀況下爲"Id_P" 列建立CHECK 約束
ALTER TABLE Persons
ADD CHECK (Id_P>0)
撤銷 CHECK 約束
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
在表已存在的狀況下爲「City」 列建立DEFAULT 約束
以MySql爲例
ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'
撤銷 DEFAULT 約束
以MySql爲例
ALTER TABLE Persons ALTER City DROP DEFAULT
在表上建立一個簡單的索引。容許使用重複的
CREATE INDEX index_name ON table_name (column_name)
在表上建立一個惟一的索引。惟一的索引意味着兩個行不能擁有相同的索引值
CREATE UNIQUE INDEX index_name ON table_name (column_name)
例降序索引某個列中的值
CREATE INDEX PersonIndex ON Person (LastName DESC)
例索引不止一個列
CREATE INDEX PersonIndex ON Person (LastName, FirstName)
以MySQL爲例,撤銷索引語法
ALTER TABLE table_name DROP INDEX index_name
DROP TABLE用於刪除表(表的結構、屬性以及索引也會被刪除)
DROP TABLE 表名
DROP DATABASE用於刪除數據
DROP DATABASE 數據庫名
TRUNCATE TABLE 命令(僅僅刪除表格中的數據):
TRUNCATE TABLE 表名
ALTER TABLE(在已有的表中添加、修改或刪除列DROP)
需在表中添加列,可以使用下列語法
ALTER TABLE table_name ADD column_name datatype
刪除表中的列,可以使用下列語法
ALTER TABLE table_name DROP COLUMN column_name
表中某個列是可選的,那麼咱們能夠在不向該列添加值的狀況下插入新記錄或更新已有記錄。這意味着該字段將以NULL 值保存沒法比較NULL 和0;它們是不等價的沒法使用比較運算符來測試 NULL 值,好比=, <, 或者<>。必須使用 IS NULL 和IS NOT NULL 操做符例SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NOT NULL