1. 程式人生 > 其它 >SQL的基本語法

SQL的基本語法

1、SQL語句可以單行或者多行書寫,以分號結尾。

2、MySQL資料庫的SQL語句不區分大小寫,關鍵字建議使用大寫。

3、註釋:

1) 單行註釋:-- 註釋內容 或 #註釋內容(MySQL獨有)

2) 多杭註釋:/* 註釋內容*/

 

 

SQL分類:

DDL(Data Definition Language)資料定義語言,用來定義資料庫物件:資料庫、表、列等;

DML(Data Manipulation Language)資料操作語言,用來對資料庫中表的資料進行增刪改;

DQL(Data Query Language)資料查詢語言,用來查詢資料庫中表的記錄(資料);

DCL(Data Control Language)

資料控制語言,用來定義資料庫的訪問許可權和安全等級、建立使用者;

DDL -- 操作資料庫

1、查詢

檢視資料庫:SHOW DATABASES;

2、建立

建立資料庫:CREATE DATABASE 資料庫名;

建立資料庫(判斷,如果不存在則建立):CARETE DATABASE IF NOT EXISTS 資料庫名;

3、刪除

刪除資料庫:DROP DATABASE 資料庫名;

刪除資料庫(判斷,如果存在則刪除):DROP DATABASE IF EXISTS 資料庫名;

4、使用資料庫

使用資料庫:USE 資料庫名;

檢視當前使用的資料庫:SELECT DATABASE();

DDL --

操作表

建立(Create/ 查詢(Retrieve/ 修改(Update/ 刪除(Delete

查詢表:

查詢當前資料庫中的所有表:SHOW TABLES;

查詢表結構:DESC 表名稱;

建立表:

CREATE TABLE 表名稱(

欄位1 資料型別1...

欄位n 資料型別n

);

 

 

數值型別

MySQL 支援所有標準 SQL 數值資料型別。

這些型別包括嚴格數值資料型別(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似數值資料型別(FLOAT、REAL 和 DOUBLE PRECISION)。

關鍵字INT是INTEGER的同義詞,關鍵字DEC是DECIMAL的同義詞。

BIT資料型別儲存位欄位值,並且支援 MyISAM、MEMORY、InnoDB 和 BDB表。

作為 SQL 標準的擴充套件,MySQL 也支援整數型別 TINYINT、MEDIUMINT 和 BIGINT。下面的表顯示了需要的每個整數型別的儲存和範圍。

日期和時間型別

表示時間值的日期和時間型別為DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每個時間型別有一個有效值範圍和一個"零"值,當指定不合法的MySQL不能表示的值時使用"零"值。

TIMESTAMP型別有專有的自動更新特性,將在後面描述。

 

 

字串型別

字串型別指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。該節描述了這些型別如何工作以及如何在查詢中使用這些型別。

注意char(n) 和 varchar(n) 中括號中 n 代表字元的個數,並不代表位元組個數,比如 CHAR(30) 就可以儲存 30 個字元。

CHAR 和 VARCHAR 型別類似,但它們儲存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在儲存或檢索過程中不進行大小寫轉換。

BINARY 和 VARBINARY 類似於 CHAR 和 VARCHAR,不同的是它們包含二進位制字串而不要非二進位制字串。也就是說,它們包含位元組字串而不是字元字串。這說明它們沒有字符集,並且排序和比較基於列值位元組的數值值。

BLOB 是一個二進位制大物件,可以容納可變數量的資料。有 4 種 BLOB 型別:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它們區別在於可容納儲存範圍不同。

4 種 TEXT 型別:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。對應的這 4 種 BLOB 型別,可儲存的最大長度不同,可根據實際情況選擇。

刪除表

DROP TABLE 表名;

DROP TABLE IF EXISTS 表名;(刪除表時先判斷表是否存在)

修改表

1、修改表名:ALTER TABLE 表名 RENAME TO 新表名;

2、新增一列:ALTER TABLE 表名 ADD列名 資料型別;

3、修改資料型別:ALTER TABLE 表名 MODIFY 列名 新資料型別;

4、修改列名和資料型別:ALTER 表名 CHANGE 列名 新列名 資料型別;

5、刪除列:ALTER TABLE 表名 DROP 列名;

 

DML -- 新增資料 (INSERT INTO

1、給指定的列新增資料:

(1) INSERT INTO 表名稱(列名1,列名2, ...) values(1, 2, ...);

2、給全部列新增資料:

(1) INSERT INTO 表名稱 VALUES(1, 2, ...);

3、批量新增資料:

(1) INSERT INTO 表名稱(列名1,列名2, ...) VALUES(1, 2, ...), (1, 2, ...)...;

(2) INSERT INTO 表名稱 VALUES(1, 2, ...), (1, 2, ...);

 

DML -- 修改資料(UPDATE...SET

1、修改表資料:

(1) UPDATE 表名 SET 列名1=1, 列名2=2, ...[WHERE 條件];

注意:修改語句中如果不加條件,則將所有資料都修改!

DML -- 刪除資料(DELETE

1、刪除表中的資料:

(1) DELETE FROM 表名 [WHERE 條件];

注意:刪除語句中不加條件,則將表中所有的資料刪除!

DQL -- 查詢資料(SELECT

語法:

SELECT 欄位列表 FROM 表名列表 WHERE 條件列表 GROUP BY 分組列表 HAVING 分組後條件 ORDER BY 排序欄位 LIMIT 分頁限定;

 

1、查詢單表中所有資料:

(1) SELECT 欄位名 FROM 表名稱;

(2) SELECT DISTINCT 欄位名 FROM 表名稱;(去重)

(3) SELECT 欄位名 FROM 表名稱;

 

2、單表條件查詢:

 

 

1、查詢單表中的總記錄數:

(1) SELECT COUNT(*) FROM 表名稱;

(2) SELECT COUNT(*) FROM 表名稱 WHERE 條件[AND/OR ...];(多條件)

 

2、單表排序查詢:

(1) SELECT 欄位列表 FROM user ORDER BY 排序欄位;

(2) 按照數學成績降序排列,如果數學成績形同時,則按英語成績升序排列

SELECT * FROM stu ORDER BY math DESC, english ASC;

注意:多欄位排序時中間用,”隔開,當前面的條件一樣時才會啟用後面的條件。

 

3、分組查詢:將一列資料作為一個整體,進行縱向計算

語法:SELECT 欄位列表 FROM 表名 [WHERE 分組前條件限定] GROUP BY分組欄位名 [HAVING 分組後條件過濾];

 

 

 

Wherehaving的區別:

 

① 執行時機不一樣:where是分組之前進行限定,不滿足where條件的則不參與分組,而having是分組之後對結果進行過濾;

 

② 可判定的條件不一樣:where不能對聚合函式進行判定,having可以;

 

注意:

 

① null不參與任何聚合函式的運算;

 

② 分組之後查詢的欄位為聚合函式和分組欄位,查詢其他欄位無意義;

 

③ 執行順序為:where > 聚合函式 > having;

 

 

 

1、單表分頁查詢:

 

分頁的關鍵字為:LIMIT

 

語法:SELECT 欄位列表 FROM 表名稱LIMIT 索引開始, 查詢的記錄數;

 

起始索引:從0開始

 

計算公式:起始索引 = (當前頁碼 - 1) * 每頁顯示的條數

 

  

提示

① 分頁查詢limit MySQL資料庫獨有的(方言)

② Oracle分頁查詢使用 rownumber

③ SQL Server分頁查詢使用top

 

1、起別名:

AS: AS 也可以省略

① SELECT u.id, u.`name`, u.gender, u.address, u.`status` FROM user AS u;

② SELECT u.id, u.`name`, u.gender, u.address, u.`status` FROM user u;

③ select name, math as 數學成績, english as 英語成績 FROM stu;