最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL中列子查询与行子查询操作的学习教程

来源:动视网 责编:小采 时间:2020-11-09 20:52:43
文档

MySQL中列子查询与行子查询操作的学习教程

MySQL中列子查询与行子查询操作的学习教程:MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用 MySQL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回。 一个列子查询的例子如下: SELECT * FROM article WHERE uid IN(SEL
推荐度:
导读MySQL中列子查询与行子查询操作的学习教程:MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用 MySQL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回。 一个列子查询的例子如下: SELECT * FROM article WHERE uid IN(SEL


MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用
MySQL 列子查询
列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回。
一个列子查询的例子如下:

SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1)

列子查询中使用 IN、ANY、SOME 和 ALL 操作符

由于列子查询返回的结果集是 N 行一列,因此不能直接使用 = > < >= <= <> 这些比较标量结果的操作符。在列子查询中可以使用 IN、ANY、SOME 和 ALL 操作符:

  • IN:在指定项内,同 IN(项1,项2,…)。
  • ANY:与比较操作符联合使用,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE 。
  • SOME:ANY 的别名,较少使用。
  • ALL:与比较操作符联合使用,表示与子查询返回的所有值比较都为 TRUE ,则返回 TRUE 。
  • 下面是原始数据表:

    table1:

    s1
    2
    10
    

    table2:

    s2
    5
    12
    20
    

    ANY 操作符
    ANY 关键字必须接在一个比较操作符的后面,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE 。一个 ANY 例子如下:
    SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2)
    查询返回结果如下所示:

    s1
    10
    

    在子查询中,返回的是 table2 的所有 s2 列结果(5,12,20),然后将 table1 中的 s1 的值与之进行比较,只要大于 s2 的任何值即表示为 TRUE,符合查询条件。
    IN 是 = ANY 的别名,二者相同,但 NOT IN 的别名却不是 <> ANY 而是 <> SOME。
    特殊情况
    如果 table2 为空表,则 ANY 后的结果为 FALSE;
    如果子查询返回如 (NULL,NULL,NULL) 列为空的结果,则 ANY 后的结果为 UNKNOWN 。
    ALL 操作符
    ALL 关键字必须接在一个比较操作符的后面,表示与子查询返回的所有值比较为 TRUE ,则返回 TRUE 。一个 ALL 例子如下:
    SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)
    该查询不会返回任何结果,因为 s1 中没有比 s2 所有值都大的值。
    当然在该例子查询中,返回了 s2 的所有值,您可以在该子查询中添加任何条件以限制返回的查询结果而无需全部返回。
    NOT IN 是 <> ALL 的别名,二者相同。
    特殊情况
    如果 table2 为空表,则 ALL 后的结果为 TRUE;
    如果子查询返回如 (0,NULL,1) 这种尽管 s1 比返回结果都大,但有空行的结果,则 ALL 后的结果为 UNKNOWN 。
    注意:对于 table2 空表的情况,下面的语句均返回 NULL:

    SELECT s1 FROM table1 WHERE s1 > (SELECT s2 FROM table2)
    SELECT s1 FROM table1 WHERE s1 > ALL (SELECT MAX(s1) FROM table2)
    

    MySQL 行子查询
    行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集。
    一个行子查询的例子如下:

    SELECT * FROM table1 WHERE (1,2) = (SELECT column1, column2 FROM table2)
    

    在该例子中,在保证子查询返回单一行数据的前提下,如果 column1=1 且 column2=2 ,则该查询结果为 TRUE。
    MySQL 行构造符
    在上面的例子中,WHERE 后面的 (1,2) 被称为行构造符,也可以写作 ROW(1,2)。行构造符通常用于与对能返回两个或两个以上列的子查询进行比较。
    MySQL 行子查询实例
    下面是用于例子的两张原始数据表:
    article 表:

    blog 表:

    SQL 如下:

    SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)
    

    查询返回结果如下所示:

    在该行子查询例子中,将 article 表 title,content,uid 字段逐一与子查询返回的行记录作比较,如果相等则列出这些相等的记录(理论上可能不止一条)。

    您可能感兴趣的文章:

  • mysql关联子查询的一种优化方法分析
  • MySQL中的基本查询语句学习笔记
  • 如何解决PHP使用mysql_query查询超大结果集超内存问题
  • PHP MYSQL实现登陆和模糊查询两大功能
  • MySQL查询优化的5个实用技巧
  • MySQL嵌套查询实例详解
  • MySQL中表子查询与关联子查询的基础学习教程
  • MySQL的子查询中FROM和EXISTS子句的使用教程
  • 在MySQL中使用子查询和标量子查询的基本操作教程
  • MySQL切分查询用法分析
  • 文档

    MySQL中列子查询与行子查询操作的学习教程

    MySQL中列子查询与行子查询操作的学习教程:MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用 MySQL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回。 一个列子查询的例子如下: SELECT * FROM article WHERE uid IN(SEL
    推荐度:
    标签: mysql mys 子查询
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top