【数据库】SQL语句
生活随笔
收集整理的這篇文章主要介紹了
【数据库】SQL语句
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SQL 分為兩個部分:數據操作語言(DML)和 數據定義語言(DDL)。
增刪改查(CRUD)構成了 SQL 的 DML 部分。
- SELECT - 從數據庫表中獲取數據
- SELECT 列名 FROM 表名
- SELECT * FROM 表名
- SELECT COUNT(*) FROM 表名
- SELECT DISTINCT 列名 FROM 表名 ?(只顯示結果不同的項)
- SELECT 列名 FROM 表名 WHERE 列 運算符 值
- 一些特別的操作符
操作符 描述 <> 不等于 BETWEEN 在某個范圍內 LIKE 搜索某種模式 - LIKE 或 NOT LIKE 搜索的模式:
- % 表示一個或多個字符
- _ 表示一個字符
- [charlist] 表示字符列中的任何單一字符
- [^charlist] 或者 [!charlist] 表示不在字符列中的任何單一字符
- WHERE 列名 IS NULL
- 查找空字段不能用 =NULL !
- IN 允許在 WHERE 子句中規定多個值。
- WHERE 列名 IN (值1, 值2, ...)
這種方法比?WHERE 列名 = 值1 OR 列名 = 值2 效率高
- WHERE 列名 IN (值1, 值2, ...)
- 操作符 BETWEEN ... AND 會選取介于兩個值之間的數據范圍,這些值可以是數值、文本或者日期。
- SELECT 列名 FROM 表名 WHERE 列名 (NOT) BETWEEN 值1 AND 值2
- 不同的數據庫對 BETWEEN AND 操作符的區間處理有差異,有開區間、閉區間、左閉右開。
- AND 和 OR 可在 WHERE 子語句中把多個條件結合起來,可以使用圓括號來組成復雜的表達式。
- WHERE 列名=(SELECT ……)
- e.g. SELECT ……?WHERE birthday=(SELECT MIN(birthday) FROM ……)
- 一些特別的操作符
- ORDER BY 語句用于根據指定的列對結果集進行排序(默認升序)。
- e.g. SELECT …… ORDER BY 列1 DESC, 列2 ASC
- 分組查詢 GROUP BY
- GROUP BY 列名
- 根據分組字段的值將一個數據集劃分成各個不同的小組,然后分別按照各個組別進行相應的查詢。
SELECT * …… GROUP BY 列名 ? ?將只會返回各個分組的第一條數據,這種查詢通常沒什么意義。
因此常與 COUNT(),MAX() ?等統計函數結合使用。
- 根據分組字段的值將一個數據集劃分成各個不同的小組,然后分別按照各個組別進行相應的查詢。
- HAVING 用于對統計函數進行條件判斷
- 由于 “ SELECT COUNT(*) FROM 表名 WHERE COUNT(*) GROUP BY 列名 ” 語句中 WHERE 關鍵字無法與統計函數一起使用,該語句錯誤!
- e.g. GROUP BY 列名 HAVING 統計函數(列名2) 運算符 值
- GROUP BY 列名1, 列名2, ....
- 首先根據列名1的字段值分組,再在每個分組里根據列名2的字段值分組
- GROUP BY 列名
- 規定要返回的記錄的數目
- SQL Server:
- SELECT TOP 3 列名 FROM 表名
- SELECT TOP 50 PERCENT 列名 FROM 表名
- MySQL:
- SELECT 列名 FROM 表名 LIMIT 3
- Oracle:
- SELECT 列名 FROM 表名 WHERE ROWNUM <= 3
- SQL Server:
- AS?為列名或表名指定別名(AS 可以省略,但建議加上以增加語句可讀性)
- 表名的別名
- SELECT 列名 FROM 表名1 AS 別名1, 表名2 AS 別名2
- 表名的別名使查詢程序的 WHERE 語句更易閱讀和書寫
- 列名的別名
- SELECT 列名1 AS 別名1, 列名2 AS 別名2 FROM 表名
- 表名的別名
- JOIN
- JOIN / INNER JOIN
- 內連接返回左右兩表中匹配的行
- SELECT .... FROM 表1, 表2, 表3, .... WHERE 表1.列=表2.列 and 表2.列=表3.列 ....
這種傳統跨表查詢可替換為
SELECT .... FROM 表1 [INNER] JOIN 表2 ON 表1.列=表2.列 JOIN 表3 ON 表2.列=表3.列 .... WHERE ....
- LEFT JOIN
- 將左邊的表設置為主表來連接右邊的表,即使左表中的數據在右表中沒有匹配,會自動使用 NULL 替代
- RIGHT JOIN
- 將右邊的表設置為主表來連接左邊的表,即使右表中的數據在左表中沒有匹配,會自動使用 NULL 替代
- JOIN / INNER JOIN
- UPDATE - 更新數據庫表中的數據
- UPDATE 表名 SET 列1 = 值1, 列2 = 值2?WHERE ……
- DELETE - 從數據庫表中刪除數據
- DELETE FROM 表名 WHERE ……
- DELETE FROM 表名 或 DELETE * FROM 表名
- INSERT INTO - 向數據庫表中插入數據
- INSERT INTO 表名 VALUES (值1, 值2, ....) --?不寫列名必須寫出所有字段值!
- INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ....)
- 插入另一個表中的多行數據:
INSERT INTO 表名1 (列1, 列2,...)
? ? SELECT?(列1', 列2', ...) FROM 表名2 WHERE 條件
DDL 部分使我們有能力創建或刪除表格,也可以定義索引(鍵),規定表之間的鏈接,以及施加表間的約束。
- CREATE DATABASE - 創建新數據庫
- CREATE DATABASE 數據庫名
- ALTER DATABASE - 修改數據庫
- CREATE TABLE - 創建新表
-
CREATE TABLE 表名
(
列名1 數據類型,
列名2 數據類型,
列名3 數據類型,
....
) - 常用數據類型
數據類型 描述 integer(size)
int(size)
smallint(size)
tinyint(size)僅容納整數。在括號內規定數字的最大位數。 decimal(size,d)
numeric(size,d)容納帶有小數的數字。
"size" 規定數字的最大位數。"d" 規定小數點右側的最大位數。char(size) 容納固定長度的字符串(可容納字母、數字以及特殊字符)。
在括號中規定字符串的長度。varchar(size) 容納可變長度的字符串(可容納字母、數字以及特殊的字符)。
在括號中規定字符串的最大長度。date(yyyymmdd) 容納日期。日期字段需要加引號,如 '1994-07-04'。 - CREATE TABLE 或 ALTER TABLE 時可以規定約束,用于限制加入表的數據的類型。
- NOT NULL
- 強制列不接受 NULL 值。如果不向字段添加值,就無法插入新記錄或者更新記錄。
- CREATE TABLE 表名
(
列名1 數據類型 NOT NULL,
....
)
- UNIQUE
- 唯一標識數據庫表中的每條記錄。
- 表創建時創建 UNIQUE 約束:
CREATE TABLE 表名
(
列名1 數據類型 UNIQUE,
....
) - 命名 UNIQUE 約束,以及為多個列定義 UNIQUE 約束:
CREATE TABLE 表名
(
列名1 數據類型,
列名2 數據類型,
....
CONSTRAINT 別名 UNIQUE (列名1, 列名2)
) - 對已創建的表中的列創建 UNIQUE 約束:
ALTER TABLE 表名
ADD UNIQUE (列名)
ALTER TABLE 表名
ADD CONSTRAINT 別名 UNIQUE (列名1, 列名2) - 撤銷 UNIQUE 約束
……
- PRIMARY KEY
- PRIMARY KEY 約束唯一標識數據庫表中的每條記錄,其擁有自動定義的 UNIQUE 約束。每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。
主鍵列不能包含 NULL 值。
每個表必須有且只有一個主鍵。 - 表創建時創建 PRIMARY KEY?約束:
CREATE TABLE 表名
(
列名1 數據類型 NOT NULL PRIMARY KEY,
....
)
- PRIMARY KEY 約束唯一標識數據庫表中的每條記錄,其擁有自動定義的 UNIQUE 約束。每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。
- FOREIGN KEY
- 一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。
- 表創建時創建 FOREIGN KEY?約束:
CREATE TABLE 表名
(
....
列名 數據類型 FOREIGN?KEY REFERENCES?另一表名(其主鍵名),
....
)
- CHECK
- CHECK 約束用于限制列中的值的范圍。
- 表創建時創建 CHECK 約束:
CREATE TABLE 表名
(
....
列名 int CHECK (列名 > 0),
....
)
- DEFAULT
- DEFAULT 約束用于向列中插入默認值。
- 表創建時創建 DEFAULT?約束:
CREATE TABLE 表名
(
....
列名 date DEFAULT GETDATE(),
....
)
- AUTO INCREMENT
- AUTO INCREMENT 允許在每次插入新記錄時,自動地創建主鍵字段的值,可以規定起始值和遞增值。
- NOT NULL
-
- ALTER TABLE - 變更數據庫表
- DROP TABLE - 刪除表
- CREATE INDEX - 創建索引(搜索鍵)
- 在不讀取整個表的情況下,索引使數據庫應用程序可以更快地查找數據。
-
CREATE [UNIQUE] INDEX 索引名 ON 表名 (列名1 [DESC], 列名2)
UNIQUE?在表上創建一個唯一的索引,意味著兩個行不能擁有相同的索引值。
如果希望以降序索引某個列中的值,可以在列名之后添加保留字 DESC。
- DROP INDEX - 刪除索引
- TRUNCATE TABLE - 清空表
- TRUNCATE TABLE 用于刪除表中的所有行,而不記錄單個行刪除操作。不同于 DELETE * ,TRUNCATE 會使自動遞增的標識還原。
- TRUNCATE TABLE 表名
轉載于:https://www.cnblogs.com/wayne793377164/p/7218710.html
總結
以上是生活随笔為你收集整理的【数据库】SQL语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到偷葱是什么意思啊
- 下一篇: windows下安装mysql教程