1、SQL DML 和 DDLmysql
能夠把 SQL 分爲兩個部分:數據操做語言 (DML) 和 數據定義語言 (DDL)。SQL (結構化查詢語言)是用於執行查詢的語法。可是 SQL 語言也包含用於更新、插入和刪除記錄的語法。sql
查詢和更新指令構成了 SQL 的 DML 部分:數據庫
SQL 的數據定義語言 (DDL) 部分使咱們有能力建立或刪除表格。咱們也能夠定義索引(鍵),規定表之間的連接,以及施加表間的約束。函數
SQL 中最重要的 DDL 語句:spa
2、select語句orm
SELECT 列名稱 FROM 表名稱 --*表示全部排序
SELECT DISTINCT 列名稱 FROM 表名稱 --去掉重複索引
3、where子句ci
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值字符串
下面的運算符可在 WHERE 子句中使用:
操做符 |
描述 |
= |
等於 |
<> |
不等於 |
> |
大於 |
< |
小於 |
>= |
大於等於 |
<= |
小於等於 |
BETWEEN |
在某個範圍內 |
LIKE |
搜索某種模式 |
註釋:在某些版本的 SQL 中,操做符 <> 能夠寫爲 !=。
4、oderby 子句
ORDER BY 語句用於對結果集進行排序。
DESC 降序 ASC 升序
5、insert語句
INSERT INTO 表名稱 VALUES (值1, 值2,....)
6、update語句
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
7、delete語句
DELETE FROM 表名稱 WHERE 列名稱 = 值
8、Top子句
SELECT TOP number|percent column_name(s)
FROM table_name
9、like操做符
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
SQL 通配符必須與 LIKE 運算符一塊兒使用。
在 SQL 中,可以使用如下通配符:
通配符 |
描述 |
% |
替代一個或多個字符 |
_ |
僅替代一個字符 |
[charlist] |
字符列中的任何單一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何單一字符 |
10、in 操做符
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
11、between 操做符
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
如需使用上面的例子顯示範圍以外的人,請使用 NOT 操做符
12、Join
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
十3、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 是相同的。
十4、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)實例
如今,咱們但願列出全部的人,以及他們的定購 - 若是有的話。
您可使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_O
ORDER BY Persons.LastName
結果集:
LastName |
FirstName |
OrderNo |
Adams |
John |
22456 |
Adams |
John |
24562 |
Carter |
Thomas |
77895 |
Carter |
Thomas |
44678 |
Bush |
George |
|
LEFT JOIN 關鍵字會從左表 (Persons) 那裏返回全部的行,即便在右表 (Orders) 中沒有匹配的行。
十5、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)實例
如今,咱們但願列出全部的人,以及他們的定單,以及全部的定單,以及定購它們的人。
您可使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
結果集:
LastName |
FirstName |
OrderNo |
Adams |
John |
22456 |
Adams |
John |
24562 |
Carter |
Thomas |
77895 |
Carter |
Thomas |
44678 |
Bush |
George |
|
|
|
34764 |
FULL JOIN 關鍵字會從左表 (Persons) 和右表 (Orders) 那裏返回全部的行。若是 "Persons" 中的行在表 "Orders" 中沒有匹配,或者若是 "Orders" 中的行在表 "Persons" 中沒有匹配,這些行一樣會列出。
十7、Union操做符
SQL UNION 語法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
註釋:默認地,UNION 操做符選取不一樣的值。若是容許重複的值,請使用 UNION ALL。
SQL UNION ALL 語法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 結果集中的列名老是等於 UNION 中第一個 SELECT 語句中的列名。
下面的例子中使用的原始表:
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 命令
實例
列出全部在中國和美國的不一樣的僱員名:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
結果
E_Name |
Zhang, Hua |
Wang, Wei |
Carter, Thomas |
Yang, Ming |
Adams, John |
Bush, George |
Gates, Bill |
註釋:這個命令沒法列出在中國和美國的全部僱員。在上面的例子中,咱們有兩個名字相同的僱員,他們當中只有一我的被列出來了。UNION 命令只會選取不一樣的值。
UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出全部的值。
實例:
列出在中國和美國的全部的僱員:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
結果
E_Name |
Zhang, Hua |
Wang, Wei |
Carter, Thomas |
Yang, Ming |
Adams, John |
Bush, George |
Carter, Thomas |
Gates, Bill |
十8、select into 語句
SELECT INTO 語句從一個表中選取數據,而後把數據插入另外一個表中。
SELECT INTO 語句經常使用於建立表的備份復件或者用於對記錄進行存檔。
您能夠把全部的列插入新表:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
或者只把但願的列插入新表:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
十9、create table
數據類型(data_type)規定了列可容納何種數據類型。下面的表格包含了SQL中最經常使用的數據類型:
數據類型 |
描述 |
integer(size) int(size) smallint(size) tinyint(size)
|
僅容納整數。在括號內規定數字的最大位數。 |
decimal(size,d) numeric(size,d)
|
容納帶有小數的數字。 "size" 規定數字的最大位數。"d" 規定小數點右側的最大位數。 |
char(size) |
容納固定長度的字符串(可容納字母、數字以及特殊字符)。 在括號中規定字符串的長度。 |
varchar(size) |
容納可變長度的字符串(可容納字母、數字以及特殊的字符)。 在括號中規定字符串的最大長度。 |
date(yyyymmdd) |
容納日期。 |
二10、sql 約束
二11、foreign key
FOREIGN KEY 約束用於預防破壞表之間鏈接的動做。
FOREIGN KEY 約束也能防止非法數據插入外鍵列,由於它必須是它指向的那個表中的值之一
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
二12、check 約束
若是對單個列定義 CHECK 約束,那麼該列只容許特定的值。
若是對一個表定義 CHECK 約束,那麼此約束會在特定的列中對值進行限制。
二十3、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'
)
二十4、create index 索引
您能夠在表中建立索引,以便更加快速高效地查詢數據。
用戶沒法看到索引,它們只能被用來加速搜索/查詢。
CREATE INDEX PersonIndex
ON Person (LastName DESC)
二十5、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
二十6、AUTO INCREMENT 字段
默認地,AUTO_INCREMENT 的開始值是 1,每條新記錄遞增 1。
ALTER TABLE Persons AUTO_INCREMENT=100
二十7、create view
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
SQL 更新視圖
您可使用下面的語法來更新視圖:
SQL CREATE OR REPLACE VIEW Syntax
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
SQL 撤銷視圖
您能夠經過 DROP VIEW 命令來刪除視圖。
SQL DROP VIEW Syntax
DROP VIEW view_name
二十8、sql 日期
MySQL Date 函數
下面的表格列出了 MySQL 中最重要的內建日期函數:
函數 |
描述 |
返回當前的日期和時間 |
|
返回當前的日期 |
|
返回當前的時間 |
|
提取日期或日期/時間表達式的日期部分 |
|
返回日期/時間按的單獨部分 |
|
給日期添加指定的時間間隔 |
|
從日期減去指定的時間間隔 |
|
返回兩個日期之間的天數 |
|
用不一樣的格式顯示日期/時間 |
SQL Server Date 函數
下面的表格列出了 SQL Server 中最重要的內建日期函數:
函數 |
描述 |
返回當前日期和時間 |
|
返回日期/時間的單獨部分 |
|
在日期中添加或減去指定的時間間隔 |
|
返回兩個日期之間的時間 |
|
用不一樣的格式顯示日期/時間 |
SQL Date 數據類型
MySQL 使用下列數據類型在數據庫中存儲日期或日期/時間值:
SQL Server 使用下列數據類型在數據庫中存儲日期或日期/時間值:
二十9、數據類型
不一樣數據的區別 (***********查************)
三10、函數
在 SQL Server 中的合計函數
函數 |
描述 |
返回某列的平均值 |
|
BINARY_CHECKSUM |
|
CHECKSUM |
|
CHECKSUM_AGG |
|
返回某列的行數(不包括NULL值) |
|
返回被選行數 |
|
返回相異結果的數目 |
|
返回在指定的域中第一個記錄的值(SQLServer2000 不支持) |
|
返回在指定的域中最後一個記錄的值(SQLServer2000 不支持) |
|
返回某列的最高值 |
|
返回某列的最低值 |
|
STDEV(column) |
|
STDEVP(column) |
|
返回某列的總和 |
|
VAR(column) |
|
VARP(column) |