7-13IN和NOT IN 子查询

IN后面的子查询可以返回多条记录。

SELECT ...FROM  WHERE 查询表达式 IN(子查询)

常用IN替换等于(=)的比较子查询。

用法:

(1)使用 :IN关键字可以使父查询匹配子查询返回的多个单列值。

(2) NOT IN:将父查询条件中的表达式与子查询返回的结果进行比较把不匹配的信息显示出来。

举例:查询购买了自行车的用户信息:

根据商品的名称查询商品的编号:

SELECT  ID FROM CommidInfo WHERE Name=‘自行车’

使用商品的编号去查询购买用户的商品编号:

SELECT UserId FROM  OrderInfo  WHERE    ID=
{
SELECT   ID FROM  CommidInfo WHRER  Name=‘自行车‘
}

使用用户编号去查询用户信息:

SELECT *FROM UserInfo  WHERE  UserId=
{
SELECT UserId FROM  OrderInfo  WHERE    ID=
{
SELECT   ID FROM  CommidInfo WHRER  Name=‘自行车‘
}
}

但是在这里会报错:

当子查询返回的列为多个时,就不能用等于号了,把=换成IN就可以解决问题了。

SELECT *FROM UserInfo  WHERE  UserId  IN
{
SELECT UserId FROM  OrderInfo  WHERE    ID=
{
SELECT   ID FROM  CommidInfo WHRER  Name=‘自行车‘
}
}

查询从未网购过的用户信息:

查询订单表中购买过商品的用户编号:

使用关键字DISTINCT去掉重复数据:

SELECT DISTINCT  UserId FROM OrderInfo 

把用户表中购买过商品的用户去掉,剩下的就是从未网购过的用户信息:

SELECT *FROM  UserInfo  WHERE  NOT IN
{
SELECT  DISTINT    UserId FROM  OrderInfo
}

NOT IN 的意思不是在这里的子查询条件内。

时间: 2024-10-05 21:04:39

7-13IN和NOT IN 子查询的相关文章

子查询

子查询返回单行多列: ANY三种用法: ALL两种用法:

SQL Server子查询填充DataSet时报500内部错误的解决办法

运行环境为Visual Studio 2010,数据库为SQL Server 2008. 执行下面SQL语句 SELECT SubsiteId, SubsiteTitle, count(CollectionID) CollectionNumber,count(LName) PlantNumber FROM (SELECT DISTINCT SubsiteId, SubsiteTitle, CollectionID, LName, CName FROM Cumplag_Garden_Plants

Mysql数据库理论基础之五--SELECT单多表查询、子查询、别名

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

前端学数据库之子查询

查询数据库,当查询条件比较复杂时,常常需要用到子查询.子查询(Subquery)是指出现在其他SQL语句内的SELECT子句.本文将详细介绍子查询 定义 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句 SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中,SELECT * FROM t1,称为外层查询(Outer Query/Outer Statement),SELECT col2 FROM t2,称为子查询(Su

ThinkPHP3.2 SQL alias 子查询

SELECT info_key, info_value, info_status, edit_time FROM (SELECT * FROM `detail` WHERE login = '[email protected]' ORDER BY edit_time DESC  ) AS aaa GROUP BY info_key 希望通过Thinkphp实现基于alias的子查询,终于参考下面这个文章实现了. http://www.thinkphp.cn/update/122.html 如下是

sql的基础语句-单行函数,dual,数字函数,日期函数,表连接,集合运算,分组报表,单行子查询,多行子查询

3. 单行函数 3.1 转换函数 select ascii('A'),chr(65) from dual; select to_char(1243123),1231451 from dual;靠左边的就是字符串,靠右边的就是数字 select to_char(123512a121) from dual;   --错误的写法,没有引号表示数字,但是数字里面包含了字母,不合法的输入值 select to_number('123141211') from dual; select to_number(

mysql子查询慢的问题

当你在用explain工具查看sql语句的执行计划时,若select_type 字段中出现"DEPENDENT SUBQUERY"时,你要注意了,你已经掉入了mysql子查询慢的"坑"...下面我们来看一个具体的例子 有这样一条查询语句: SELECT gid,COUNT(id) as count FROM shop_goods g1 WHERE status =0 and gid IN (SELECT gid FROM shop_goods g2 WHERE si

Mysql——子查询

子查询的位置: select 中.from 后.where 中.group by 和order by 中无实用意义. 子查询分为如下几类: 1,标量子查询:返回单一值的标量,最简单的形式. 2,列子查询:返回的结果集是 N 行一列. 3,行子查询:返回的结果集是一行 N 列. 4,表子查询:返回的结果集是 N 行 N 列. 可以使用的操作符:= > < >= <= <> ANY IN SOME ALL EXISTS 标量子查询:是指子查询返回的是单一值的标量,如一个数字

彻底搞懂oracle的标量子查询

oracle标量子查询和自定义函数有时用起来比较方便,而且开发人员也经常使用,数据量小还无所谓,数据量大,往往存在性能问题. 以下测试帮助大家彻底搞懂标量子查询. SQL> create table a (id int,name varchar2(10)); Table created. SQL> create table b (id int,name varchar2(10)); Table created. SQL> insert into a values (1,'a1'); 1

SQL----关联子查询

在where子句中使用子查询时,该子查询的结果必须是单一的 所以在以不同商品为单位,对售价进行比较就要用到关联子查询 如下表格:Table_2 ID 商品 售价 1 苹果 15 2 猕猴桃 11 3 梨 22 4 梨 23 5 猕猴桃 23 6 梨 12 7 猕猴桃 10 8 猕猴桃 3 9 苹果 5 SELECT * FROM Table_2 AS S1 WHERE 售价>(SELECT AVG(售价) FROM Table_2 AS S2 WHERE S1.商品=S2.商品 /*结合条件一定