mysql子查询(单行子查询,多行子查询,多列子查询)

 更新时间:2023年06月27日 15:19:46   作者:星星落在海那边  
本文主要介绍了mysql子查询(单行子查询,多行子查询,多列子查询),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

子查询使用规则:

  • 子查询放在圆括号中
  • 子查询放在比较条件右边(非强制)
  • 子查询中不需要ORDER BY 子句
  • 在单行子查询中使用单行运算符,在多行子查询中用多行运算符。
  • 单行运算符:子查询结果只有一个:< > = <= >= !=
  • 多行子查询:子查询结果是单列多行:in , any,all
  • 多列子查询:子查询为多列,一定要在FROM后作为表,且一定要取别名,否则无法访问这张表中的字段。

创建初始表

CREATE TABLE tbl1 (num1 INT NOT NULL);
CREATE TABLE tbl2 (num2 INT NOT NULL);
INSERT INTO tbl1 VALUES(1),(5),(13),(27);
INSERT INTO tbl2 VALUES(6),(14),(11),(20);

ANY SOME 关键字的子查询

返回tbl2的所有num2列,将tbl1中的num值与之进行比较,只要大于num2的任意一值,即为符合条件的结果。

SELECT num1 FROM tbl1 
WHERE num1 > SOME(SELECT num2 FROM tbl2);
SELECT num1 FROM tbl1 
WHERE num1 > ANY (SELECT num2 FROM tbl2);

ALL 关键字

SELECT num1 FROM tbl1 
WHERE num1 > ALL (SELECT num2 FROM tbl2);

新建一个orderitems表

CREATE TABLE orderitems(
o_num INT NOT NULL,
o_item INT NOT NULL,
f_id CHAR(10) NOT NULL,
quantity INT NOT NULL,
item_price DECIMAL(8,2) NOT NULL,
PRIMARY KEY(o_num,o_item)
);

填入数据

INSERT INTO orderitems(o_num,o_item,f_id,quantity,item_price)
VALUES(3001,1,'a1',10,5.2),
(3001,2,'b2',3,7.6),
(3001,3,'bs1',5,11.2),
(3001,4,'bs2',15,9.2),
(3002,1,'b3',2,20.0),
(3003,1,'c0',100,10),
(3004,1,'o2',50,2.50),
(3005,1,'c0',5,10),
(3005,2,'b1',10,8.99),
(3005,3,'a2',10,2.2),
(3005,4,'m1',5,14.99);

带 IN 关键字 的子查询

#在orderitem表中查询f_id为c0 的订单号,并根据订单号查询具有订单号的客户c_id,SQL语句如下:

SELECT c_id FROM orders
WHERE o_num IN
(SELECT o_num FROM orderitems WHERE f_id = 'c0');

NOT IN

SELECT c_id FROM orders
WHERE o_num NOT IN
(SELECT o_num FROM orderitems WHERE f_id = 'c0');

连接查询

(也可以解决这个问题,但有空值,但子查询更容易阅读和编写)

SELECT c_id 
FROM orderitems left JOIN orders
ON orders.o_num = orderitems.o_num 
AND orderitems.f_id = 'c0';

多列子查询

在 orderitems 表中查询 f_id 为 c0 的订单号的所有信息,并根据订单号查询具有订单号的客户的所有信息,SQL语句如下:

SELECT * FROM orders ord ,(SELECT * FROM orderitems AS o WHERE f_id&#61;&#39;c0&#39;) ite WHERE ord.o_num&#61;ite.o_num ;

*注意:子查询结果为多列,一定在FROM后做为表,且一定要取别名,否则无法访问这张表中的字段。

带比较运算符的子查询

#在suppliers表中查询s_city等于‘tianjin’的供应商s_id,然后在fruits表中,查询所有非该供应商供应的水果种类名称。

SELECT s_id,f_name FROM fruits f
WHERE f.s_id !=
(SELECT s1.s_id 
FROM suppliers AS s1 WHERE s1.s_city = 'tianjin');

带EXISTS 关键字的子查询

EXISTS关键字后是任意一个子查询:

若至少返回一行,则结果为True,此时外层将进行查询。

若没有返回任何行,则返回的结果为false,此时外层语句将不进行查询。
NOT EXISTSEXISTS 的使用方法相同,返回的结果相反。
查询suppliers中是否存在s_id 的供应商,若存在,则查询fruits表中所有记录:

SELECT * FROM fruits 
WHERE EXISTS 
(SELECT s.s_id FROM suppliers AS  s WHERE s.s_id = 107);

返回结果:

EXISTS也可以和条件表达式一起使用

例:查询suppliers中是否存在s_id 的供应商,若存在,则查询fruits表中f_price>10.20的记录:

SELECT * FROM fruits 
WHERE f_price >10.20 AND EXISTS
 (SELECT s.s_id FROM suppliers AS  s WHERE s.s_id = 107);

 到此这篇关于mysql子查询(单行子查询,多行子查询,多列子查询)的文章就介绍到这了,更多相关MySQL子查询 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ubuntu系统中安装mysql5.6(通过二进制)

    ubuntu系统中安装mysql5.6(通过二进制)

    今天工作中需要对一台ubantu的系统安装mysql,因为以前一直使用的是centos,虽然它也是类unix但是和redhat或centos命令上还是有点差别。所以通过网上查阅资料,终于安装成功了,现在将步骤分享给大家,有需要的朋友们可以参考借鉴。
    2016-10-10
  • MySQL复制优点、原理详解

    MySQL复制优点、原理详解

    本篇文章主要给大家详细讲解了MySQL复制优点以及Mysql复制的原理知识,对此有兴趣的朋友学习下。
    2018-02-02
  • MySQL中INSERT INTO的具体使用

    MySQL中INSERT INTO的具体使用

    INSERT INTO 是 MySQL 数据库中非常重要的一种 SQL 命令,用于将新行插入到表中,本文主要介绍了MySQL中INSERT INTO的具体使用,感兴趣的可以了解一下
    2024-03-03
  • CentOS 7中源码安装MySQL 5.7.6+详细教程

    CentOS 7中源码安装MySQL 5.7.6+详细教程

    最近在CentOS 7中源码安装MySQL 5.7.6+,发现MySQL5.7.6+以后的安装方式真的与以前版本的MySQL安装方式大大的不同呀。不自己安装一把,你都不知道不同之处在哪,下面这篇文章是通过自己的安装过程总结的一篇安装教程,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Mysql中调试存储过程最简单的方法

    Mysql中调试存储过程最简单的方法

    以前同事告诉我用临时表插入变量数据来查看,但是这种方法过于麻烦,而且Mysql没有比较好的调试存储过程的工具。今天google了下发现可以用select + 变量名的方法来调试
    2021-06-06
  • MYSQL如何查看操作日志详解

    MYSQL如何查看操作日志详解

    任何一种数据库中都有各种各样的日志,下面这篇文章主要给大家介绍了关于MYSQL如何查看操作日志的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 使用存储过程实现循环插入100条记录

    使用存储过程实现循环插入100条记录

    本节主要介绍了使用存储过程实现循环插入100条记录的具体实现,需要的朋友可以参考下
    2014-07-07
  • MySQL中order by在子查询中失效的问题解决方案

    MySQL中order by在子查询中失效的问题解决方案

    这篇文章主要介绍了MySQL中order by在子查询中失效的问题解决,文中补充介绍了Mysql 5.7版本导致的子查询order by排序无效问题的探究,需要的朋友可以参考下
    2023-07-07
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    这篇文章给大家介绍关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)的相关资料,还给大家收集些关于MySQL会出现中文乱码原因常见的几点,小伙伴快来看看吧
    2015-11-11
  • linux下安装mysql简单的方法

    linux下安装mysql简单的方法

    这篇文章主要介绍了 linux下安装mysql简单的方法,需要的朋友可以参考下
    2017-08-08

最新评论