MySQL的子查询中FROM和EXISTS子句的使用教程

MySQL的子查询中FROM和EXISTS子句的使用教程,第1张

FROM

子查询

FROM

子句中的子查询

MySQL

FROM

子查询是指

FROM

的子句作为子查询语句,主查询再到子查询结果中获取需要的数据。FROM

子查询语法如下:

SELECT

...

FROM

(subquery)

AS

name

...

子查询会生成一个临时表,由于

FROM

子句中的每个表必须有一个名称,因此

AS

name

是必须的。FROM

子查询也称为衍生数据表子查询。

FROM

子查询实例

table1:

s1

s2

1

5

2

12

3

20

FROM

子查询

SQL

如下:

SELECT

s1,s2

FROM

(SELECT

s1,

s2*2

AS

s2

FROM

table1)

AS

temp

WHERE

s1

>

1

查询返回结果如下所示:

s1

s2

2

24

3

40

提示

MySQL

FROM

子句中的子查询可以返回标量、列、行或表,但不能为有关联的子查询。

MySQL

子查询

EXISTS

NOT

EXISTS

MySQL

EXISTS

NOT

EXISTS

子查询

MySQL

EXISTS

NOT

EXISTS

子查询语法如下:

SELECT

...

FROM

table

WHERE

EXISTS

(subquery)

该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE

FALSE)来决定主查询的数据结果是否得以保留。

MySQL

EXISTS

子查询实例

下面以实际的例子来理解

EXISTS

子查询。下面是原始的数据表:

article

文章表:

user

用户表:

我们要查出

article

表中的数据,但要求

uid

必须在

user

表中存在。SQL

语句如下:

SELECT

*

FROM

article

WHERE

EXISTS

(SELECT

*

FROM

user

WHERE

article.uid

=

user.uid)

返回查询结果如下:

从语句执行结果可以看出,article

表中第

4

条记录没有被保留,原因就是该条记录的数据在子查询中返回的结果是

FALSE

当上面的

SQL

使用

NOT

EXISTS

时,查询的结果就是

article

表中

uid

不存在于

user

表中的数据记录。

提示

EXISTS

(subquery)

只返回

TRUE

FALSE,因此子查询中的

SELECT

*

也可以是

SELECT

1

或其他,官方说法是实际执行时会忽略

SELECT

清单,因此没有区别。

EXISTS

子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担忧效率问题,可进行实际检验以确定是否有效率问题。

EXISTS

子查询往往也可以用条件表达式、其他子查询或者

JOIN

来替代,何种最优需要具体问题具体分析。

其实mysql中用的是 and 或 or 关键字,如下,

select * from tab where (name=‘张三’ or name=‘李四’)and age <>''

希望对你有帮助

出现1064一般都属于语法错误的情况。你试着把表名的单引号和把tinyint的长度去掉。DATE值的格式是'YYYY-MM-DD'。按照标准的SQL,不允许其他格式。日期支持的范围为’1000-01-01’到’9999-12-31’。但从表面上看,你写的这个SQL语句不存在错误,你仔细检查有没有多写了一个符号之类的。还要检查语句与语句间有没有空格。例如你这么写就是错误的:ENGINE=InnoDBDEFAULTCHARSET=gbkAUTO_INCREMENT=1CREATETABLEmessage(idtinyintnotnullauto_increment,uservarchar(25)notnull,titlevarchar(50)notnull,contenttinytextnotnull,lastdatedatenotnulldefault'0000-00-00',primarykey(id))ENGINE=InnoDBDEFAULTCHARSET=gbkAUTO_INCREMENT=1希望能帮助到你,欢迎追问,尽我所能为你解答。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/7184742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存