Mysql 简明教程
MySQL - SubQuery
MySQL 子查询,也称为内部查询或嵌套查询,是另一个查询中的查询。它允许您根据另一个查询的结果从一张或多张表中检索数据。子查询可用于 SQL 语句的各个部分,包括 SELECT、INSERT、UPDATE 和 DELETE。
Subquery with the SELECT Statement
SELECT 语句中的子查询用于根据从子查询检索的值过滤主查询的结果。
Syntax
以下是一个 SELECT 语句中子查询的基本语法 −
SELECT column1, column2, ...
FROM table1
WHERE columnN operator
(SELECT column_name FROM table2 WHERE condition);
Example
首先,我们使用以下查询创建一个名为 CUSTOMERS 的表 -
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(25) NOT NULL,
SALARY DECIMAL(18, 2),
PRIMARY KEY(ID)
);
现在,使用 INSERT 语句将值插入到上面创建的表中,如下所示 -
INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );
CUSTOMER 表显示如下 -
以下查询检索出 ID 与同一表中 ID 匹配的 CUSTOMERS 表中的所有客户的薪水 -
SELECT SALARY FROM CUSTOMERS
WHERE ID IN
(SELECT ID FROM CUSTOMERS);
Subquery with the INSERT Statement
我们还可以在 MySQL 中使用插入语句和子查询。插入语句将使用从子查询返回的数据插入到另一张表中。
Syntax
以下是 INSERT 语句中子查询的基本语法 -
INSERT INTO target_table (column1, column2, ...)
SELECT source_column1, source_column2, ...
FROM source_table
WHERE condition;
Example
在对 INSERT 语句执行子查询之前,让我们创建一个名为 "CUSTOMERS_BKP" 的表,其结构与 CUSTOMERS 表相似 -
CREATE TABLE CUSTOMERS_BKP(
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(25) NOT NULL,
SALARY DECIMAL(18, 2),
PRIMARY KEY(ID)
);
现在,让我们使用以下查询将 CUSTOMERS 表中的所有记录插入到 CUSTOMERS_BKP 表中 -
INSERT INTO CUSTOMERS_BKP
SELECT * FROM CUSTOMERS
WHERE ID IN (SELECT ID FROM CUSTOMERS);
Subquery with Comparison Operator
MySQL 子查询与比较运算符允许我们在另一个查询中使用一个查询,并使用比较运算符将其结果与外部查询进行比较。
Syntax
以下是带比较运算符的子查询的基本语法 -
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE] .....)
Subquery with IN or NOT-IN Operator
MySQL 子查询与 IN/NOT-IN 运算符用于根据值是否从一个查询匹配或不匹配另一个查询中的值来过滤数据 -
-
IN 匹配列表中的任何值
-
NOT-IN 排除列表中的任何值。
Example
以下查询从 CUSTOMERS 表中检索出所有记录,该记录中的 ADDRESS is not "Hyderabad",方法是将其与 CUSTOMERS_BKP 表中的地址进行比较 -
SELECT * FROM CUSTOMERS
WHERE ADDRESS NOT IN (
SELECT ADDRESS FROM CUSTOMERS_BKP WHERE ADDRESS = "Hyderabad");