子查询:单行子查询,多行子查询,多列子查询

article/2025/9/27 22:10:38

#子查询

子查询使用规则:

  • 子查询放在圆括号中
  • 子查询放在比较条件右边(非强制)
  • 子查询中不需要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='c0') ite 
WHERE ord.o_num=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);

在这里插入图片描述


http://chatgpt.dhexx.cn/article/ekCNoaMu.shtml

相关文章

ora-01427批量更新表的时候提示单行子查询返回多个行

这是刚开始的更新语句&#xff1a;根据AMCARD表的ACCTCOMPID和ACCTDEPID字段关联LSBMZD表的LSBMZD_DWBH和LSBMZD_BMBH,得到相对于的LSBMZD_ID&#xff0c;然后根据这个LSBMZD_ID列匹配HRORGINFO表的MAPPINGORG字段&#xff0c;最终得到HRORGINFO表的NM字段&#xff0c;将AMCARD…

update时 单行子查询返回多个行 SQL 错误 [1427] 处理方案

我遇到此错误是在多表关联update的 UPDATE EDASYS.CELL_COMPONENT_T A SET A.ARRAY_GLASS_ID (SELECT M.ARRAY_GLASS_ID FROM EDASYS.CELL_ARRAY_CF_MAPPING_T M WHERE M.CF_GLASS_ID A.COMPONENT_ID AND rownum < 2) WHERE EXISTS (SELECT 1 FROM EDASYS.CELL_ARR…

13.子查询返回多行多列的数据

假设有下面两张表: 部门表dept 雇员表emp 列出公司各个部门的经理的姓名、薪金、部门名称、部门人数、部门平均工资。 步骤1&#xff1a;查找每个部门经理的姓名和薪金。 select ename,sal from emp where jobMANAGER; 步骤2&#xff1a;连接dept表&#xff0c;查询部门名称。…

oracle单行子查询返回多个行 order by,请教单行子查询返回多个行的问题

原帖由 风铃中の鬼 于 2009-9-23 11:10 发表 写问题的时候突然蹦出来个工作..拖延了下时间..具体问题在上面3楼 我当初提供给你的语句没有问题&#xff01; 测试如下&#xff01; SQL> select * from tab_temp; TAB_ID PRO_ID NET_ID ---------- ---------- ------…

oracle单行子查询返回多个行 order by,单行子查询返回多个行 Issue分析求助

with order_base as --获取订单基础情况 ( select ou.order_key order_key, ou.order_quantity_i, ood.dispatch_time_t, ou.part_number_s, I032ZZ01 pline_name_s from order_uv ou left join at_as_om_orderdispatchstatus ood on ou.order_key ood.order_54 union all sel…

【转】ORA-01427: 单行子查询返回多个行,连表查询去重

转自&#xff1a;http://blog.chinaunix.net/uid-23 实例1 有人问题我一个问题&#xff0c;情况如下&#xff1a;他要用根据divide_act_channel_day的new_amount字段去更新divide_stat的new_amount字段。两张表关联的条件:daylog_time,channelchannel--SQL如下&#xff1a;up…

关于子查询报错返回多行数据

项目场景&#xff1a; 子查询报错返回多行数据 问题描述 在查询数据时有两个功能都在操作同一个表,导致子查询查询数据是报错子查询返回多调数据 原因分析&#xff1a; 我遇到的问题所分析是因为两个功能操作同一个表,将查询条件字段改变了,经查询是该字段本来一对一查询更改…

ORA_01427 单行子查询返回多个行

同事反馈线上生产环境在统计报表数据时报错&#xff0c;测试环境没问题&#xff0c;对比代码相同的情况下&#xff0c;将异常锁定在数据问题上面&#xff0c;于是申请了服务器日志查询&#xff0c;发现了ORA_01427&#xff08;单行子查询返回多个行&#xff09;的报错&#xff…

SQL学习之子查询,基于Oracle下的HR用户(四)

六、 子查询 1 子查询介绍 1.1 什么是子查询 子查询是一个 SELECT 语句&#xff0c;它是嵌在另一个 SELECT 语句中的子句。 可以用组合两个查询的方法解决这个问题&#xff0c;放置一个查询到另一个查询中。内查询或子查询返回一个值给外查询或主查询。使用一个子查询相当于执行…

ORA-01427:单行子查询返回多个行

今天sql进行查询时&#xff0c;执行sql语句弹出单行子查询返回多个行的错误提示 经过整改解决了这个问题 1.错误产生原因 原sql语句(为方便理解进行简化)&#xff1a; select * from 表a a where a.name (select b.name from 表b b where b.name 张三 ) 原本想通过&#…

lwl,lwr

lwl,lwr,swl,swr中的指令后缀r(right),l(left)都是相对寄存器而言&#xff0c;load操作是把取到的部分数据&#xff0c;置入寄存器的left或者right&#xff0c;store操作时将寄存器中的数据的 left或者right部分写入目标地址。无论时大端和小端寄存器的格式都是固定的&#xff…

1.9 程序示例--局部加权线性回归-机器学习笔记-斯坦福吴恩达教授

程序示例–局部加权线性回归 现在&#xff0c;我们在回归中又添加了 JLwr() 方法用于计算预测代价&#xff0c;以及 lwr() 方法用于完成局部加权线性回归&#xff1a; # coding: utf-8 # linear_regression/regression.py# ...def JLwr(theta, X, y, x, c):"""…

LWE和RLWE问题学习

LWE概念 又称误差还原&#xff0c;容错学习问题&#xff0c;即已知一个矩阵 A A A以及一个向量&#xff0c;求解 b ^ A x e \hat{b}A xe b^Axe 这里 e e e是一个固定数值范围内随机采集的一个随机噪音向量&#xff0c;所以这个问题就转化为通过 A A A和 b ^ \hat{b} b^来还…

同态加密简介

同态加密概述 基本概念 同态加密&#xff08;Homomorphic Encryption,HE&#xff09;指将原始数据经过同态加密后&#xff0c;对密文进行特定的运算&#xff0c;得到的密文计算结果在进行同态解密后的得到的明文等价于原始明文数据直接进行相同计算所得到的数据结果。 历史与…

机器学习笔记(一)-局部加权回归(Locally weighted regression)LWR

在网上通过看斯坦福大学的机器学习课程&#xff0c;觉得讲的非常好。同时&#xff0c;为了加强自己的记忆&#xff0c;决定将自己学到的东西和一些理解记录下来&#xff0c;希望有所收获。废话不多说&#xff0c;直接开始笔记&#xff1a; 局部加权回归&#xff08;locally we…

ROS中7自由度机械臂自定义发布订阅节点

本篇用来记录一次作业的学习例程&#xff0c;错误之处敬请谅解&#xff0c;后续修改 作业要求&#xff1a; 写两个ROS节点&#xff0c;一个节点发布连续变化&#xff08;可以按sin曲线变化&#xff09;的7自由度的关节角信息&#xff1b;另一个节点订阅第一个节点发布的关节角…

【自己动手写CPU】加载存储指令的实现

目标 修改之前一直做测试的sopc&#xff0c;为其添加数据RAM&#xff0c;测试一般加载指令的实现&#xff0c;加入特殊加载存储指令。 探讨由于加载指令引起的load相关问题&#xff0c;给出OpenMIPS的解决方法&#xff0c;验证解决效果。 加载存储指令说明 31-2625-2120-161…

自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)

将陆续上传新书《自己动手写CPU》。今天是第38篇&#xff0c;我尽量每周四篇&#xff0c;可是近期已经非常久没有实现这个目标了。一直都有事&#xff0c;不好意思哈。 开展晒书评送书活动&#xff0c;在亚马逊、京东、当当三大图书站点上&#xff0c;发表《自己动手写CPU》书评…

LWR--local weighted regression

转自http://www.cnblogs.com/jeromeblog/p/3396486.html 简单回顾一下线性回归。我们使用了如下变量&#xff1a; x —输入变量/特征&#xff1b; y —目标变量&#xff1b; (x,y) —单个训练样本&#xff1b; m —训练集中的样本数目&#xff1b; n —特征维度&#xff1b; (x…

局部加权回归(LWR) Matlab模板

将百度文库上一份局部加权回归的代码&#xff0c;将其改为模板以便复用。 q2x,q2y为数据集&#xff0c;是n*1的矩阵&#xff1b; r是波长参数&#xff0c;就是对于距离的惩罚力度&#xff1b; q_x是要拟合的数据横坐标&#xff0c;是1*n的矩阵&#xff1b; 得到的q_y即为所求坐…