zoukankan      html  css  js  c++  java
  • 在MySQL中使用子查询和标量子查询的基本用法

    一、MySQL 子查询
      子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用。MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性。
    子查询没有固定的语法,一个子查询的例子如下:

    SELECT * FROM article WHERE uid IN (SELECT uid FROM user WHERE status=1)//取status=1时的uid子集

      对应的两个数据表如下:
      article 文章表:

      

      user 用户表:

      

      查询返回结果如下所示:

      

      在该例子中,首先通过子查询语句查询出所有 status=1 的 uid,实际的查询类似于:

    SELECT * FROM article WHERE uid IN(1,2)

    二、MySQL 标量子查询
      标量子查询是指子查询返回的是单一值的标量,如一个数字或一个字符串,也是子查询中最简单的返回形式。
      一个标量子查询的例子如下:

    SELECt * FROM article WHERE uid = (SELECT uid FROM user WHERE status=1 ORDER BY uid DESC LIMIT 1)

      在该例子中,子查询语句:SELECT uid FROM user WHERE status=1 ORDER BY uid DESC LIMIT 1

      返回的是单一的数字(如 2),实际的查询语句为:SELECT * FROM article WHERE uid = 2

    1、使用子查询进行比较:可以使用 = > < >= <= <> 这些操作符对子查询的标量结果进行比较,通常子查询的位置在比较式的右侧:

    SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2)

      提示:对于采用这些操作符之一进行的比较,子查询必须返回一个标量。唯一的例外是 = 可以和行子查询同时使用。

    2、子查询与表连接:子查询与表连接很类似,可思考2种的互换写法,有助于理解

      在很多情况下,子查询的效果与 JOIN 表连接很类似,但一些特殊情况下,是必须用子查询而不能用表连接的,如:

    SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2)
    SELECT * FROM article AS t WHERE 2 = (SELECT COUNT(*) FROM article WHERE article.uid = t.uid)

      该例子要找出用户发表了 2 篇文章的所有文章记录。对应的结果如下:

     

  • 相关阅读:
    转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)
    修改Apache的最大连接数
    正向代理与反向代理的区别【Nginx读书笔记】
    mysql加单引号和不加单引号的性能比较
    mysql保存数据提示1366 Incorrect string value: ‘xF0x9Fx98x8AxF0x9F…’ 解决
    Mysql外键约束设置使用方法
    MYSQL分库分表和不停机更改表结构
    Hive SQL 常用日期
    CountDownLatch学习
    Exchanger学习
  • 原文地址:https://www.cnblogs.com/goloving/p/7599371.html
Copyright © 2011-2022 走看看