SQL

SQL 分為兩個部分:數(shù)據(jù)操作語言 (DML) 和 數(shù)據(jù)定義語言 (DDL)

查詢和更新指令構(gòu)成了 SQL 的 DML 部分:
SELECT - 從數(shù)據(jù)庫表中獲取數(shù)據(jù)
UPDATE - 更新數(shù)據(jù)庫表中的數(shù)據(jù)
DELETE - 從數(shù)據(jù)庫表中刪除數(shù)據(jù)
INSERT INTO - 向數(shù)據(jù)庫表中插入數(shù)據(jù)

SQL 中最重要的 DDL 語句:
CREATE DATABASE - 創(chuàng)建新數(shù)據(jù)庫
ALTER DATABASE - 修改數(shù)據(jù)庫
CREATE TABLE - 創(chuàng)建新表
ALTER TABLE - 變更(改變)數(shù)據(jù)庫表
DROP TABLE - 刪除表
CREATE INDEX - 創(chuàng)建索引(搜索鍵)
DROP INDEX - 刪除索引

SQL基本語句

1启盛、SELECT
SELECT 列名稱或者* FROM 表名稱
SELECT DISTINCT 列名稱 FROM 表名稱 返回唯一不同的值
SELECT LastName,FirstName FROM Persons

2、WHERE 篩選條件
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值
SELECT * FROM Persons WHERE City='Beijing'
文本條件值周圍用單引號!

3扮休、AND/OR
SELECT * FROM Persons WHERE FirstName='Thomas' AND/OR LastName='Carter'
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'

4、ORDER BY 排序
SELECT Company, OrderNumber FROM Orders ORDER BY Company 以字母順序顯示公司名稱
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC 以逆字母順序顯示公司名稱按脚,并以數(shù)字順序顯示順序號

5、INSERT INTO 插入值
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees') 在指定的列中插入數(shù)據(jù)

6连舍、UPDATE 更新修改數(shù)據(jù)
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson' 為 lastname 是 "Wilson" 的人修改地址授段,添加城市

7畜埋、DELETE
DELETE FROM Person WHERE LastName = 'Wilson'
DELETE * FROM table_name

SQL高級功能

1、TOP 限定前幾個
SELECT column_name(s) FROM table_name LIMIT number
SELECT * FROM Persons LIMIT 5
SELECT TOP 2 * FROM Persons
SELECT TOP 50 PERCENT * FROM Persons

2畴蒲、LIKE
SELECT * FROM Persons WHERE City LIKE 'N%'
希望從上面的 "Persons" 表中選取居住在以 "N" 開始的城市里的人
注意:"%" 可用于定義通配符(模式中缺少的字母)
SELECT * FROM Persons WHERE City LIKE '%g' 以 "g" 結(jié)尾的城市
SELECT * FROM Persons WHERE City NOT LIKE '%lon%' 不包含 "lon" 的城市

3悠鞍、通配符介紹
SQL 通配符必須與 LIKE 運算符一起使用!
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er' 姓氏以 "C" 開頭模燥,然后是一個任意字符咖祭,然后是 "r",然后是任意字符蔫骂,然后是 "er"
SELECT * FROM Persons WHERE City LIKE '[ALN]%' 城市以 "A" 或 "L" 或 "N" 開頭

通配符

4么翰、IN / BETWEEN 選取多個值
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter') 選取姓氏為 Adams 和 Carter
SELECT * FROM Persons WHERE LastName (NOT)BETWEEN 'Adams' AND 'Carter' 字母順序顯示介于 "Adams"(包括)和 "Carter"(不包括)

5、AS 別名
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
兩個表分別是:"Persons" 和 "Product_Orders"辽旋。我們分別為它們指定別名 "p" 和 "po"

6浩嫌、各種JOIN
JOIN = INNER JOIN、LEFT JOIN补胚、RIGHT JOIN码耐、FULL JOIN
INNER JOIN: 如果表中有至少一個匹配,則返回行
LEFT JOIN: 即使右表中沒有匹配溶其,也從左表返回所有的行
RIGHT JOIN: 即使左表中沒有匹配骚腥,也從右表返回所有的行
FULL JOIN: 只要其中一個表中存在匹配,就返回行

INNER JOIN 關(guān)鍵字在表中存在至少一個匹配時返回行瓶逃。如果 "Persons" 中的行在 "Orders" 中沒有匹配束铭,就不會列出這些行。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

LEFT JOIN 關(guān)鍵字會從左表 (table_name1) 那里返回所有的行厢绝,即使在右表 (table_name2) 中沒有匹配的行契沫。
RIGHT JOIN 關(guān)鍵字會從右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中沒有匹配的行昔汉。
FULL JOIN 關(guān)鍵字會從左表 (Persons) 和右表 (Orders) 那里返回所有的行懈万。如果 "Persons" 中的行在表 "Orders" 中沒有匹配,或者如果 "Orders" 中的行在表 "Persons" 中沒有匹配挤庇,這些行同樣會列出钞速。

兩張表格

FULL OUTER JOIN

7、UNION / UNION ALL 合并兩個結(jié)果集
默認地嫡秕,UNION 操作符選取不同的值渴语。如果允許重復(fù)的值,請使用 UNION ALL
SELECT E_Name FROM Employees_China
UNION (ALL)
SELECT E_Name FROM Employees_USA

8昆咽、SELECT INTO 創(chuàng)建表的備份復(fù)件
SELECT LastName,FirstName INTO Persons_backup FROM Persons
SELECT * INTO Persons IN 'Backup.mdb' FROM Persons 向另一個數(shù)據(jù)庫中拷貝
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P 創(chuàng)建一個名為 "Persons_Order_Backup" 的新表驾凶,其中包含了從 Persons 和 Orders 兩個表中取得的信息

9牙甫、CREATE DATABASE / TABLE
CREATE DATABASE my_db
CREATE TABLE Persons 創(chuàng)建數(shù)據(jù)庫中的表
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
) Id_P 列是 int,包含整數(shù)调违。其余 4 列的數(shù)據(jù)類型是 varchar窟哺,最大長度為 255 個字符

表格數(shù)據(jù)類型

10、約束: 限制加入表的數(shù)據(jù)的類型
寫在創(chuàng)建表的數(shù)據(jù)類型之后技肩。primary key中暗含unique約束且轨。一個表格只能有一個primary key約束,但可以有多個unique約束虚婿。
SQL Server格式:列名稱 數(shù)據(jù)類型 約束旋奢;MySQL會單列一行命令
NOT NULL 約束強制字段始終包含值。這意味著然痊,如果不向字段添加值至朗,就無法插入新記錄或者更新記錄
CREATE TABLE Persons
(
Id_P int NOT NULL, UNIQUE 這是SQL Server的寫法
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P) 這是MySQL的寫法
)
如果是當表已被創(chuàng)建時,如需在 "Id_P" 列創(chuàng)建 UNIQUE 約束:
ALTER TABLE Persons ADD UNIQUE (Id_P)
ALTER TABLE Persons DROP INDEX uc_PersonID (撤銷)

11剧浸、PRIMARY / FOREIGN KEY
PRIMARY KEY 約束唯一標識數(shù)據(jù)庫表中的每條記錄锹引。每個表都應(yīng)該有一個主鍵,并且每個表只能有一個主鍵唆香。
MySQL 與Server的用法同UNIQUE嫌变,同理ADD和DROP:
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) 這是MySQL的用法
)
一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。
例子:"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列袋马。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY初澎。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY秸应。
這是MySQL用法虑凛,在 "Orders" 表創(chuàng)建時為 "Id_P" 列創(chuàng)建 FOREIGN KEY:
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)

12、CHECK約束
CHECK (Id_P>0) CHECK 約束規(guī)定 "Id_P" 列必須只包含大于 0 的整數(shù)
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)

13软啼、DEFAULT 插入默認值
City varchar(255) DEFAULT 'Sandnes'
OrderDate date DEFAULT GETDATE() 通過使用類似 GETDATE() 這樣的函數(shù)桑谍,DEFAULT 約束也可以用于插入系統(tǒng)值

14、CREATE INDEX 創(chuàng)建索引
CREATE UNIQUE INDEX PersonIndex ON Person (LastName DESC)
創(chuàng)建一個唯一索引祸挪,名為 "PersonIndex"锣披,在 Person 表的 LastName 列,并降序索引
CREATE INDEX PersonIndex ON Person (LastName, FirstName)
刪除索引(MySQL的用法):ALTER TABLE table_name DROP INDEX index_name

15贿条、DROP 與 ALTER
DROP TABLE 表名稱 / DATABASE db
ALTER TABLE Persons ADD Birthday date 添加新列Birthday
ALTER TABLE Persons ALTER COLUMN Birthday year 修改Birthday 類型
ALTER TABLE Person DROP COLUMN Birthday

16雹仿、VIEW 可視化
視圖 "Current Product List" 會從 Products 表列出所有正在使用的產(chǎn)品:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
SELECT * FROM [Current Product List] 查詢命令:可以查詢上面這個視圖
計算在 1997 年每個種類的銷售總數(shù)。請注意整以,這個視圖會從另一個名為 "Product Sales for 1997" 的視圖那里選取數(shù)據(jù):
CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName

17胧辽、Isnull() 和 Ifnull()
由于Null本身和0不等價,所以公黑,我們需要處理null值邑商,比如設(shè)置其等于0摄咆。
SQL Server的用法:
SELECT ProductName,UnitPrice(UnitsInStock+ISNULL(UnitsOnOrder,0)) FROM Products
MySQL的用法:
SELECT ProductName,UnitPrice
(UnitsInStock+IFNULL(UnitsOnOrder,0)) FROM Products

18、RDBMS 關(guān)系數(shù)據(jù)庫管理系統(tǒng)
RDBMS是SQL的基礎(chǔ)人断!
首先吭从,數(shù)據(jù)庫管理系統(tǒng)是一種可以訪問數(shù)據(jù)庫中數(shù)據(jù)的計算機程序。DBMS 使我們有能力在數(shù)據(jù)庫中提取恶迈、修改或者存貯信息涩金。不同的 DBMS 提供不同的函數(shù)供查詢、提交以及修改數(shù)據(jù)暇仲。關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDBMS) 也是一種數(shù)據(jù)庫管理系統(tǒng)鸭廷,其數(shù)據(jù)庫是根據(jù)數(shù)據(jù)間的關(guān)系來組織和訪問數(shù)據(jù)的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熔吗,一起剝皮案震驚了整個濱河市辆床,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桅狠,老刑警劉巖讼载,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異中跌,居然都是意外死亡咨堤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門漩符,熙熙樓的掌柜王于貴愁眉苦臉地迎上來一喘,“玉大人,你說我怎么就攤上這事嗜暴⊥箍耍” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵闷沥,是天一觀的道長萎战。 經(jīng)常有香客問我,道長舆逃,這世上最難降的妖魔是什么蚂维? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮路狮,結(jié)果婚禮上虫啥,老公的妹妹穿的比我還像新娘。我一直安慰自己奄妨,他們只是感情好涂籽,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著展蒂,像睡著了一般又活。 火紅的嫁衣襯著肌膚如雪苔咪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天柳骄,我揣著相機與錄音团赏,去河邊找鬼。 笑死耐薯,一個胖子當著我的面吹牛舔清,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曲初,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼体谒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了臼婆?” 一聲冷哼從身側(cè)響起抒痒,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颁褂,沒想到半個月后故响,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡颁独,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年彩届,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誓酒。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡樟蠕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出靠柑,到底是詐尸還是另有隱情寨辩,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布病往,位于F島的核電站捣染,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏停巷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一榕栏、第九天 我趴在偏房一處隱蔽的房頂上張望畔勤。 院中可真熱鬧,春花似錦扒磁、人聲如沸庆揪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缸榛。三九已至吝羞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間内颗,已是汗流浹背钧排。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留均澳,地道東北人恨溜。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像找前,于是被迫代替她去往敵國和親糟袁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容