SQL
什么是SQL
RDBMS 指的是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。RDBMS 是 SQL 的基礎(chǔ)辆它。RDBMS 中的數(shù)據(jù)存儲在被稱為表(tables)的數(shù)據(jù)庫對象中。表是相關(guān)的數(shù)據(jù)項的集合挂疆,它由列和行組成旷痕。
- SQL 指結(jié)構(gòu)化查詢語言
- SQL 使我們有能力訪問數(shù)據(jù)庫
- SQL 是一種 ANSI 的標準計算機語言
一定要記住避消,SQL 對大小寫不敏感低滩!
SQL功能
- SQL 面向數(shù)據(jù)庫執(zhí)行查詢
- SQL 可從數(shù)據(jù)庫取回數(shù)據(jù)
- SQL 可在數(shù)據(jù)庫中插入新的記錄
- SQL 可更新數(shù)據(jù)庫中的數(shù)據(jù)
- SQL 可從數(shù)據(jù)庫刪除記錄
- SQL 可創(chuàng)建新數(shù)據(jù)庫
- SQL 可在數(shù)據(jù)庫中創(chuàng)建新表
- SQL 可在數(shù)據(jù)庫中創(chuàng)建存儲過程
- SQL 可在數(shù)據(jù)庫中創(chuàng)建視圖
- SQL 可以設(shè)置表、存儲過程和視圖的權(quán)限
SQL語法
SELECT語句
SELECT 語句用于從表中選取數(shù)據(jù)岩喷。結(jié)果被存儲在一個結(jié)果表中(稱為結(jié)果集)恕沫。
語法
SELECT column_name(s) FROM table_name
以及
SELECT * FROM table_name
我們看到列名(column_name)參數(shù)可以是多個列,使用SELECT語句返回的結(jié)果集只包含語句中輸入的相應(yīng)列名稱的列纱意。星號(*)是選取所有列的快捷方式婶溯。
WHERE 子句
WHERE 子句用于規(guī)定選擇的標準。如需有條件地從表中選取數(shù)據(jù),可將 WHERE 子句添加到 SELECT 語句爬虱。
語法
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值
運算符
操作符 | 描述 |
---|---|
= | 等于 |
<>(!=) | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某個范圍內(nèi) |
LIKE | 搜索某種模式 |
SQL 使用單引號來環(huán)繞文本值隶债,數(shù)值,請不要使用引號跑筝。
示例
SELECT * FROM Persons WHERE City='Beijing'
AND 和 OR 運算符
用于基于一個以上的條件對記錄進行過濾死讹。可在 WHERE 子語句中把兩個或多個條件結(jié)合起來曲梗。
- 如果第一個條件和第二個條件都成立赞警,則 AND 運算符顯示一條記錄。
- 如果第一個條件和第二個條件中只要有一個成立虏两,則 OR 運算符顯示一條記錄愧旦。
示例
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
我們也可以把 AND 和 OR 結(jié)合起來(使用圓括號來組成復(fù)雜的表達式):
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
INSERT INTO 語句
INSERT INTO 語句用于向表格中插入新的行。
語法
INSERT INTO 表名稱 VALUES (值1, 值2,....)
或者
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
當我們使用第二種方法時定罢,在表中插入新的一行笤虫,并且在該行中為指定的列寫入指定的值。沒有指定的列就沒有值祖凫。
Update 語句
Update 語句用于修改表中的數(shù)據(jù)琼蚯。
語法
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
使用更新語句時,我們可以在指定列名稱=新值這個參數(shù)時惠况,同時給定兩個或者多個(前提是同一行的)遭庶。也就是說更新語句可以同時更新同一行內(nèi)的多個列的值。
示例
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'
DELETE 語句
DELETE 語句用于刪除表中的行稠屠。
語法
DELETE FROM 表名稱 WHERE 列名稱 = 值
或者峦睡,刪除所有行∪ú海可以在不刪除表的情況下刪除所有的行榨了。這意味著表的結(jié)構(gòu)、屬性和索引都是完整的:
DELETE FROM table_name
//DELETE * FROM table_name
SQL LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式弊知。
語法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
運用
一般LIKE操作符都是配合SQL通配符一起來操作的
SELECT * FROM Persons
WHERE City LIKE 'N%'
表示我們要在表中搜索City列的值以N開頭的所有行
關(guān)鍵詞NOT
通過NOT關(guān)鍵詞阻逮,我們可以搜索指定范圍以外的數(shù)據(jù)。
SELECT * FROM Persons
WHERE City NOT LIKE '%lon%'
表示搜索Persons表中City列的值不含lon的所有行
SQL 通配符
在搜索數(shù)據(jù)庫中的數(shù)據(jù)時秩彤,SQL 通配符可以替代一個或多個字符。SQL 通配符必須與 LIKE 運算符一起使用事哭。
通配符 | 描述 |
---|---|
% | 替代一個或者多個字符 |
_ | 僅替代一個字符 |
[charlist] | 字符列中的任何單一字符 |
[^charlist]或者[!charlist] | 不在字符列中的任何單一字符 |
IN 操作符
IN 操作符允許我們在 WHERE 子句中規(guī)定多個值漫雷。
語法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
示例
SELECT * FROM Persons
WHERE LastName IN ('Adams','Carter')
SQL BETWEEN 操作符
BETWEEN 操作符在 WHERE 子句中使用,作用是選取介于兩個值之間的數(shù)據(jù)范圍鳍咱。操作符BETWEEN ... AND 會選取介于兩個值之間的數(shù)據(jù)范圍降盹。這些值可以是數(shù)值、文本或者日期谤辜。
語法
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
示例
SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'
表示需以字母順序顯示介于 "Adams"(包括)和 "Carter"(不包括)之間的人蓄坏。
不同的數(shù)據(jù)庫對 BETWEEN...AND 操作符的處理方式是有差異的价捧。某些數(shù)據(jù)庫會列出介于 "Adams" 和 "Carter" 之間的人,但不包括 "Adams" 和 "Carter" 涡戳;某些數(shù)據(jù)庫會列出介于 "Adams" 和 "Carter" 之間并包括 "Adams" 和 "Carter" 的人结蟋;而另一些數(shù)據(jù)庫會列出介于 "Adams" 和 "Carter" 之間的人,包括 "Adams" 渔彰,但不包括 "Carter" 嵌屎。
關(guān)鍵詞NOT
SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Adams' AND 'Carter'
使用 NOT 操作符,顯示范圍之外的人恍涂。(范圍指定不包括Carter時宝惰,Carter會在顯示范圍內(nèi))
SQL CREATE DATABASE 語句
CREATE DATABASE 語句用于創(chuàng)建數(shù)據(jù)庫。
語法
CREATE DATABASE database_name
SQL CREATE TABLE 語句
CREATE TABLE 語句用于創(chuàng)建數(shù)據(jù)庫中的表再沧。
語法
CREATE TABLE 表名稱
(
列名稱1 數(shù)據(jù)類型,
列名稱2 數(shù)據(jù)類型,
列名稱3 數(shù)據(jù)類型,
....
)
數(shù)據(jù)類型
數(shù)據(jù)類型 | 描述 |
---|---|
integer(size)尼夺、int(size)、smallint(size)炒瘸、tinyint(size) | 僅容納整數(shù)汞斧。在括號內(nèi)規(guī)定數(shù)字的最大位數(shù)。 |
decimal(size,d)什燕、numeric(size,d) | 容納帶有小數(shù)的數(shù)字粘勒。"size" 規(guī)定數(shù)字的最大位數(shù)。"d" 規(guī)定小數(shù)點右側(cè)的最大位數(shù)屎即。 |
char(size) | 容納固定長度的字符串(可容納字母庙睡、數(shù)字以及特殊字符)。在括號中規(guī)定字符串的長度技俐。 |
varchar(size) | 容納可變長度的字符串(可容納字母乘陪、數(shù)字以及特殊的字符)。在括號中規(guī)定字符串的最大長度雕擂。 |
date(yyyymmdd) | 容納日期啡邑。 |
示例
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
SQL PRIMARY KEY 約束
PRIMARY KEY 約束唯一標識數(shù)據(jù)庫表中的每條記錄。
- 主鍵必須包含唯一的值井赌。
- 主鍵列不能包含 NULL 值谤逼。
每個表都應(yīng)該有一個主鍵,并且每個表只能有一個主鍵仇穗。
示例
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
主要配合AUTO INCREMENT 字段使用
SQL AUTO INCREMENT 字段
Auto-increment 會在新記錄插入表中時生成一個唯一的數(shù)字流部。
我們通常希望在每次插入新記錄時,自動地創(chuàng)建主鍵字段的值纹坐。
我們可以在表中創(chuàng)建一個 auto-increment 字段枝冀。
默認地,AUTO_INCREMENT 的開始值是 1,每條新記錄遞增 1果漾。
示例
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
上述示例是基于MySQL的語法