SQL語法
例表:“Persons”表
LastName |
FirstName |
Address |
City |
Year |
Adams |
John |
Oxford Street |
London |
1970 |
Bush |
George |
Fifth Avenue |
New York |
1995 |
Carter |
Thomas |
Changan Street |
Beijing |
1980 |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
1985 |
一:基礎篇
關鍵字 |
描述 |
例子 |
SELECT |
SELECT 語句用於從表中選取數據。結果被存儲在一個結果表中(稱爲結果集)。 |
1.SELECT 列名 FROM 表名 2.SELECT * FROM 表名
|
DISTINCT |
DISTINCT 用於返回唯一不同的值。 |
1.SELECT DISTINCT 列名 FROM 表名 |
WHERE |
如需有條件地從表中選取數據 |
1.SELECT 列名 FROM 表名 WHERE 列 運算符 2.查詢 住在Beijing的人 SELECT * FROM Persons WHERE City=’ Beijing’ |
AND和OR |
用在AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結合起來。 AND:都爲真才爲真 OR:其中一個爲真才爲真 |
1.查詢 1985年住在Beijing的人 SELECT * FROM Persons WHERE City=’ Beijing’ AND Year = 1985 2.查詢住在London或者New York的人 SELECT * FROM Persons WHERE City=’ London’ OR City = ‘New York’
|
ORDER BY |
ORDER BY 語句用於根據指定的列對結果集進行排序。 |
1.以姓的字母順序進行排列 SELECT*FROM Persons ORDER BY LastName 2.以Year 從大到小排序 SELECT*FROM Persons ORDER BY Year DESC 3.以Year 從小到大排序 SELECT*FROM Persons ORDER BY Year |
INSERT INTO |
INSERT INTO 語句用於向表格中插入新的行。 |
1.將2017年有個姓Yuan 名Hong的住在ChongQing JieFangBei 記錄在數據庫 INSERT INTO Persons VALUES(‘Yuan’,’ Hong’,’ JieFangBei’,’ ChongQing’,2017) |
Update |
Update 語句用於修改表中的數據。 |
1.2017年YuanHong搬家到GuanYinQiao 修改數據 Update Persons SET Adderss=’ GuanYinQiao’ WHERE LastName=’ Yuan’ AND FirstName=’ Hong’ |
DELETE |
DELETE 語句用於刪除表中的行 |
1.將YuanHong對應的數據刪除掉。 DELETE FROM Persons WHERE |
"Persons" 表:
Id_P |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
"Orders" 表:
Id_O |
OrderNo |
Id_P |
1 |
77895 |
3 |
2 |
44678 |
3 |
3 |
22456 |
1 |
4 |
24562 |
1 |
5 |
34764 |
65 |
二:高級教程
TOP |
TOP 子句用於規定要返回的記錄的數目。 |
1.我們希望從表中取前兩條數據。 SELECT TOP(2) * FROM Persons 我們希望從表中取百分之五十的記錄 SELECT TOP 50 PERCENT * FROM Persons |
LIKE |
LIKE 操作符用於在 WHERE 子句中搜索列中的指定模式。 |
1.我們希望查找姓的首字母爲Y的人 SELECT * FROM Persons WHERE LastName LIKE ‘Y%’ 2.我們希望查找姓的尾字母爲N的人 SELECT * FROM Persons WHERE LastName LIKE ‘%N’ 3.我們希望查找姓中含有A的人 SELECT * FROM Persons WHERE LastName LIKE ‘%A%’ |
通配符 |
1.%: 替代一個或多個字符 2_:僅替代一個字符3[charlist]:字符列中的任何單一字符 4[!charlist]:不在字符列中的任何單一字符 |
1.我們希望查找姓的首字母爲Y的人 SELECT * FROM Persons WHERE LastName LIKE ‘Y%’ 2.我們希望查找姓的尾字母爲N的人 SELECT * FROM Persons WHERE LastName LIKE ‘%N’ 3.我們希望查找姓中含有A的人 SELECT * FROM Persons WHERE LastName LIKE ‘%A%’ 4.我們希望選取一個人的姓的第一個字符之後是UAN的人 SELECT * FROM Persons WHERE LastName LIKE ‘_UAN’ 5.我們希望選取居住城市 以‘A’或‘C’開頭的人 SELECT * FROM Persons WHERE City LIKE ‘[AC]%’ 6.我們希望選取居住城市 不以‘A’或‘C’開頭的人 SELECT * FROM Persons WHERE City LIKE ‘[!AC]%’
|
IN |
IN 操作符允許我們在 WHERE 子句中規定多個值。 |
1.我們希望選取姓氏爲Adams 和 Carter 的人 SELECT * FROM Persons WHERE LastName IN(‘Adams’,’ Carter’) |
BETWEEN |
操作符 BETWEEN ... AND 會選取介於兩個值之間的數據範圍。這些值可以是數值、文本或者日期。 |
1.選取以字母順序介於"Adams"(包括)和 "Carter"(不包括)之間的人 SELECT * FROM Persons WHERE LastName BETWEEN ‘Adams’ AND ‘Carter’ |
Alias |
Alias 可以爲列名稱或者表名稱指定別名 |
1.我們的表名是 Persons 我們可以把它取個別名(聯表查詢的時候常用) SELECT*FROM Persons AS P WHERE P.LastName BETWEEN ‘Adams’ AND ‘Carter’ |
INNER join |
有時爲了得到完整的結果,我們需要從兩個或更多的表中獲取結果。我們就需要執行 join.通過join多張表的數據 |
1.現在有兩張表 Persons和Orders它們之間通過UserID進行關聯的 我們要將兩張表一起取出來 SELECT * FROM PersonsAS A INNER JOIN Persons AS B ON A.ID_P =B. ID_P ORDER BY A. LastName |
LEFT JOIN |
LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。 |
1.現在有兩張表 Persons和Orders它們之間通過UserID進行關聯的 我們要將兩張表一起取出來 SELECT * FROM Persons AS A LEFT JOIN OrdersAS B ON A. ID_P =B. ID_P ORDER BY A. LastName |
RIGHT JOIN |
RIGHT JOIN 關鍵字會右表 (table_name2) 那裏返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。 |
1.現在有兩張表 Persons和Orders它們之間通過UserID進行關聯的 我們要將兩張表一起取出來 SELECT * FROM Persons AS A RIGHT JOIN OrdersAS B ON A. ID_P =B. ID_P ORDER BY A. LastName |
FULL JOIN |
只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行。 |
1.現在有兩張表 Persons 和Orders它們之間通過UserID進行關聯的 我們要將兩張表一起取出來 SELECT * FROM Persons AS A FULL JOIN OrdersAS B ON A. ID_P =B. ID_P ORDER BY A. LastName |
UNION |
UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。 |
1.現在我們數據庫有兩張表class1和class2分別是某年級的兩個班的學生信息,假設該年級一共就這兩個班,我們要獲取該年級所有人的信息 SELECT Student FROM CLASS1 UNION SELECT Student FROM CLASS2 |
SELECT INTO |
SELECT INTO 語句從一個表中選取數據,然後把數據插入另一個表中。 |
1拷貝備份復件 SELECT * INTO PersonsBackup FROM Persons 2.向另一個數據庫中拷貝表 SELECT * INTO Persons IN ‘Backup.mdb’ FROM Persons 3.我們希望只拷貝某些域 LastName Adams’ SELECT LastName, Adams INTO Persons INTO PersonsBackup FROM Persons 4.我們在Persons表中提取居住在北京的人的信息,並創建一個帶兩個列的名是PersonsBackup的表 SELECT LastName, Firstname INTO Persons INTO PersonsBackup FROM Persons WHERE City=’BeiJing’ 5.其中包含了從 Persons 和 Orders 兩個表中取得的信息 SELECT A.lastName,B.OrderNo INTO PersonsBackup FROM Persons AS A INNER JOIN Orders AS B ON A.ID_P=B.ID_P |
CREATE DATABASE |
CREATE DATABASE 用於創建數據庫。 |
Create database 數據庫名 |
CREATE TABLE |
CREATE TABLE 語句用於創建數據庫中的表。 |
1.創建表 例表Orders Create table Orders( Id_O INT, OrderNo INT, ID_P INT) |
SQL 約束 |
NOT NULL 約束強制列不接受 NULL 值。 UNIQUE約束唯一標識數據庫表中的每條記錄。 PRIMARY KEY RIMARY KEY 約束唯一標識數據庫表中的每條記錄。 FOREIGN KEY一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。 CHECK約束用於限制列中的值的範圍。 DEFAULTDEFAULT 約束用於向列中插入默認值。 |
1.創建表 例表Orders Id_O不能爲空 Create table Orders( Id_O INT NOT NUL , OrderNo INT, ID_P INT) 2.創建表 例表Orders Id_O不能爲空 標記Id_P是在本表中只能存在唯一值 Create table Orders( ID_O INT NOT NUL , OrderNo INT, Id_P INT , UNIQUE(ID_P)) 3.創建表 例表Orders Id_O不能爲空 標記Id_P和 Id_O Create table Orders( Id_O INT NOT NUL , OrderNo INT, Id_P INT , CONSTRAINT uc_PERSONID UNIQUE(Id_P, Id_O)) 4.創建表 例表"Orders" 表創建時在 "Id_O" 列創建 PRIMARY KEY 約束: Create table Orders( Id_O INT NOT NUL PRIMARY KEY, OrderNo INT, Id_P INT ,) 5.創建表 例表"Orders" 表創建時在 "Id_P" 列創建 FOREIGN KEY約束: Create table Orders( Id_O INT NOT NUL PRIMARY KEY, OrderNo INT, Id_P INT FOREIGN KEY REFERENCES PERSONS(Id_P)) 6..創建表 例表"Orders" 表創建時在 "Id_P" 列創建CHECK約束Id_P>0: Create table Orders( Id_O INT NOT NUL PRIMARY KEY, OrderNo INT, Id_P INT , CHECK (Id_P>0) 7創建表 例表"Orders" 表創建時在 "Id_P" 列創建DEFAULT 約束插入默認值0 Create table Orders( Id_O INT NOT NUL PRIMARY KEY, OrderNo INT, Id_P INT DEFAULT 0, )
|
CREATE INDEX |
CREATE INDEX您可以在表中創建索引,以便更加快速高效地查詢數據。 |
1.我們希望以Id_o從大到小排列 CREATE INDEX Id_o ON Orders(OrderNo, Id_P) |
DROP |
DROP可以輕鬆刪除索引、表、數據庫 |
1.刪除表 DEOP TABLE 表名 2.刪除數據庫 DEOP DATABASE 數據庫名 |
ALTER TABLE |
ALTER TABLE語句用於在已有的表中添加、修改或刪除列。 |
1.在表Orders中添加列Birthday ALTER TABLE Orders ADD Birthday DATE 2.刪除表Orders中列Birthday ALTER TABLE Orders DEOP COLUMN Birthday 3.修改表Orders 中列Birthday的數據類型 ALTER TABLE Orders ALTER COLUMN Birthday INT
|
auto-increment主鍵 |
我們通常希望在每次插入新記錄時,自動地創建主鍵字段的值,我們可以在表中創建一個 auto-increment 字段。 |
1.創建一個表 Orders 使Id_P 起始值爲1每增加一條: CREATE TABLE Orders { Id_O INT NOT PRIMARY KEY IDENTITY(1,1), OrderNo INT, Id_P INT, } |
VIEW |
在 SQL 中,VIEW是基於 SQL 語句的結果集的可視化的表。 |
1.創建視圖: CREATE VIEW [Current Product List] AS SELECT OrderNo, Id_P FRPM WHERE Discontinued=No 2.查詢視圖: SELECT * FROM [Current Product List] |
2017年9月27日 IT小狼狗 |