整理自菜鳥教程
什么是SQL
SQL 指結構化查詢語言,全稱是 Structured Query Language,是用于訪問和處理數據庫的標準的計算機語言。
SQL能做什么
- SQL 面向數據庫執行查詢
- SQL 可從數據庫取回數據
- SQL 可在數據庫中插入新的記錄
- SQL 可更新數據庫中的數據
- SQL 可從數據庫刪除記錄
- SQL 可創建新數據庫
- SQL 可在數據庫中創建新表
- SQL 可在數據庫中創建存儲過程
- SQL 可在數據庫中創建視圖
- SQL 可以設置表、存儲過程和視圖的權限
SQL語法匯總
- 選擇數據庫
use database;
- 設置使用的字符集
set name utf8;
- 讀取表中信息
SELECT * FROM table;
- 返回唯一不同的值
SELECT DISTINCT column_name FROM table;
- 提取滿足要求的記錄
SELECT column_name,
FROM table
WHERE column_name operator value;
WHERE子句中的運算符
WHERE子句中的運算符
- 基于一個以上的條件對記錄進行過濾
SELECT * FROM table
WHERE country='CN'
AND|OR alexa > 50;
如果第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。
如果第一個條件和第二個條件中只要有一個成立,則 OR 運算符顯示一條記錄
- 對結果集進行排序。
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC; #默認升序,DESC降序
- 向表中插入新記錄
INSERT INTO table_name
VALUES (value1,value2,value3,...);#無需指定要插入數據的列名,只需提供被插入的值即可:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);#指定列名及被插入的值
- 更新表中的記錄
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
- 刪除表中的記錄
DELETE FROM table_name
WHERE some_column=some_value;
- 規定要返回的記錄的數目
SELECT TOP number|percent column_name(s)
FROM table_name;#SQL Server / MS Access 語法
SELECT column_name(s)
FROM table_name
LIMIT number;#MySQL 語法
- LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
SQL 通配符
通配符可用于替代字符串中的任何其他字符,常與LIKE一起使用
通配符
MySQL 中使用 REGEXP 或 NOT REGEXP 運算符 (或 RLIKE 和 NOT RLIKE) 來操作正則表達式。
- IN 操作符允許在 WHERE 子句中規定多個值
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;
- 為表名稱或列名稱指定別名
SELECT column_name AS alias_name
FROM table_name;#列的 SQL 別名語法
SELECT column_name(s)
FROM table_name AS alias_name;#表的 SQL 別名語法
- SQL JOIN 子句用于把來自兩個或多個表的行結合起來(基于這些表之間的共同字段)
INNER JOIN:如果表中有至少一個匹配,則返回行
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
LEFT JOIN:關鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結果為 NULL。
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
RIGHT JOIN:關鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果為 NULL。
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
FULL JOIN:只要其中一個表中存在匹配,則返回行
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
- UNION 操作符用于合并兩個或多個 SELECT 語句的結果集。
!注意,UNION 內部的每個 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每個 SELECT 語句中的列的順序必須相同
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
- SELECT INTO 語句從一個表復制數據,然后把數據插入到另一個新表中
SELECT *
INTO newtable [IN externaldb]
FROM table1;
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
- INSERT INTO SELECT 語句從一個表復制數據,然后把數據插入到一個已存在的表中。目標表中任何已存在的行都不會受影響。
INSERT INTO table2
SELECT * FROM table1;
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
- CREATE DATABASE 語句用于創建數據庫。
CREATE DATABASE dbname;
- CREATE TABLE 語句用于創建數據庫中的表。
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
- SQL 約束用于規定表中的數據規則。
如果存在違反約束的數據行為,行為會被約束終止。
約束可以在創建表時規定(通過 CREATE TABLE 語句),或者在表創建之后規定(通過 ALTER TABLE 語句)
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
在 SQL 中,有如下約束:
- NOT NULL - 指示某列不能存儲 NULL 值。
- UNIQUE - 保證某列的每行必須有唯一的值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的結合。確保某列(或兩個列多個列的結合)有唯一標識,有助于更容易更快速地找到表中的一個特定的記錄。
- FOREIGN KEY - 保證一個表中的數據匹配另一個表中的值的參照完整性。
- CHECK - 保證列中的值符合指定的條件。
DEFAULT - 規定沒有給列賦值時的默認值。
- CREATE INDEX 語句用于在表中創建索引。
CREATE INDEX index_name
ON table_name (column_name)
- DROP INDEX 語句用于刪除表中的索引
ALTER TABLE table_name DROP INDEX index_name;
- DROP TABLE 語句用于刪除表
DROP TABLE table_name;
- DROP DATABASE 語句用于刪除數據庫
DROP DATABASE database_name;
- TRUNCATE TABLE 語句用于只刪除表內的數據,但并不刪除表本身
TRUNCATE TABLE table_name;
- ALTER TABLE 語句用于在已有的表中添加、刪除或修改列。
ALTER TABLE table_name
ADD column_name datatype;#在表中添加列
ALTER TABLE table_name
DROP COLUMN column_name;#刪除表中的列
ALTER TABLE table_name
ALTER COLUMN column_name;#修改表中的列
- AUTO INCREMENT 字段會在新記錄插入表中時生成一個唯一的數字,與SQL約束用法相似,在創建表時添加
ALTER TABLE Persons AUTO_INCREMENT=100;#設定起始值
- SQL CREATE VIEW 語句用于創建視圖
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
- SQL 更新視圖
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
- SQL 撤銷視圖
DROP VIEW view_name;
SQL日期
MySQL 中的內建日期函數
SQL Date 數據類型:
MySQL 使用下列數據類型在數據庫中存儲日期或日期/時間值:
- DATE - 格式:YYYY-MM-DD
- DATETIME - 格式:YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
- YEAR - 格式:YYYY 或 YY
SQL 函數
SQL Aggregate 函數計算從列中取得的值,返回一個單一的值。
- AVG() - 返回平均值
- COUNT() - 返回行數
- FIRST() - 返回第一個記錄的值
- LAST() - 返回最后一個記錄的值
- MAX() - 返回最大值
- MIN() - 返回最小值
- SUM() - 返回總和
SQL Scalar 函數基于輸入值,返回一個單一的值。
- UCASE() - 將某個字段轉換為大寫
- LCASE() - 將某個字段轉換為小寫
- MID() - 從某個文本字段提取字符
- LEN() - 返回某個文本字段的長度
- ROUND() - 對某個數值字段進行指定小數位數的四舍五入
- NOW() - 返回當前的系統日期和時間
- FORMAT() - 格式化某個字段的顯示方式