SQL子查询– SQL中的嵌套查询
时间:2020-02-23 14:32:35 来源:igfitidea点击:
在现实世界中,有时候我们需要特定的数据集,但是我们没有获取数据集的确切细节。
在这种情况下,我们尝试从现有的可用信息集中获取信息。
为了实现这样的目标,我们使用SQL子查询。
SQL子查询
SQL子查询是嵌套在另一个查询中的查询。
大多数子查询与查询的WHERE子句一起使用。
SQL子查询规则
子查询可以与不同的SQL子句一起使用,例如WHERE子句,HAVING子句和FROM子句。
子查询也可以与SELECT,UPDATE,INSERT和DELETE语句一起使用。
执行顺序从子查询开始,然后是主查询。
子查询必须用括号括起来。
即使主查询可以使用ORDER BY,也不能在子查询中使用ORDER BY命令。
GROUP BY命令可用于执行与子查询中的ORDER BY相同的功能。当子查询与比较运算符一起使用时,它应位于比较运算符的右侧。
SQL子查询语法
SELECT column_name FROM table_name WHERE column_name OPERATOR (SELECT column_name FROM table_name WHERE condition);
OPERATOR之后在圆括号内的查询是子查询,而在圆括号外的查询是主查询。
SQL子查询示例
让我们考虑以下两个表,以便更好地理解子查询。
学生
Roll No | Name | Age | Gender |
---|---|---|---|
1 | Amit | 12 | M |
2 | John | 13 | M |
3 | Diana | 14 | F |
4 | Henry | 15 | M |
类
Class | Section | Roll No |
---|---|---|
6 | A | 1 |
7 | A | 2 |
8 | A | 3 |
9 | B | 4 |
请在下面的MySQL查询中查找以创建表并插入数据。
CREATE TABLE `student` ( `RollNo` INT NOT NULL, `Name` VARCHAR(45) NULL, `Age` INT NULL, `Gender` VARCHAR(45) NULL, PRIMARY KEY (`RollNo`)); CREATE TABLE `class` ( `ClassNo` INT NOT NULL, `Section` VARCHAR(45) NULL, `RollNo` INT NULL, PRIMARY KEY (`ClassNo`)); INSERT INTO `student` (`RollNo`, `Name`, `Age`, `Gender`) VALUES (1, 'Amit', 12, 'M'), (2, 'John', 13, 'M'), (3, 'Diana', 14, 'F'), (4,'Henry', 15,'M'); INSERT INTO `class` (`ClassNo`, `Section`, `RollNo`) VALUES (6, 'A', 1), (7, 'A', 2), (8, 'A', 3), (9,'B', 4);
让我们尝试研究一些使用SQL子查询的示例。
- SQL子查询,用于获取" A"部分中所有学生的姓名
SELECT Name FROM student WHERE RollNo IN (SELECT RollNo FROM class WHERE section = 'A')
Name |
---|
Amit |
John |
Diana |
带IN运算符的SQL SubQuery
- 类大于7的SQL子查询
SELECT * FROM student WHERE RollNo IN (SELECT RollNo FROM class WHERE ClassNo>7)
RollNo | Name | Age | Gender |
---|---|---|---|
3 | Diana | 14 | F |
4 | Henry | 15 | M |