一、SQL?DML? 和? DDL
可以把? SQL? 分為兩個(gè)部分:數(shù)據(jù)操作語(yǔ)言? (DML)? 和?數(shù)據(jù)定義語(yǔ)言? (DDL) 。 SQL?( 結(jié)構(gòu)化查詢語(yǔ)言 ) 是用于執(zhí)行查詢的語(yǔ)法。但是? SQL? 語(yǔ)言也包含用于更新、插入和刪除記錄的語(yǔ)法。
查詢和更新指令構(gòu)成了? SQL? 的? DML? 部分:
- SELECT?-? 從數(shù)據(jù)庫(kù)表中獲取數(shù)據(jù)
- UPDATE?-? 更新數(shù)據(jù)庫(kù)表中的數(shù)據(jù)
- DELETE?-? 從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù)
- INSERT?INTO?-? 向數(shù)據(jù)庫(kù)表中插入數(shù)據(jù)
SQL? 的數(shù)據(jù)定義語(yǔ)言? (DDL)? 部分使我們有能力創(chuàng)建或刪除表格。我們也可以定義索引(鍵),規(guī)定表之間的鏈接,以及施加表間的約束。
SQL? 中最重要的? DDL? 語(yǔ)句 :
- CREATE?DATABASE?-? 創(chuàng)建新數(shù)據(jù)庫(kù)
- ALTER?DATABASE?-? 修改數(shù)據(jù)庫(kù)
- CREATE?TABLE?-? 創(chuàng)建新表
- ALTER?TABLE?-? 變更(改變)數(shù)據(jù)庫(kù)表
- DROP?TABLE?-? 刪除表
- CREATE?INDEX?-? 創(chuàng)建索引(搜索鍵)
- DROP?INDEX?-? 刪除索引
?
二、 select 語(yǔ)句
SELECT? 列名稱? FROM? 表名稱 ???????????????????????????--* 表示所有
SELECT?DISTINCT? 列名稱? FROM? 表名稱 ???????????????-- 去掉重復(fù)
?
三、 where 子句
SELECT? 列名稱? FROM? 表名稱? WHERE? 列?運(yùn)算符?值
下面的運(yùn)算符可在? WHERE? 子句中使用:
|
操作符 |
描述 |
|
= |
等于 |
|
<> |
不等于 |
|
> |
大于 |
|
< |
小于 |
|
>= |
大于等于 |
|
<= |
小于等于 |
|
BETWEEN |
在某個(gè)范圍內(nèi) |
|
LIKE |
搜索某種模式 |
注釋:在某些版本的? SQL? 中,操作符? <>? 可以寫(xiě)為? != 。
?
四、 oderby? 子句
ORDER?BY? 語(yǔ)句用于對(duì)結(jié)果集進(jìn)行排序。
DESC?降序??ASC? 升序
?
五、insert 語(yǔ)句
INSERT?INTO? 表名稱? VALUES?( 值 1,? 值 2,....)
?
六、update 語(yǔ)句
UPDATE? 表名稱? SET? 列名稱? =? 新值? WHERE? 列名稱? =? 某值
?
七、delete 語(yǔ)句
DELETE?FROM? 表名稱? WHERE? 列名稱? =? 值
?
八、Top 子句
SELECT?TOP?number|percent?column_name(s)
FROM?table_name
?
九、like 操作符
SELECT?column_name(s)
FROM?table_name
WHERE?column_name?LIKE?pattern
SQL? 通配符必須與? LIKE? 運(yùn)算符一起使用。
在? SQL? 中,可使用以下通配符:
|
通配符 |
描述 |
|
% |
替代一個(gè)或多個(gè)字符 |
|
_ |
僅替代一個(gè)字符 |
|
[charlist] |
字符列中的任何單一字符 |
|
[^charlist] 或者 [!charlist] |
不在字符列中的任何單一字符 |
?
十、in? 操作符
SELECT?column_name(s)
FROM?table_name
WHERE?column_name?IN?(value1,value2,...)
?
十一、between? 操作符
SELECT?column_name(s)
FROM?table_name
WHERE?column_name
BETWEEN?value1?AND?value2
如需使用上面的例子顯示范圍之外的人,請(qǐng)使用? NOT? 操作符
?
十二、Join
- JOIN:? 如果表中有至少一個(gè)匹配,則返回行
- LEFT?JOIN:? 即使右表中沒(méi)有匹配,也從左表返回所有的行
- RIGHT?JOIN:? 即使左表中沒(méi)有匹配,也從右表返回所有的行
- FULL?JOIN:? 只要其中一個(gè)表中存在匹配,就返回行
SELECT?Persons.LastName,?Persons.FirstName,?Orders.OrderNo
FROM?Persons,?Orders
WHERE?Persons.Id_P?=?Orders.Id_P
?
十三、inner?join
SELECT?column_name(s)
FROM?table_name1
INNER?JOIN?table_name2?
ON?table_name1.column_name=table_name2.column_name
注釋:INNER?JOIN? 與? JOIN? 是相同的。
?
十四、 left?join
SELECT?column_name(s)
FROM?table_name1
LEFT?JOIN?table_name2?
ON?table_name1.column_name=table_name2.column_name
原始的表? ( 用在例子中的 ) :
"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 |
左連接( LEFT?JOIN )實(shí)例
現(xiàn)在,我們希望列出所有的人,以及他們的定購(gòu)? -? 如果有的話。
您可以使用下面的? SELECT? 語(yǔ)句:
SELECT?Persons.LastName,?Persons.FirstName,?Orders.OrderNo
FROM?Persons
LEFT?JOIN?Orders
ON?Persons.Id_P=Orders.Id_O
ORDER?BY?Persons.LastName
結(jié)果集:
|
LastName |
FirstName |
OrderNo |
|
Adams |
John |
22456 |
|
Adams |
John |
24562 |
|
Carter |
Thomas |
77895 |
|
Carter |
Thomas |
44678 |
|
Bush |
George |
? |
LEFT?JOIN? 關(guān)鍵字會(huì)從左表? (Persons)? 那里返回所有的行,即使在右表? (Orders)? 中沒(méi)有匹配的行。
?
十五、full?join
原始的表? ( 用在例子中的 ) :
"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 |
全連接( FULL?JOIN )實(shí)例
現(xiàn)在,我們希望列出所有的人,以及他們的定單,以及所有的定單,以及定購(gòu)它們的人。
您可以使用下面的? SELECT? 語(yǔ)句:
SELECT?Persons.LastName,?Persons.FirstName,?Orders.OrderNo
FROM?Persons
FULL?JOIN?Orders
ON?Persons.Id_P=Orders.Id_P
ORDER?BY?Persons.LastName
結(jié)果集:
|
LastName |
FirstName |
OrderNo |
|
Adams |
John |
22456 |
|
Adams |
John |
24562 |
|
Carter |
Thomas |
77895 |
|
Carter |
Thomas |
44678 |
|
Bush |
George |
? |
|
? |
? |
34764 |
FULL?JOIN? 關(guān)鍵字會(huì)從左表? (Persons)? 和右表? (Orders)? 那里返回所有的行。如果? "Persons"? 中的行在表? "Orders"? 中沒(méi)有匹配,或者如果? "Orders"? 中的行在表? "Persons"? 中沒(méi)有匹配,這些行同樣會(huì)列出。
十七、Union 操作符
SQL?UNION? 語(yǔ)法
SELECT?column_name(s)?FROM?table_name1
UNION
SELECT?column_name(s)?FROM?table_name2
注釋:默認(rèn)地, UNION? 操作符選取不同的值。如果允許重復(fù)的值,請(qǐng)使用? UNION?ALL 。
SQL?UNION?ALL? 語(yǔ)法
SELECT?column_name(s)?FROM?table_name1
UNION?ALL
SELECT?column_name(s)?FROM?table_name2
另外, UNION? 結(jié)果集中的列名總是等于? UNION? 中第一個(gè)? SELECT? 語(yǔ)句中的列名。
下面的例子中使用的原始表:
Employees_China:
|
E_ID |
E_Name |
|
01 |
Zhang,?Hua |
|
02 |
Wang,?Wei |
|
03 |
Carter,?Thomas |
|
04 |
Yang,?Ming |
Employees_USA:
|
E_ID |
E_Name |
|
01 |
Adams,?John |
|
02 |
Bush,?George |
|
03 |
Carter,?Thomas |
|
04 |
Gates,?Bill |
使用? UNION? 命令
實(shí)例
列出所有在中國(guó)和美國(guó)的不同的雇員名:
SELECT?E_Name?FROM?Employees_China
UNION
SELECT?E_Name?FROM?Employees_USA
?
結(jié)果
|
E_Name |
|
Zhang,?Hua |
|
Wang,?Wei |
|
Carter,?Thomas |
|
Yang,?Ming |
|
Adams,?John |
|
Bush,?George |
|
Gates,?Bill |
注釋:這個(gè)命令無(wú)法列出在中國(guó)和美國(guó)的所有雇員。在上面的例子中,我們有兩個(gè)名字相同的雇員,他們當(dāng)中只有一個(gè)人被列出來(lái)了。 UNION? 命令只會(huì)選取不同的值。
UNION?ALL? 命令和? UNION? 命令幾乎是等效的,不過(guò)? UNION?ALL? 命令會(huì)列出所有的值。
實(shí)例:
列出在中國(guó)和美國(guó)的所有的雇員:
SELECT?E_Name?FROM?Employees_China
UNION?ALL
SELECT?E_Name?FROM?Employees_USA
結(jié)果
|
E_Name |
|
Zhang,?Hua |
|
Wang,?Wei |
|
Carter,?Thomas |
|
Yang,?Ming |
|
Adams,?John |
|
Bush,?George |
|
Carter,?Thomas |
|
Gates,?Bill |
?
十八、select?into? 語(yǔ)句
SELECT?INTO? 語(yǔ)句從一個(gè)表中選取數(shù)據(jù),然后把數(shù)據(jù)插入另一個(gè)表中。
SELECT?INTO? 語(yǔ)句常用于創(chuàng)建表的備份復(fù)件或者用于對(duì)記錄進(jìn)行存檔。
您可以把所有的列插入新表:
SELECT?*
INTO?new_table_name?[IN?externaldatabase]?
FROM?old_tablename
?
或者只把希望的列插入新表:
SELECT?column_name(s)
INTO?new_table_name?[IN?externaldatabase]?
FROM?old_tablename
?
十九、create?table
數(shù)據(jù)類型( data_type )規(guī)定了列可容納何種數(shù)據(jù)類型。下面的表格包含了 SQL 中最常用的數(shù)據(jù)類型:
|
數(shù)據(jù)類型 |
描述 |
|
?integer(size) ?int(size) ?smallint(size) ?tinyint(size) ? |
僅容納整數(shù)。在括號(hào)內(nèi)規(guī)定數(shù)字的最大位數(shù)。 |
|
?decimal(size,d) ?numeric(size,d) ? |
容納帶有小數(shù)的數(shù)字。 "size"? 規(guī)定數(shù)字的最大位數(shù)。 "d"? 規(guī)定小數(shù)點(diǎn)右側(cè)的最大位數(shù)。 |
|
char(size) |
容納固定長(zhǎng)度的字符串(可容納字母、數(shù)字以及特殊字符)。 在括號(hào)中規(guī)定字符串的長(zhǎng)度。 |
|
varchar(size) |
容納可變長(zhǎng)度的字符串(可容納字母、數(shù)字以及特殊的字符)。 在括號(hào)中規(guī)定字符串的最大長(zhǎng)度。 |
|
date(yyyymmdd) |
容納日期。 |
?
二十、 sql? 約束
- NOT?NULL
- UNIQUE
- PRIMARY?KEY
- FOREIGN?KEY
- CHECK
- DEFAULT
二十一、 foreign?key
FOREIGN?KEY? 約束用于預(yù)防破壞表之間連接的動(dòng)作。
FOREIGN?KEY? 約束也能防止非法數(shù)據(jù)插入外鍵列,因?yàn)樗仨毷撬赶虻哪莻€(gè)表中的值之一
CREATE?TABLE?Orders
(
O_Id?int?NOT?NULL?PRIMARY?KEY,
OrderNo?int?NOT?NULL,
Id_P?int?FOREIGN?KEY?REFERENCES?Persons(Id_P)
)
二十二、 check? 約束
如果對(duì)單個(gè)列定義? CHECK? 約束,那么該列只允許特定的值。
如果對(duì)一個(gè)表定義? CHECK? 約束,那么此約束會(huì)在特定的列中對(duì)值進(jìn)行限制。
二十三、 default? 約束
CREATE?TABLE?Persons
(
Id_P?int?NOT?NULL,
LastName?varchar(255)?NOT?NULL,
FirstName?varchar(255),
Address?varchar(255),
City?varchar(255)?DEFAULT?'Sandnes'
)
?
二十四、 create?index? 索引
您可以在表中創(chuàng)建索引,以便更加快速高效地查詢數(shù)據(jù)。
用戶無(wú)法看到索引,它們只能被用來(lái)加速搜索 / 查詢。
CREATE?INDEX?PersonIndex
ON?Person?(LastName?DESC)
?
二十五、 alter
ALTER?TABLE?table_name
ADD?column_name?datatype
ALTER?TABLE?table_name?
DROP?COLUMN?column_name
ALTER?TABLE?table_name
ALTER?COLUMN?column_name?datatype
?
二十六、AUTO?INCREMENT? 字段
默認(rèn)地, AUTO_INCREMENT? 的開(kāi)始值是? 1 ,每條新記錄遞增? 1 。
ALTER?TABLE?Persons?AUTO_INCREMENT=100
?
二十七、 create?view
CREATE?VIEW?view_name?AS
SELECT?column_name(s)
FROM?table_name
WHERE?condition
?
SQL? 更新視圖
您可以使用下面的語(yǔ)法來(lái)更新視圖:
SQL?CREATE?OR?REPLACE?VIEW?Syntax
CREATE?OR?REPLACE?VIEW?view_name?AS
SELECT?column_name(s)
FROM?table_name
WHERE?condition
SQL? 撤銷(xiāo)視圖
您可以通過(guò)? DROP?VIEW? 命令來(lái)刪除視圖。
SQL?DROP?VIEW?Syntax
DROP?VIEW?view_name
?
二十八、 sql? 日期
MySQL?Date? 函數(shù)
下面的表格列出了? MySQL? 中最重要的內(nèi)建日期函數(shù):
|
函數(shù) |
描述 |
|
返回當(dāng)前的日期和時(shí)間 |
|
|
返回當(dāng)前的日期 |
|
|
返回當(dāng)前的時(shí)間 |
|
|
提取日期或日期 / 時(shí)間表達(dá)式的日期部分 |
|
|
返回日期 / 時(shí)間按的單獨(dú)部分 |
|
|
給日期添加指定的時(shí)間間隔 |
|
|
從日期減去指定的時(shí)間間隔 |
|
|
返回兩個(gè)日期之間的天數(shù) |
|
|
用不同的格式顯示日期 / 時(shí)間 |
?
SQL?Server?Date? 函數(shù)
下面的表格列出了? SQL?Server? 中最重要的內(nèi)建日期函數(shù):
|
函數(shù) |
描述 |
|
返回當(dāng)前日期和時(shí)間 |
|
|
返回日期 / 時(shí)間的單獨(dú)部分 |
|
|
在日期中添加或減去指定的時(shí)間間隔 |
|
|
返回兩個(gè)日期之間的時(shí)間 |
|
|
用不同的格式顯示日期 / 時(shí)間 |
SQL?Date? 數(shù)據(jù)類型
MySQL? 使用下列數(shù)據(jù)類型在數(shù)據(jù)庫(kù)中存儲(chǔ)日期或日期 / 時(shí)間值:
- DATE?-? 格式? YYYY-MM-DD
- DATETIME?-? 格式 :?YYYY-MM-DD?HH:MM:SS
- TIMESTAMP?-? 格式 :?YYYY-MM-DD?HH:MM:SS
- YEAR?-? 格式? YYYY? 或? YY
SQL?Server? 使用下列數(shù)據(jù)類型在數(shù)據(jù)庫(kù)中存儲(chǔ)日期或日期 / 時(shí)間值:
- DATE?-? 格式? YYYY-MM-DD
- DATETIME?-? 格式 :?YYYY-MM-DD?HH:MM:SS
- SMALLDATETIME?-? 格式 :?YYYY-MM-DD?HH:MM:SS
- TIMESTAMP?-? 格式 :? 唯一的數(shù)字
二十九、數(shù)據(jù)類型
不同數(shù)據(jù)的區(qū)別??( *********** 查 ************ )
?
三十、函數(shù)
在? SQL?Server? 中的合計(jì)函數(shù)
|
函數(shù) |
描述 |
|
返回某列的平均值 |
|
|
BINARY_CHECKSUM |
? |
|
CHECKSUM |
? |
|
CHECKSUM_AGG |
? |
|
返回某列的行數(shù)(不包括 NULL 值) |
|
|
返回被選行數(shù) |
|
|
返回相異結(jié)果的數(shù)目 |
|
|
返回在指定的域中第一個(gè)記錄的值( SQLServer2000? 不支持) |
|
|
返回在指定的域中最后一個(gè)記錄的值( SQLServer2000? 不支持) |
|
|
返回某列的最高值 |
|
|
返回某列的最低值 |
|
|
STDEV(column) |
? |
|
STDEVP(column) |
? |
|
返回某列的總和 |
|
|
VAR(column) |
? |
|
VARP(column) |
? |
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

