- 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