mysql⼦查询外部查什么内部查什么,MySQL⼦查询
MySQL⼦查询
MySQL中的⼦查询是⼀个查询,它嵌套在另⼀个SQL查询中,并与各种运算符⼀起嵌⼊SELECT,INSERT,UPDATE或DELETE语句。我们还可以将⼦查询与另⼀个⼦查询嵌套在⼀起。⼦查询称为内部查询,⽽包含⼦查询的查询称为外部查询。⾸先执⾏内部查询,将结果提供给外部查询,然后执⾏主/外部查询。 MySQL允许我们在任何地⽅使⽤⼦查询,但是必须在括号内将其关闭。 MySQL也将⽀持SQL标准⽀持的所有⼦查询形式和操作。
以下是使⽤⼦查询的规则:
⼦查询应始终⽤括号括起来。update是什么
如果主查询没有⽤于⼦查询的多个列,则⼦查询在SELECT命令中只能有⼀个列。
我们可以使⽤各种运算符与⼦查询,如>,
尽管可以在主查询中使⽤ORDER BY⼦句,但不能在⼦查询中使⽤它。
如果我们在集合函数使⽤⼦查询,则它不能⽴即包含在集合函数。
以下是使⽤⼦查询的优点:
⼦查询以结构化形式进⾏查询,使我们能够隔离语句的每个部分。
⼦查询提供了查询表中数据的替代⽅法。否则,我们需要使⽤复杂的联接和联合。
⼦查询⽐复杂的join或union语句更具可读性。
MySQL⼦查询语法
以下是在MySQL中使⽤⼦查询的基本语法:
MySQL⼦查询⽰例
让我们借助⽰例了解它。假设我们有⼀个名为“ employees”的表,其中包含以下数据:
表:员⼯
以下是⼀个简单的SQL语句,该语句返回其ID在⼦查询中匹配的员⼯详细信息:
该查询将返回以下输出:
具有⽐较运算符的MySQL⼦查询
运算符是⽤于对值进⾏⽐较,并返回结果,⽆论是真或假的运算符。下⾯的⽐较运算符在MySQL使⽤,=,<>,<=>,等,我们可以之前或运算符返回单值后使⽤⼦查询。返回的值可以是算术表达式或列函数。在此之后,SQL与所述⽐较运算符者的另⼀侧上的值的⼦查询的结果进⾏⽐较。以下⽰例对其进⾏了更清晰的说明:
以下是⼀个简单的SQL语句,该语句在⼦查询的帮助下返回收⼊超过350000的员⼯明细:
此查询⾸先执⾏⼦查询,该⼦查询返回收⼊> 350000的雇员ID。其次,主查询将返回雇员其雇员ID在⼦查询返回的结果集中的所有详细信息。
执⾏该语句后,我们将获得以下输出,在这⾥我们可以看到收⼊> 350000的员⼯明细。
让我们来看看另⼀个⽐较运算符,如等式(=)的例⼦到使⽤⼦查询与最⾼收⼊员⼯的详细信息。
它将提供输出,在这⾥我们可以看到两名收⼊最⾼的员⼯详细信息。
使⽤IN或NOT-IN运算符的MySQL⼦查询
如果⼦查询产⽣多个值,则需要对WHERE⼦句使⽤IN或NOT IN运算符。假设我们有⼀个名为“ Student”和“ Student2”的表,其中包含以下数据:
表:学⽣
表:Student2
以下带有NOT IN运算符的⼦查询从两个表中返回不属于洛杉矶市的学⽣详细信息,如下所⽰:
执⾏后,我们可以看到结果包含不属于洛杉矶市的学⽣详细信息。
FROM⼦句中的MySQL⼦查询
如果我们在FROM⼦句中使⽤⼦查询,则MySQL将从⼦查询返回的输出⽤作临时表。我们将此表称为派⽣表,内联视图或实例化⼦查询。
以下⼦查询返回订单表中的最⼤,最⼩和平均项⽬数:
它将给出如下输出:
MySQL相关⼦查询
MySQL中的相关⼦查询是依赖于外部查询的⼦查询。它使⽤外部查询中的数据或包含对⽗查询的引⽤,该⽗查询也出现在外部查询中。MySQL从外部查询的每⼀⾏对其进⾏⼀次评估。
在上⾯的查询中,我们选择⼀个雇员名称和城市,其收⼊⾼于每个城市中所有雇员的平均收⼊。
⼦查询针对指定表的每个城市执⾏,因为它将针对每⼀⾏进⾏更改。因此,平均收⼊也会改变。然后,主查询过滤收⼊⾼于⼦查询平均收⼊的员⼯明细。
具有EXISTS或NOT EXISTS的MySQL⼦查询
EXISTS运算符是⼀个布尔运算符,它返回true或false。它与⼦查询⼀起使⽤,并检查⼦查询中数据的存在。如果⼦查询完全返回任何记录,则此运算符返回true。否则,它将返回false。⽤于否定的NOT EXISTS运算符在⼦查询不返回任何⾏时给出真值。否则,它返回false。 EXISTS和NOT EXISTS都与关联⼦查询⼀起使⽤。以下⽰例更清楚地说明了这⼀点。假设我们有⼀个表customer和order,其中包含如下数据:
下⾯的SQL语句使⽤EXISTS运算符查已下订单的客户的姓名,职业和年龄。
该语句使⽤NOT EXISTS运算符,该运算符返回未下订单的客户详细信息。
我们可以看到以下输出以了解上述查询结果。
要阅读有关EXISTS运算符的更多信息,请单击此处。
MySQL ROW⼦查询
它是⼀个⼦查询,返回单⾏,我们可以在其中获得多个列值。我们可以使⽤以下运算符⽐较⾏⼦查询=,>, =,<=,<>,!=,<=>。让我们看下⾯的例⼦:
如果给定的⾏具有cust_id,职业值等于第⼀张表中任何⾏的order_id,order_date值,则WHERE表达式为TRUE,并且每个查询都返回这些第⼀张表⾏。否则,表达式为FALSE,查询将⽣成⼀个空集,如下图所⽰:
具有ALL,ANY和SOME的MySQL⼦查询
,⽐较运算符之后的任何或SOME我们可以⽤它后跟关键字ALL的⼦查询。以下是将⼦查询与ALL,ANY或SOME⼀起使⽤的语法:
ALL关键字将值与⼦查询返回的值进⾏⽐较。因此,如果⼦查询返回的所有值的⽐较结果为TRUE,则返回TRUE。如果⼦查询返回的任何值的⽐较为TRUE,则ANY关键字将返回TRUE。 ANY和SOME关键字是相同的,因为它们是彼此的别名。以下⽰例对其进⾏了更清晰的说明:
我们将获得如下输出:
如果我们使⽤ALL代替ANY,则当⼦查询返回的列中的ALL值的⽐较为TRUE时,它将返回TRUE。例
如:
我们可以看到如下输出:
相关⽂章:Python MySQL-更新表 Python MySQL-更新表 UPDATE对 […]...
MySQL版本 MySQL版本 版本控制是在开发和发布时将唯⼀的版本名称或编号分类到唯⼀的⼀组软件程序的过程。表⽰软件或程序的[…]...
MySQL显⽰/列表数据库 MySQL显⽰/列出数据库 当我们使⽤MySQL服务器时,通常的任务是显⽰或列出数据库,显⽰特定数据库中的表以 […]...
MySQL在重复密钥更新上插⼊ MySQL在重复密钥更新上插⼊ Insert on Duplicate Key Update语句是MySQL中 […]...
MySQL ORDER BY⼦句 MySQL ORDER BY⼦句 MYSQL ORDER BY⼦句⽤于按升序或降序对记录进⾏排序。 句法:...
MySQL BETWEEN条件 MySQL BETWEEN条件 MYSQL BETWEEN条件指定如何从特定范围内的表达式检索值。它与SELE […]...
MySQL主键 MySQL主键 MySQL主键是字段的单个或组合,⽤于唯⼀地标识表中的每个记录。如果该列包含主键约束,则它不能 […]...
MySQL导出和导⼊数据库 MySQL导出和导⼊数据库 我们如何在MySQL中导出和导⼊数据库? MySQL中的数据库导出和导⼊是将数据从 […]...

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。