- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 清空表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - INSERT 查詢
- MySQL - SELECT 查詢
- MySQL - UPDATE 查詢
- MySQL - DELETE 查詢
- MySQL - REPLACE 查詢
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子 (!=)
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION vs JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - BEFORE INSERT 觸發器
- MySQL - AFTER INSERT 觸發器
- MySQL - BEFORE UPDATE 觸發器
- MySQL - AFTER UPDATE 觸發器
- MySQL - BEFORE DELETE 觸發器
- MySQL - AFTER DELETE 觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式 & 運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 公共表表達式 (CTE)
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字元集
- MySQL - 校對規則
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 今日日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - SHOW PROCESSLIST
- MySQL - 修改列型別
- MySQL - 重置自動遞增
- MySQL - COALESCE() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - SELECT 語句
MySQL SELECT 語句
SELECT 語句用於從一個或多個(現有)表中檢索行。您可以與該語句一起使用各種子句。
語法
以下是 SELECT 語句的基本語法:
SELECT select_expr FROM table_references WHERE where_condition
其中,select_expr 是指示您需要檢索的列的表示式,table_reference 是您可以從中檢索行的表的名稱或引用。
可以使用 "*" 選擇表中的所有列,只需將表的名稱作為 table_reference 傳遞,即可檢索所有記錄。
示例
假設我們使用 CREATE TABLE 語句在 MySQL 資料庫中建立了一個名為 **Sales** 的表,如下所示:
CREATE TABLE sales( ID INT, ProductName VARCHAR(255), CustomerName VARCHAR(255), DispatchDate date, DeliveryTime time, Price INT, Location VARCHAR(255) );
以下查詢在上面建立的表中插入一行:
INSERT INTO SALES values
(1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000,
'Hyderabad'),
(2, 'Earphones', 'Roja', DATE('2019-05-01'), TIME('11:00:00'), 2000,
'Vishakhapatnam'),
(3, 'Mouse', 'Puja', DATE('2019-03-01'), TIME('10:59:59'), 3000,
'Vijayawada'),
(4, 'Mobile', 'Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000,
'Chennai'),
(5, 'Headset', 'Jalaja', DATE('2019-04-06'), TIME('11:08:59'), 6000,
'Goa');
以下查詢使用 SELECT 語句檢索價格值大於 6000 的 Sales 表的記錄:
SELECT * FROM SALES WHERE PRICE>6000;
輸出
以下是上述查詢的輸出:
| ID | ProductName | CustomerName | DispatchDate | DeliveryTime | Price | Location |
|---|---|---|---|---|---|---|
| 1 | 鍵盤 | Raja | 2019-09-01 | 11:00:00 | 7000 | 海德拉巴 |
| 4 | 手機 | Vanaja | 2019-03-01 | 10:10:52 | 9000 | 欽奈 |
選擇特定列
透過將所需的列名稱指定為 selectexpr,您可以檢索表的記錄的所需列值。以下查詢從 Sales 表中檢索 ID、CustomerName、ProductName、Price 列:
SELECT ID, CustomerName, ProductName, Price FROM SALES;
輸出
上述查詢產生以下輸出:
| ID | CustomerName | ProductName | Price |
|---|---|---|---|
| 1 | Raja | 鍵盤 | 7000 |
| 2 | Roja | 耳機 | 2000 |
| 3 | Puja | 滑鼠 | 3000 |
| 4 | Vanaja | 手機 | 9000 |
| 5 | Jalaja | 耳機 | 6000 |
無表選擇
使用 SELECT 語句,您還可以檢索所需的計算結果,而無需提供表引用:
SELECT 1250*2256;
輸出
以下是上述查詢的輸出:
| 1250*2256 |
|---|
| 2820000 |
select_expr 的別名
您可以使用別名列名作為 select 表示式。
假設我們使用 CREATE 語句在 MySQL 資料庫中建立了一個名為 MyPlayers 的表,如下所示
CREATE TABLE Players( ID INT, First_Name VARCHAR(255), Last_Name VARCHAR(255), Date_Of_Birth date, Place_Of_Birth VARCHAR(255), Country VARCHAR(255), PRIMARY KEY (ID) );
現在,我們將使用 INSERT 語句在 Players 表中插入 7 條記錄:
Insert into Players values
(1, 'Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India'),
(2, 'Jonathan', 'Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica'),
(3, 'Kumara', 'Sangakkara', DATE('1977-10-27'), 'Matale', 'Srilanka'),
(4, 'Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India'),
(5, 'Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India'),
(6, 'Ravindra', 'Jadeja', DATE('1988-12-06'), 'Nagpur', 'India'),
(7, 'James', 'Anderson', DATE('1982-06-30'), 'Burnley', 'England');
以下查詢使用 AS 子句將 First_Name、Last_Name 值檢索為 name:
SELECT CONCAT(last_name,' ',first_name) AS name, Country FROM Players ORDER BY name;
輸出
上述 mysql 查詢生成以下輸出:
| name | Country |
|---|---|
| Anderson James | 英格蘭 |
| Dhawan Shikhar | 印度 |
| Jadeja Ravindra | 印度 |
| Kohli Virat | 印度 |
| Sharma Rohit | 印度 |
| Trott Jonathan | 南非 |
使用 ORDER BY 子句
ORDER BY 子句用於根據指定的列排列表的記錄,我們可以將此子句與 TABLE 語句一起使用,如下所示:
TABLE table_name ORDER BY column_name;
其中 table_name 是表名,column_name 是您需要根據其排列指定表的列名。
示例
假設我們使用 CREATE 語句建立了一個名為 EMP 的表,如下所示:
CREATE TABLE EMP ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT );
現在,讓我們使用 INSERT 語句在上面建立的表中插入值,如下所示:
INSERT INTO EMP VALUES
('Krishna', 'Sharma', 19, 'M', 2000),
('Raj', 'Kandukuri', 20, 'M', 7000),
('Ramya', 'Ramapriya', 25, 'F', 5000),
('Alexandra', 'Botez', 26, 'F', 2000);
以下查詢根據 FIRST_NAME 列排列並檢索 EMP 表的內容:
SELECT * FROM EMP ORDER BY FIRST_NAME;
輸出
以下是上述 mysql 查詢的輸出:
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
|---|---|---|---|---|
| Alexandra | Botez | 26 | F | 2000 |
| Krishna | Sharma | 19 | M | 2000 |
| Raj | Kandukuri | 20 | M | 7000 |
| Ramya | Ramapriya | 25 | F | 5000 |
使用 LIMIT 子句
在獲取記錄時,如果想限制特定數量的記錄,可以使用MySQL的LIMIT子句。此子句也可以與TABLE語句一起使用,如下所示:
SELECT * FROM table_name LIMIT lt_number OFFSET off_number;
其中,table_name是表名,lt_number是要檢索的記錄數,off_number是偏移量。
如果需要從第n條記錄(非第一條)開始限制記錄,可以使用OFFSET與LIMIT一起使用。
示例
以下查詢根據INCOME列對EMP表的記錄進行排序,並檢索前兩條記錄:
SELECT * FROM EMP ORDER BY INCOME LIMIT 2;
輸出
上述MySQL查詢將生成如下所示的輸出:
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
|---|---|---|---|---|
| Krishna | Sharma | 19 | M | 2000 |
| Alexandra | Botez | 26 | F | 2000 |
使用 UNION 子句
MySQL UNION子句用於組合兩個或多個SELECT/TABLE語句的結果,但不返回任何重複的行。
要使用UNION子句,每個SELECT語句必須:
- 選擇相同數量的列。
- 具有相同數量的列表達式。
- 具有相同的資料型別,並且
- 順序相同
以下是使用UNION子句(與TABLE語句一起使用)的語法:
TABLE table_name1 UNION TABLE table_name2;
示例
假設我們使用如下所示的CREATE語句建立了一個名為Student的表:
CREATE TABLE Student ( Name VARCHAR(20), age INT );
現在,讓我們向Student表中插入三條記錄:
INSERT INTO Student VALUES
('Krishna', 22),
('Raju', 20),
('Rahman', 21);
您可以如下所示驗證student表的內容:
SELECT * FROM Student;
輸出
以下是上述查詢的輸出:
| 姓名 | 年齡 |
|---|---|
| Krishna | 22 |
| Raju | 20 |
| Rahman | 21 |
假設我們有另一個表,行數相同(以及資料型別):
CREATE TABLE Staff ( Name VARCHAR(20), age INT );
現在,讓我們向Staff表中插入幾條記錄:
INSERT INTO Staff VALUES
('Amit', 35),
('Nanda', 33),
('Swathi', 39);
您可以如下所示驗證student表的內容:
SELECT * FROM Staff;
輸出
以下是上述查詢的輸出:
| 姓名 | 年齡 |
|---|---|
| Amit | 35 |
| Nanda | 33 |
| Swathi | 39 |
以下查詢使用JOIN子句組合上述兩個表:
SELECT * FROM STUDENT UNION SELECT * FROM STAFF;
輸出
上述 mysql 查詢生成以下輸出:
| 姓名 | 年齡 |
|---|---|
| Krishna | 22 |
| Raju | 20 |
| Rahman | 21 |
| Amit | 35 |
| Nanda | 33 |
| Swathi | 39 |
UNION 中的 ORDER BY 和 LIMIT
您也可以對兩個SELECT語句使用ORDER BY或LIMIT子句,並使用UNION將它們連線起來。為此,請將兩個SELECT語句放在括號中,然後使用UNION連線它們。
示例
(SELECT * FROM Staff ORDER BY age LIMIT 2) UNION (SELECT * FROM Student ORDER BY age LIMIT 2);
輸出
上述查詢將生成如下所示的輸出:
| 姓名 | 年齡 |
|---|---|
| Nanda | 33 |
| Amit | 35 |
| Raju | 20 |
| Rahman | 21 |
JOIN 子句
當您將資料分成兩個表時,您可以使用連線從這兩個表中獲取組合的記錄。
語法
以下是MySQL JOIN子句的語法:
escaped_table_reference: {
table_reference
| { JOIN table_reference }
}
示例
假設我們使用以下CREATE語句建立了一個名為EMPLOYEE的表:
CREATE TABLE EMPLOYEE( ID INT NOT NULL, FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT, CONTACT INT );
現在,讓我們向EMPLOYEE表中插入幾條記錄:
INSERT INTO Employee VALUES (101, 'Ramya', 'Rama Priya', 27, 'F', 9000, 101), (102, 'Vinay', 'Bhattacharya', 20, 'M', 6000, 102), (103, 'Sharukh', 'Sheik', 25, 'M', 8300, 103), (104, 'Sarmista', 'Sharma', 26, 'F', 10000, 104);
假設我們使用以下CREATE語句建立了另一個名為CONTACT的表:
CREATE TABLE CONTACT( ID INT NOT NULL, EMAIL CHAR(20) NOT NULL, PHONE LONG, CITY CHAR(20) );
現在,讓我們向CONTACT表中插入四條記錄:
INSERT INTO CONTACT (ID, EMAIL, CITY) VALUES (101, 'ramya@mymail.com', 'Hyderabad'), (102, 'vinay@mymail.com', 'Vishakhapatnam'), (103, 'sharukha@mymail.com', 'Pune'), (104, 'sarmista@mymail.com', 'Mumbai');
以下語句檢索組合這兩個表中的值的資料:
SELECT * from EMPLOYEE JOIN CONTACT ON EMPLOYEE.CONTACT = CONTACT.ID;
注意: 對於以下格式的輸出,您可以在上述查詢的末尾使用“\G”。
輸出
以下是上述查詢的輸出:
************* 1. row *************
ID: 101
FIRST_NAME: Ramya
LAST_NAME: Rama Priya
AGE: 27
SEX: F
INCOME: 9000
CONTACT: 101
ID: 101
EMAIL: ramya@mymail.com
PHONE: NULL
CITY: Hyderabad
************* 2. row *************
ID: 102
FIRST_NAME: Vinay
LAST_NAME: Bhattacharya
AGE: 20
SEX: M
INCOME: 6000
CONTACT: 102
ID: 102
EMAIL: vinay@mymail.com
PHONE: NULL
CITY: Vishakhapatnam
************* 3. row *************
ID: 103
FIRST_NAME: Sharukh
LAST_NAME: Sheik
AGE: 25
SEX: M
INCOME: 8300
CONTACT: 103
ID: 103
EMAIL: sharukha@mymail.com
PHONE: NULL
CITY: Pune
************* 4. row *************
ID: 104
FIRST_NAME: Sarmista
LAST_NAME: Sharma
AGE: 26
SEX: F
INCOME: 10000
CONTACT: 104
ID: 104
EMAIL: sarmista@mymail.com
PHONE: NULL
CITY: Mumbai
連線兩個查詢時,您可以使用AS子句在查詢中使用表的別名,如下所示:
SELECT t1.FIRST_NAME, t2.email FROM employee AS t1 INNER JOIN contact AS t2 ON t1.id = t2.id;
輸出
上述MySQL查詢產生以下輸出:
| FIRST_NAME | 郵箱 |
|---|---|
| Ramya | ramya@mymail.com |
| Vinay | vinay@mymail.com |
| Sharukh | sharukha@mymail.com |
| Sarmista | sarmista@mymail.com |
SELECT ... INTO 語句
使用SELECT ..... INTO語句,您可以儲存語句的結果。您可以將結果儲存到變數(或多個變數)、輸出檔案和轉儲檔案中,其中儲存單行。以下是此語句的語法:
SELECT select_expression INTO variable_list Or, SELECT select_expression INTO OUTFILE output_file Or, SELECT select_expression INTO DUMPFILE dump_file
示例
假設我們建立了一個名為emp的表,並使用以下查詢填充它:
CREATE TABLE Emp ( ID INT, Name VARCHAR(255), Salary INT, Location VARCHAR(255) );
現在,讓我們向Emp表中插入幾條記錄:
INSERT INTO Emp VALUES (101, 'Raju', 35000, 'Bangalore'), (102, 'Raman', 45000, 'Vishakhapatnam'), (103, 'Rahman', 55000, 'Hyderabad');
以下查詢從上面建立的表中檢索員工的姓名和位置,並將其儲存在變數中:
SELECT Name, Location INTO @name, @loc FROM Emp where ID =101;
您可以驗證變數的值,如下所示:
SELECT @name, @loc;
輸出
以下是上述 mysql 查詢的輸出:
| @name | @loc |
|---|---|
| Raju | Bangalore |
以下查詢檢索emp表的內容並將其儲存在本地文字檔案中:
SELECT Name, Location INTO OUTFILE 'Folder_Location/sample.txt' FROM Emp;
如果您驗證sample.txt檔案,您可以看到emp表的記錄,如下所示:
Sample.txt
Raju Bangalore Raman Vishakhapatnam Rahman Hyderabad