精华内容
下载资源
问答
  • 子查询:一个select语句中嵌套了另外的一个或者多个select语句 例如: 查询工资比Simth工资高的员工信息 第一步:查询Smith的工资数 select salary from s_emp where last_name='Smith'; 结果: SALARY ----...

        子查询:一个select语句中嵌套了另外的一个或者多个select语句

    例如:
    
    查询工资比Simth工资高的员工信息
    
    	第一步:查询Smith的工资数
    	select salary
    	from s_emp
    	where last_name='Smith';	
    	结果:
    		SALARY
    	----------
    		   940
    
    	第二步:查询工资比940高的员工信息
    	select last_name,salary
    	from s_emp
    	where salary>940;
    
    
    	第三步:把第二步中的数字940替换成第一步中的sql语句即可(注意格式)
    	select last_name,salary
    	from s_emp
    	where salary>(
    		select salary
    		from s_emp
    		where last_name='Smith'
    	);
    
    展开全文
  • msyql数据库 子查询

    2012-08-16 15:56:58
    子查询: (下面的例子中cat_id表示栏目,goods_name表示商品名字,shop_price表示商品价格) 一、where型子查询:把内层查询的结果作为外层查询的比较条件 例: 1、selectgoods_id,goods_name from goods where...

    子查询:

    (下面的例子中cat_id表示栏目,goods_name表示商品名字,shop_price表示商品价格)

    一、where型子查询:把内层查询的结果作为外层查询的比较条件

    例:

    1、selectgoods_id,goods_name from goods where goods_id = (select max(goods_id) fromgoods);

    2、查出每个栏目下最新的商品(以goods_id最大为最新)

    select goods_id,cat_id,goods_name fromgoods where goods_id in (select max(goods_id) from goods group by cat_id);

    //此句相当于先按cat_id分组查询出每个栏目最新的所有good_id


     然后再这个范围内查询出每个栏目下最新的商品


    3、查出每个栏目下最贵的商品

    select goods_id,cat_id,goods_name,shop_pricefrom goods where shop_price in (select max(shop_price) from goods group bycat_id);

    //此句相当于先按cat_id分组查询出每个栏目最贵的所有价格,


    然后再这个范围内查询出每个栏目下贵的商品

     



    二、from型子查询:把内层的查询结果当成临时表,供外层sql再次查询

    使用from查询出每个栏目下最新的商品(以id最大为最新)

    例:

    select * from (select goods_id,cat_id,goods_namefrom goods order by cat_id asc,goods_id desc) as tmp group by cat_id;

    // 内层查询:selectgoods_id,cat_id,goods_name from goods order by cat_id asc,goods_id desc;

    结果如下:



    整体查询结果如下:


    三、exists子查询:把外层的查询结果拿到内层,看内层的查询是否成立

    例:

    select cat_id,cat_name from category where exists (select * from goods where goods.cat_id = category.cat_id);

    外层的查询结果放到内层使用



    注释:

    五种子句是有顺序要求的:where,group,having,order by,limit按这个顺序写  顺序不能颠倒

    列理解成变量 可以计算  select goods_id,market_price-shop_price from goods where market_price-shop_price>200;


    取出的结构可以理解成一张临时的表
     



    展开全文
  • [Mysql]数据库子查询

    2020-12-01 14:15:44
    Mysql数据库允许多个查询合并,也就是将某个查询的结果直接作为下个查询的条件进行多次嵌套的做法,举两个例子: 1. 普通查询 假如需要列出订购物品TNT2的所有客户,应该怎样检索? 第一种,分步查询 (1) 检索包含...

    Mysql数据库允许多个查询合并,也就是将某个查询的结果直接作为下个查询的条件进行多次嵌套的做法,举两个例子:

    1. 普通查询

    假如需要列出订购物品TNT2的所有客户,应该怎样检索?

    第一种,分步查询
    (1) 检索包含物品TNT2的所有订单的编号。
    select order_num from orderitems where prod_id = ‘TNT2’;
    ±----------+
    | order_num |
    ±----------+
    | 20005 |
    | 20007 |
    ±----------+

    (2) 检索具有前⼀步骤列出的订单编号的所有客户的ID
    select cust_id from orders where order_num IN (20005,20007);
    ±--------+
    | cust_id |
    ±--------+
    | 10001 |
    | 10004 |
    ±--------+

    (3) 检索前⼀步骤返回的所有客户ID的客户信息。
    select cust_name,cust_contact from customers where cust_id in (10001,10004);
    ±---------------±-------------+
    | cust_name | cust_contact |
    ±---------------±-------------+
    | Coyote Inc. | Y Lee |
    | Yosemite Place | Y Sam |
    ±---------------±-------------+

    第二种,嵌套查询
    可以把其中的WHERE⼦句转换为⼦查询⽽不是硬编码这些SQL返回的数据:
    select cust_name,cust_contact
    from customers
    where cust_id in (select cust_id
    from orders
    where order_num IN (select order_num
    from orderitems
    where prod_id = ‘TNT2’));

    ±---------------±-------------+
    | cust_name | cust_contact |
    ±---------------±-------------+
    | Coyote Inc. | Y Lee |
    | Yosemite Place | Y Sam |
    ±---------------±-------------+

    为了执⾏上述SELECT语句,MySQL实际上必须执⾏3条SELECT语句。
    最⾥边的⼦查询返回订单号列表,此列表⽤于其外⾯的⼦查询的WHERE⼦句。
    外⾯的⼦查询返回客户ID列表,此客户ID列表⽤于最外层查询的WHERE⼦句。
    最外层查询确实返回所需的数据。

    2. 计算查询

    假如需要显示customers表中每个客户的订单总数。订单与相应的客户ID存储在orders表中。
    1. 分布查询
    (1) 从customers表中检索客户列表。
    select cust_id,cust_name from customers ;
    ±--------±---------------+
    | cust_id | cust_name |
    ±--------±---------------+
    | 10001 | Coyote Inc. |
    | 10002 | Mouse House |
    | 10003 | Wascals |
    | 10004 | Yosemite Place |
    | 10005 | E Fudd |
    ±--------±---------------+
    (2) 对于检索出的每个客户,统计其在orders表中的订单数⽬。
    select count(*) as orders from orders where cust_id = 10001;

    ±-------+
    | orders |
    ±-------+
    | 2 |
    ±-------+

    2. 嵌套查询
    select cust_id,cust_name,
    (select count(*)
    from orders
    where orders.cust_id = customers.cust_id) as orders
    )
    from customers
    order by cust_name;

    ±--------±---------------±-------+
    | cust_id | cust_name | orders |
    ±--------±---------------±-------+
    | 10001 | Coyote Inc. | 2 |
    | 10005 | E Fudd | 1 |
    | 10002 | Mouse House | 0 |
    | 10003 | Wascals | 6 |
    | 10004 | Yosemite Place | 1 |
    ±--------±---------------±-------+

    这里说明一下,有几个注意点:
    1.这里因为orders表和customers表都具有cust_id,所以需要使用 表名.属性 的调用方式来限定关系。
    2. 表名就算在数据库内也不能直接,因为需要使用from 表名 之后,语句语法才能知道去哪个表查询,不然会报错,说不存在。比如我直接写select count(*) where orders.cust_id = customers.cust_id,这样子的话orders.cust_id会提示说不存在,因为你没在语句内定义。
    3. 这里的嵌套是直接去修改count语句,而不是修改where后面的限定条件。其原因我认为可以从逻辑上考虑,因为cust_id和cust_name都是来自customers表,而主要有差异的是在count上。因为count需要额外使用到orders表的内容,那么在进行搜索的时候让他from orders然后定义相等条件orders.cust_id = customers.cust_id就可以做计算了

    展开全文
  • 数据库子查询

    2017-09-20 17:25:00
    子查询主要分为相关子查询和非相关子查询,本次以例子的形式为大家分享如何做数据库子查询 创建数据库  CREATE DATABASE demo103 创建两张表 CREATE TABLE t_class(c_id INT AUTO_INCREMENT PRIMARY KEY,c_...

    子查询主要分为相关子查询非相关子查询,本次以例子的形式为大家分享如何做数据库的子查询

    创建数据库

      CREATE DATABASE demo103

    创建两张表

    CREATE TABLE t_class(
    c_id INT AUTO_INCREMENT PRIMARY KEY,
    c_name VARCHAR(50) NOT NULL
    )

     

    CREATE TABLE t_student(
    s_id INT AUTO_INCREMENT PRIMARY KEY,
    s_name VARCHAR(50) NOT NULL,
    s_sex VARCHAR(20) DEFAULT'男',
    s_classid INT,
    CONSTRAINT FOREIGN KEY (s_classid) REFERENCES t_class(c_id)
    )

     

     

    -- 学生表是看不出有3班的,不代表没有三班,这是为什么单独把班级表抽出来的原因,而且学生的班级只能对应班级表中
    -- 已经存在的班级,不能随意输入,因为做了外键约束。
    -- 现在改掉1,2,3班 换成110班 120班 119班,那你还知道学生表中的班级id对应的是哪个班不?

     

    -- 查询学生姓名及对应班级名称 涉及到2个表
    -- 学生姓名可以从t_student 获取,最多只能得到s_classid,班级名称c——那么哪儿来,班级名称要从 t_class获取
      SELECT s_name FROM t_student
      SELECT c_name FROM t_class

     

    -- 就可以使用子查询 就是一个嵌套查询 一个查询中嵌入另外一个查询 最多嵌入255条查询
    -- 首先from t_student这张表 然后找的s_name 和s_classid 这个时候一行一行去看,是不是每行都可以得到一个s_classid
    -- 然后再到t_class表中去找c_name

    -- 1.相关子查询, 子查询必须依赖于主查询 ,子查询单独运行会报错,依赖于主查询的结果
    -- select嵌套 只能返回单行单列
    -- 每次主查询 执行一次,子查询也会执行一次,最终执行N+1次,效率低下,如果主查询没有提供数据,子查询无法执行
    -- select 嵌套只能返回单行单列
      SELECT s_name,(SELECT c_name FROM t_class WHERE c_id=s_classid) FROM t_student

    -- 2.非相关子查询
    -- 子查询对主查询没有依赖 子查询只会执行一次,只会在from的时候才执行,性能较高,能独立运行,只是给主查询提供条件值
    -- from 嵌套 必须要给嵌套的子查询表起别名,可返回多行多列数据
    -- 查询性别为女 并且姓名为张三的
      SELECT * FROM (SELECT * FROM t_student WHERE s_sex='女') AS t1
      WHERE t1.s_name='张三'

    -- where 嵌套 执行2次,子查询可以单独运行,不依赖主查询,只是给主查询提供条件值
    -- 查询一班的学生有哪些

    万一 t_class 的 c_id 三班==1 ,→首先找到一班的c_id → where s_classid=一班的c_id
      SELECT * FROM t_student WHERE s_classid=1
    -- →首先找到一班的c_id select c_id from t_class where c_name='一班'

      SELECT * FROM t_student WHERE s_classid=(SELECT c_id FROM t_class WHERE c_name='一班') -- 返回多行单列 (in 关键词)

     

    -- 实际上子查询就是嵌套查询
      -- 嵌套位置
      -- select | where | from

     

    -- 查询与张三一个班级的学生有哪些
      -- 找出张三是哪个班
      SELECT s_classid FROM t_student WHERE s_name='张三'
      -- 找出张三同班 的 classid=1 的同学
      SELECT s_name FROM t_student WHERE s_classid=1

    SELECT * FROM t_student WHERE s_classid=(SELECT s_classid FROM t_student WHERE s_name='张三')

     

    -- 查询与张三一个班级的学生有哪些,结果不包含张三
    SELECT *                                 -- 3
    FROM t_student                              -- 1
    WHERE s_classid=(SELECT s_classid FROM t_student WHERE s_name='张三') -- 2
    HAVING s_name!='张三'                                   -- 4 where是在select之前,不能用做聚合函数的判断
      -- having是在selcet之后,而且还可以用在select里面的聚合函数
      -- 并且是之后才执行,所以可以用在二次筛选,
      -- 有聚合函数就必须要用having
    AND s_name!='张三'                             -- 4 AND也可以
      -- 名字比较混乱加别名
    SELECT *                                     -- 3
    FROM t_student t2                                -- 1
    WHERE t2.s_classid=(SELECT t1.s_classid FROM t_student t1 WHERE t1.s_name='张三') -- 2
    HAVING t2.s_name!='张三'                              -- 4

     

    -- 查询班上比平均分高的学生有哪些
      -- @1 找到平均分
      SELECT AVG(IFNULL(s_score,0)) FROM t_student
      -- where s_score > 平均分
      SELECT * FROM t_student WHERE s_score>( SELECT AVG(IFNULL(s_score,0)) FROM t_student)

     


    -- 查询每个班上比平均分高的学生有哪些
      -- @1 找到每个班平均分
       SELECT s_classid,AVG(IFNULL(s_score,0)) FROM t_student GROUP BY s_classid
       -- where s_score > 平均分
      SELECT *
       FROM (SELECT *,AVG(IFNULL(s_score,0)) FROM t_student GROUP BY s_classid) t2
       WHERE t2.s_score>(SELECT AVG(IFNULL(s_score,0)) FROM t_student)

     

      -- 第二种
      SELECT * FROM t_student t1
      WHERE s_score>(SELECT AVG(s_score) FROM t_student t2 WHERE t2.s_classid=t1.s_classid GROUP BY s_classid)
      -- 这个where也嵌套了一个相关子查询,所以我们在这儿只是说明一个事:相关还是非相关跟位置没关系

     

    -- 查询至少有一名学生的班级名称
      SELECT c_name FROM t_class WHERE c_id IN(1,2,3) -- 如果三班没有学生呢,这是我们知道只有1,2,3班有学生
      -- in 集合的概念,一堆,不能直接用等号嘛
      SELECT s_classid FROM t_student -- 获取到t_student 里面有出现的s_classid 有出现,代表至少有一名学生
      SELECT c_id,c_name FROM t_class WHERE c_id IN(SELECT s_classid FROM t_student)

     

    -- ANY有点类似IN | All,只是语法不一样,用等号(where=) any必须结合子查询来使用 ANY子查询投影出来的结果
      SELECT c_id,c_name FROM t_class WHERE c_id= ANY(SELECT s_classid FROM t_student)
      SELECT c_name FROM t_class WHERE c_id= ANY(1,2,3) -- 错误 any必须结合子查询来使用

     

    -- 有两个张三。查询分数高于任意一个张三的所有学生
      -- 张三的分数
      SELECT s_score FROM t_student WHERE s_name='张三'
      SELECT * FROM t_student WHERE s_score>ANY( SELECT s_score FROM t_student WHERE s_name='张三')
      -- 还可以使用MIN
      SELECT * FROM t_student WHERE s_score>(SELECT MIN(s_score) FROM t_student WHERE s_name='张三')

    -- 查询分数高于任意一个张三的所有学生 -- 使用all
      SELECT * FROM t_student WHERE s_score>ALL(SELECT s_score FROM t_student WHERE s_name='张三')

    -- any 和all 必须跟子查询 不能单独使用
    -- 子查询不管怎么变,都只有三种,在where中嵌套一个,form 一个,select一个

     

      

    转载于:https://www.cnblogs.com/xmxxn/p/7562658.html

    展开全文
  • 例子: create database lianxi go use lianxi go--创建部门表create table bumen ( bmcode int primary key, --部门编号(主键) bmname varchar(20), --部门名字 bmceo varchar(20), --部门主管 bmtel ...
  • oracle数据库子查询

    2018-02-06 15:22:00
    子查询在实际项目中应用的比较多,也叫嵌套查询。简单点说,使用一条sql...好吧,请原谅我,那么接下来我们可以通过下面的例子看一下啥是子查询? 1.子查询可以替代某个值 --代替某个值 select * from t_class...
  • 51.Oracle数据库SQL开发之 子查询——编写关联子查询 欢迎转载,转载请标明出处: 关联子查询会引用外部SQL语句中的一列或多列。这种子查询之所以被称为关联子查询,是因为它们通过相同的列与外部的SQL语句关联。 1...
  • 数据库MySQL--子查询

    2019-05-29 18:31:00
    子查询:又称内查询,出现在其他语句中的select语句 主查询:又称外查询,内部嵌套其他select语句的查询 分类: 按结果集的行列数不同:  标量(单行)子查询:结果集只有一行一列  列(多行)子查询:结果集...
  • 在查询进行表内值的链接时,进行子查询子查询:链接值时重新定义一个表名,再进行linq查询的方法, 例子如: 而类页面需要定义一个特别的类用来存放子查询的值
  • 嵌套查询:在Where子句中包含一个形如Select-From-Where的查询块,次查询块成为子查询或嵌套查询  1. 返回一个值的子查询(使用比较运算符(=,>,=,)) 例:查询与“刘伟”老师职称相同的教师号、姓名。  ...
  • 该文章例子均使用数据库基础⑦中,关联关系模块所建的表。 一、子查询 1,基于列的子查询 在查询的列中,使用子查询子查询要求必须返回单列,单值。 例:查询用户和上传的资源数量 select u.*, (select count(1) ...
  • 语句格式 INSERT INTO <表名> [(<属性列1> [,<属性列2>… )] ...例子:对每一个系,求学生的平均年龄,并把结果存入数据库 INSERT INTO Dept_age(Sdept,Avg_age) SELECT S...
  • 笔记_一般数据库查询的一个例子Yii

    千次阅读 2015-07-30 10:39:16
    /** * 获取各个二级目录下的所有文章 * 返回文章的二维数组 ... //各个顶层目录下(包括目录的目录)的所有文章放在数组中 $arrObjModel=array(); foreach ($arrTypeID as $intTypeId){ //获取目录的
  • Java数据库电子词典

    2014-04-22 22:01:18
    Java连接数据库成功的例子 带分离的数据库 只要3分 你赚大了 还可以改编成成绩查询系统
  • 对于初学数据库的人来说,关联子查询比较容易让人产生迷惑,举个例子,我要在员工表emp中查询哪些人是领导,那肯定的思路是员工id在manager_id这一列中的员工是领导。 为完成这一个查询我写了两个sql语句: 1....
  • 这是关于子查询语句的一系列文章中的...本次课程中的所有例子都是基于Microsoft SQL Server Management Studio和AdventureWorks2012数据库的。读者可以阅读我的SQL Server使用入门学习使用这些免费的工具。 在WHER...
  • yii2.0 数据库关联查询

    2017-03-17 10:45:16
    本文章对 2.0 的关联查询做一个简单的介绍 1、设计好关联关系,在这里为大家做了 一个小例子。(Customer 表 model 文件)public function getOrders() { /** * 第一个参数为要关联的字表模型类名称, *第二个参数...
  • 多表连接:顾名思义,就是通过各个表之间共同列的关联性来查询数据。...以下例子所使用的表: SQL> select * from stu; ID NAME CLASS ---------- -------------------- ---------- ...
  • Oracle 9i数据库WITH查询语法小议(1)作者: yangtingkun 专家blog CNETNews.com.cn 2007-10-10 15:05:42  Oracle9i新增了WITH语法功能,可以将查询中的子查询命名,放到SELECT语句的最前面。 下面看一个简单的例子:...
  • 带有EXISTS 谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。 如果返回true,主查询会执行,返回false,主查询就不再执行。 因为带有EXISTS谓词的子查询不返回数据,指定列名没有多大意义...
  • Oracle子查询

    2019-04-08 10:14:59
    Oracle数据库语法中,子查询是一个及其重要的语法。 下面就图一举例子演示下这个语法的使用 图一 子查询顾名思义就是‘‘子’’查询在是在查询内的查询 子查询分为单行子查询和多行子查询 本子查询查询工资和员工...
  • 这篇博客主要是用来展示一个MySQL练习的例子,通过练习这个例子可以达到入门MySQL的效果 1. 需求: 设计数据库表存储:(用户考试信息) 用户信息、考试时间、考试科目与考试成绩,及所属年级! 测试数据: ...
  • Delphi使用in语句引入子查询,设定查询条件:由in引入子查询例子,以子表的方式查询学生名称为李丽的信息,测试前请把Database目录中的SQL数据库文件附加好,并设置数据库连接信息,然后点击“查询”按钮即可。...
  • 本次内容,我们主要掌握数据库的嵌套查询和其他查询子句,将介绍几个查询子句,通过几个例子来掌握嵌套查询和其他查询子句的查询技巧。 一、嵌套查询 (一)子查询 当一个SELECT语句无法完成查询任务时,需要另
  • 终于领略到oracle的强大,可能其他数据库的也可以.标准SQL?Update ds_wap_query_top_count c Set active_num = (Select nvl(active_num, 0) From ds_wap_query_top_temp t Where t.key_id
  • 源代码实例,用以查询在指定条件区间中的数据,比如具体到本例子中,查询收入在1000到3000之间的员工数据,用到了子查询的方法,通过本例子源码的学习,你可学习到VC 基本的数据库连接方法和in子查询的方法,...
  • 16.子查询之exists型子查询

    千次阅读 2018-07-19 22:50:45
    本节将介绍exists子查询及其用法 为了大家更好的理解,我将例子中需要的sql文件上传到了百度网盘,供大家食用。 链接:https://pan.baidu.com/s/1dqQS2sQj8QoCKi3UfN1wVA 密码:h7hh exists型子查询 exists:把...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 553
精华内容 221
关键字:

数据库子查询例子