精华内容
下载资源
问答
  • sql嵌套查询
    千次阅读
    2021-01-14 09:39:12

    说到嵌套查询,首先得理解嵌套查询是什么意思,简单来说就是,一个查询语句可以嵌套在另外一个查询语句的where子句中。外层的查询称为父查询(主查询),内层的查询称为子查询(从查询)。

    嵌套查询的工作方式是由内向外的,即先进行内层查询,外层查询则利用内层查询的结果集作为条件进行查询。当然,嵌套查询不仅仅是select语句的专属,它还可以用在update、insert、delete语句中。如(update tablea A set A.userid = (select id from tableb where id = A.userid)),废话不多说,下面介绍记账常用的子查询。

    (1)简单子查询

    SELECT user_name FROM sys_user WHERE age > ( SELECT age FROM sys_user WHERE user_id = '1001' ),这句语句的意思是,从sys_user表查出年龄比user_id为1001的user_name

    (2) IN嵌套查询

    SELECT user_name FROM sys_user WHERE city_id IN ( SELECT city_id FROM city WHERE city_name = '广州' ), in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。

    (3 )exists嵌套查询

    SELECT * FRO sys_user WHERE EXISTS (SELECT * FROM sys_user WHER user_id = '1001'), exists表示存在,它只查找满足条件的记录

    更多相关内容
  • SQL嵌套查询总结

    2020-09-14 14:27:09
    是我写的一个结合UINON的嵌套查询. 将五个方面的报表放到一个临时表里,再从临时表里,将所要的数据查询出来.
  • sql嵌套查询

    千次阅读 2021-10-08 14:27:40
    bookshop查询 1、在sales表中查找出销售金额最高的订单(订单号,销售金额,订购日期) SELECT order_no AS 订单号, total_amt AS 销售金额, order_date AS 订购日期 FROM sales WHERE total_amt = ( SELECT ...

    bookshop查询

    1、在sales表中查找出销售金额最高的订单(订单号,销售金额,订购日期)

    SELECT order_no AS 订单号, total_amt AS 销售金额, order_date AS 订购日期
    FROM sales
    WHERE total_amt = 
    (
    SELECT MAX(total_amt)
    FROM sales
    )

    2、由sales表中查找出订单金额大于“E0016业务员所接任一张订单的金额”的所有订单,
    并显示承接这些订单的业务员和该订单的金额

    SELECT sale_id AS 业务员编号, order_no AS 订单编号,
     total_amt AS 订单金额
    FROM sales 
    WHERE total_amt >any
    (
    SELECT total_amt
    FROM sales B
    WHERE sale_id='E0016' ) 
    
    AND  sale_id<>'E0016'/*<>是不等于*/
    --或者
    SELECT sale_id AS 业务员编号, order_no AS 订单编号,
     total_amt AS 订单金额
    FROM sales 
    WHERE total_amt >
    (
    SELECT min(total_amt)
    FROM sales B
    WHERE sale_id='E0016' ) 
    
    AND  sale_id<>'E0016'

    3、找出公司女业务员所接的订单

    SELECT *
    FROM sales
    WHERE sale_id in 
    (
    SELECT emp_no
    FROM employee
    WHERE sex = '女' AND dept = '业务'
    )

    4、找出目前业绩未超过300元的员工编号和姓名

    SELECT emp_no AS 员工编号, emp_name AS 姓名
    FROM employee
    WHERE emp_no  not  IN 
    (
    SELECT sale_id
    FROM sales
    GROUP BY sale_id
    HAVING SUM(total_amt) >= 300
    ) 

    5、在销售主表sales中查询销售业绩最高的业务员编号及销售业绩

    SELECT sale_id AS 业务员编号, SUM(sales.total_amt) AS 销售业绩
    FROM sales
    GROUP BY sales.sale_id
    HAVING SUM(sales.total_amt) >= ALL(
    SELECT SUM(total_amt)
    FROM sales
    GROUP BY sales.sale_id
    )

    6、找出目前业绩超过300元的员工编号和姓名

    SELECT emp_no AS 员工编号, emp_name AS 姓名
    FROM employee
    WHERE emp_no IN /*或者将emp_no IN换为exists*/
    (
    SELECT sale_id
    FROM sales
    GROUP BY sale_id
    HAVING SUM(total_amt) > 300
    )

     7、查询订购的产品至少包含了订单102893中所订购产品的订单

    SELECT DISTINCT A.order_no AS 订单编号
    FROM sale_item A
    WHERE a.order_no!='102893' AND NOT EXISTS
    (
    SELECT *
    FROM sale_item B
    WHERE B.order_no = '102893' AND  NOT EXISTS (
    SELECT * 
    FROM sale_item C
    WHERE A.order_no=C.order_no and B.book_no=C.book_no))

     8、查询未承接业务的员工的信息

    SELECT *
    FROM employee
    WHERE NOT EXISTS
    (
    SELECT sale_id
    FROM sales
    WHERE emp_no = sale_id
    )
    --或者
    
    SELECT *
    FROM employee
    WHERE emp_no not in
    (
    SELECT sale_id
    FROM sales
    )  

    9、查找未被售出的图书编号和书名

    SELECT book_no AS 图书编号, book_name AS 书名
    FROM books
    WHERE book_no not in 
    (
    SELECT  book_no 
    FROM sale_item)

     10、找出既购买了“20652”又购买了“22082”的顾客名称

    select cust_name as 顾客姓名 
    from sales 
    where order_no=any(
    select order_no
    from sale_item
    where book_no='20652'intersect
    select order_no
    from sale_item 
    where book_no='22082') 
    --或者
    select distinct cust_name as 顾客姓名 
    from sale_item a,sales b 
    where book_No='20652' 
    and a.order_no=b.order_no 
    and cust_name in 
                  (select cust_name
    			   from sale_item a,sales b 
    			   where book_no='22082' 
    and a.order_no=b.order_no)

    11、统计收件人为“赵毅”的用户所购买的图书总金额,订单笔数

    SELECT SUM(total_amt) AS 购书图书总金额, COUNT(order_no) AS 订单数
    FROM sales
    WHERE sales.cust_name IN
    (
    	SELECT cust_name 
    	FROM customer
    	WHERE customer.receiver = '赵毅'
    )
    GROUP BY cust_name

    12、查找收件人为“赵毅”的用户所购买的图书信息(书名和书号)

    select book_name,book_no
    from books
    where book_no=any(
    select book_no
    from sale_item
    where order_no=any(
    select order_no
    from sales
    where cust_name =any
    	(select cust_name 
    	from customer
    	where receiver like '赵毅')
    	)
    	)

     13.查找员工“方美美”所承接的订单明细

    SELECT *
    FROM sale_item
    WHERE order_no IN
    (
    	SELECT order_no
    	FROM sales
    	WHERE sale_id = 
    	(
    		SELECT emp_no
    		FROM employee
    		WHERE emp_name = '方美美'
    	)
    )

     14、统计员工“方美美”所承接的订单笔数,总销售业绩

    SELECT COUNT(*) AS 订单笔数, SUM(total_amt) AS 总销售业绩
    FROM sales
    WHERE sale_id = 
    (
    	SELECT emp_no
    	FROM employee
    	WHERE emp_name = '方美美')
    GROUP BY sale_id
    --或者
    select count(order_no) 订单笔数,sum(total_amt) 总销售业绩
    from sales
    where sale_id=any(
    select emp_no
    from employee
    where emp_name='方美美'
    )

     15、查找购买了“数据库系统概论”的客户信息(客户名称,收件人,电话)

    select cust_name,receiver,tel_no
    from customer
    where cust_name=any(
    select cust_name
    from sales
    where order_no=any(
    select order_no
    from sale_item
    where book_no=any(
    select book_no
    from books
    where book_name='数据库系统概论'))
    )

     16、统计购买了“数据库系统概论”的订单笔数,总销售量,总金额

    SELECT COUNT(*) AS 订单笔数, SUM(qty) AS 总销售量,SUM(qty*unit_price) AS 总金额
    FROM sale_item
    WHERE book_no = 
    (
    	SELECT book_no
    	FROM books
    	WHERE book_name = '数据库系统概论'
    )

     

     

     

     

    展开全文
  • SQL嵌套查询

    千次阅读 2018-04-04 19:47:29
    主要是用来判断表是否有记录TRUNCATE:删除内容、释放空间但不删除定义,保留数据表的结构删除目标表中所有字段,不影响表结构派生表:派生表就是一个由查询结果生成的临时表。他是在外部查询的FROM中定义的。派生表...

    select top 1 1 from...主要是用来判断表是否有记录


    TRUNCATE :删除内容、释放空间但不删除定义,保留数据表的结构
    删除目标表中所有字段,不影响表结构
    派生表:
    派生表就是一个由查询结果生成的临时表。他是在外部查询的 FROM 中定义的。派生表的存在范围只是在外部查询中,只要外部查询结束了,派生表也就不存在了。派生表一定要写在 FROM 后面范围内,用()括起来。后面跟着派生表的名称。
    select * from(select a,b from table1) as 666
    嵌套子查询的用法:
    两个 select 的嵌套查询:
    select a.GroupInputName from System_GroupInput A where A.GroupInputCode
    in (SELECT b.GroupInputCode FROM System_GroupInputList b WHERE b.GroupInputCode='TH_NofityStayList' )

    select 的嵌套查询:
    假设想知道某产品第一天销售产品的 ID 号。又不知道第一天是什么日期。可以用以下的方法查询 :
    select A.saledate,A.saleid from saleorderhead A join saleorderdetail B
    on A.saleid=B.saleid
    where (select min(saledate) from saleorderdetail )
    可以用以下的嵌套查询方法
    在代码中加入主键(索引)方法:
    1. 在创建列的时候创建完列的时候加入 primary key
    2. 在创建完所需列之后。在下面加入
    constraint (索引名称) unique (关联列 1 ,关联列 2

    HAVING 字句设置 GROUP BY 字句形成分组的条件! HAVING GROUP BY 后面,在 ORDER BY 前面。
    创建外键的方式: constraint 外键名 foreign key (需要放数据的列) references 数据来源表(数据来源表的列明)

    TOP 字句
    select top 1 ( 列名 ) from (表名) where order by (列名)(顺序或逆序)
    decimal(18,0)
    18 是定点精度, 0 是小数位数。
    compute by 计算语句。允许在结果集内产生控制中断和小计,得到更为详尽的记录
    实用实例{ compute avg|count|max|min|sum }(表达式)
    by (表达式)
    自然连接:一种特殊的等值连接,要求需要连接的两个关系需比较的分列是属性完全相同的项,并且将重复属性列去掉。
    谓词 IN
    在嵌套查询的结果往往是一个结果集。查询结果集就是用 IN 可以理解为 ’=‘
    AS 用法:
    一: as 可以作为别名的标志。
    sql select name as username form tablename;
    解释:上面语句的意思就是查询出 tablename 表中字段 name 的所有记录,并且给 name 别名为 username
        

    SQL CTE( 公用表表达式 )
    定义语法: with 公用表表达式名称
    所涉及的列(非全选)
    一个 SELECT 语句,在 AS 之后紧跟。
    按照是否递归,可以将公用表( CTE )表达式分为递归公用表表达式和非递归公用表表达式 .
    非递归公用表表达式:
       非递归公用表表达式( CTE )是查询结果仅仅一次性返回一个结果集用于外部查询调用。并不在其定义的语句中调用其自身的 CTE
       非递归公用表表达式( CTE )的使用方式和 视图 以及 子查询 一致

    递归公用表表达式:


    流程控制语句
    BEGIN……END语句
    格式:BEGIN
    语句
    ~~~
    END
    IF......ELSE语句
    格式:IF
    语句
    [ELSE[IF条件表达式]
    语句
    具体用法:

    WHILE 循环语句
    用法: WHILE 逻辑表达式
    语句

    GOTO 语句
    GOTO 语句可以使 SQL 语句的执行流程无条件转移到指定的标号位置。常用于 WHILE IF 语句中,做跳出循环用。
    GOTO lable
    ...
    lable,
    WAITFOR 语句
    WAITFOR 语句可以在某一个时间或某一时间间隔之后执行 SQL 语句,语句块,存储过程等。
    WAITFOR{DELAY ' 时间 '|TIME ' 时间 '}
    waitfor delay '00:00:10'
    select * from test01;
    waitfor time '16:00:00'
    select * from test01;
    case 语句
    语法: case< 表达式 >
    when< 条件表达式 1>then< 表达式 1>
    when< 条件表达式 2>then< 表达式 2>
    ......
    else< 表达式 n>
    -- 简单 Case 函数 CASE sex WHEN '1' THEN ' ' WHEN '2' THEN ' ' ELSE ' 其他 ' END --Case 搜索函数 CASE WHEN sex = '1' THEN ' ' WHEN sex = '2' THEN ' ' ELSE ' 其他 ' END

    return 语句
    return 语句可以使程序从程序或存储过程中返回。并且之后的语句不再执行。
    return 整型表达式
    变量
    变量分局部变量和全局变量,全局变量是用来跟踪服务器作用范围和特定的交互过程的,不能由用户自己定义也不能被显式的赋值或生命,其名称是由 @@ 组成的。局部变量是由用户自己定义和赋值的。由 declare 声明。局部变量只能在声明变量的批处理语句或过程体中存在,且首字符为 @
    declare @aa 数据类型;或 set @aa= 表达式;


    展开全文
  • SQL嵌套查询示例

    千次阅读 2022-01-01 13:52:04
    SQL嵌套查询示例 现需要查询学生上课人数超过 “Eastern Heretic” 的任意一门课的学生人数的课程信息,请使用 ANY 操作符实现多行子查询。(Lintcode刷题记录)

    查询学生上课人数超过 “Eastern Heretic” 的任意一门课的学生人数的课程信息,请使用 ANY 操作符实现多行子查询。(Lintcode刷题记录)

    Courses表:

    列名类型注释
    idint unsigned主键
    namevarchar课程名称
    student_countint学生总数
    created_atdatetime课程创建时间
    teacher_idint unsigned讲师 id

    Teachers表:

    列名类型注释
    idint unsigned主键
    namevarchar讲师姓名
    emailvarchar讲师邮箱
    ageint讲师年龄
    countryvarchar讲师国籍

    本题涉及到多层的嵌套:

    第一层的父查询为在课程表 courses 中查询满足条件的全部课程信息,这个条件由子查询来完成,即为,查询学生上课人数超过 ”Eastern Heretic“ 的任意一门课的学生人数。这一部分的子查询中需要结合 ANY 操作符实现。之后,再将子查询进行拆分,形成第二层的嵌套子查询。

    第二层的父查询为在课程表 courses 中根据教师 id 查询学生上课人数, 其子查询为在教师表 teachers 中查找教师名 name 为 “Eastern Heretic” 的教师 id。

    条件限制:由于我们最终得到的课程信息中肯定不包含 “Eastern Heretic” 的课程,所以我们要在 WHERE 条件中再设置一项:不为 “Eastern Heretic” 所开的课程 。

    结合以上,使用 SQL 中子查询的方式如下:)

    SELECT *
    FROM `courses`
    WHERE `student_count` > ANY (
    		SELECT `student_count`
    		FROM `courses`
    		WHERE `teacher_id` = (
    			SELECT `id`
    			FROM `teachers`
    			WHERE `name` = 'Eastern Heretic'
    		)
    	)
    -- <> 代表不等于,也可以用!= 但是有些数据库会报错,例如SQL2000 —--
    	AND `teacher_id` <> (
    		SELECT `id`
    		FROM `teachers`
    		WHERE `name` = 'Eastern Heretic'
    	);
    展开全文
  • 数据库sql嵌套查询

    千次阅读 2021-04-14 16:12:19
    sql语言中,一个select-from-where语句成为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询成为嵌套查询。外层的查询块称为外层查询或父查询,内层的查询称为内层查询或子查询...
  • 查询学生的选修课程情况 首先引入知识点:连接查询其实就是对于多个表进行笛卡尔积。 select Student.*,Sc.* from TEST.Student,TEST.SC where Student.Sno=Sc.Sno 上面的例子是等值查询,where的条件是‘=’ ,也...
  • sql嵌套查询慢的原因

    2021-05-01 16:15:21
    为了查询一个字段,使用了五层嵌套循环,但是花费了约1分钟 但是5个表的数据每个最多只有10条,怎么会这么慢呢? 解决 比如查询语句 SELECT * FROM studet 分析器会先看语句的第一个词,如果它发现第一个词是SELECT...
  • SQL语句嵌套查询

    2013-02-03 14:50:09
    基于SQL2005的嵌套查询,包括返回一个值的子查询、返回一组值的子查询(使用ANY谓词查询、使用IN谓词查询、使用ALL谓词查询使用EXISTS查询)。附有详细的表信息。
  • 嵌套查询语法格式带有IN谓词...1.SQL允许多层嵌套查询 2.子查询中不能使用ORDER BY子句(但可以使用GROUP BY等分组查询) 带有IN谓词的子查询 带有IN谓词的子查询指父查询与子查询之间用IN进行连接,判断某个属性列值是
  • 第7讲 sql嵌套查询;教学任务发布;7.4 在Having子句中使用子查询;7.5 在Select子名中使用子查询;7.6 子查询的另外一种分类;7.6 子查询的另外一种分类;7.6 子查询的另外一种分类;拓展补充;拓展补充;拓展补充;拓展补充;...
  • MySQL、Spark SQL 嵌套查询(二层、三层、多层)
  • sql嵌套查询优化

    千次阅读 2018-01-04 23:36:44
    1.嵌套查询优化 优化前 SELECT q.id, q.title, q.question, q.person_name, q.department_name, r.response, r.create_time response_time FROM tb_ent_question q LEFT JOIN tb_ent_res
  • VC++ SQL语句嵌套查询实例,嵌套的SQL 语句可以执行比较复杂的数据库操作,本源码介绍在INSERT 语句中嵌套使用SELECT语句。测试前请通过控制面板注册Access 数据源students,编译并运行Debug下的exe程序,如上图所示...
  • SQL Server 数据库之嵌套查询

    千次阅读 2022-03-16 13:59:32
    SQL Server 数据 嵌套查询
  • SQL子查询和嵌套查询

    2012-05-14 20:51:48
    SQL子查询和嵌套查询
  • 将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为 嵌套查询。例如:SELECT Sname /*外层查询或父查询*/FROMStudentWHERE Sno IN(SELECT Sno /*内层查询或子查询*/FROMSCWHERE Cno='2')...
  • 在做嵌套查询时,如果嵌套的条件在另一张表中没有数据,则会报错。这时候可以用:
  • sql 嵌套查询 in

    千次阅读 2021-01-28 00:26:38
    嵌套查询是将一个select 查询放到另一个查询的where 子句中去如:查询”xx“同学的所修课程及分数1.先选择姓名为"xx"的同学的学号select 学号 from 学生 where 姓名=“XX”2.根据学号来选择相关字段select 课程名,...
  • 连接查询: 连接查询的WHERE子句中来连接两个表的条件称为连接条件或连接谓词,其一般格式: [.][.] 其中比较运算符主要为=、>、=、<=、!=(或者是)等。 此外连接谓词还可以使用以下形式: [.] BETWEEN [.] AND ...
  • sql嵌套查询练习题

    2012-11-23 23:58:25
    sql 语句的嵌套查询完整题,只要能全部做完,那查询的问题就不大了
  • sql 子查询 嵌套查询In the real world, there are times when we need a particular set of data but we don’t have the exact details for getting the data set. In such cases, we try to get the information ...
  • SQL 数据查询(4)—— 嵌套查询

    千次阅读 2021-04-11 22:45:32
    文章目录 嵌套循环 SELECT Sname FROM Student WHERE Sno IN( SELECT Sno FROM SC WHERE Cno = '2' );
  • subject 表: ...自连接:查询父子信息,把一张表看成两张一样的表 现在有一张包含子父关系的,名为 category 的数据表: 我们把这一张表拆分成两张表: 执行 sql 语句: 结果: ...
  • sql语句会用到许多查询语句,如果牵扯到多... 嵌套查询:   select * from bi_BillItem where BillID in (select BillID from bi_Bill where IsArchived='0' and IsCheckOuting='2') group by menuId,MenuPri...
  • SQL连接查询和嵌套查询详解

    千次阅读 2020-08-19 14:30:02
    SQL连接查询和嵌套查询详解 连接查询 若一个查询同时涉及两个或两个以上的表,则称之为连接查询。连接查询是数据库中最最要的查询, 包括1、等值与非等值连接查询2、自然连接查询 1、等值连接查询 2、自然连接查询 3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 174,010
精华内容 69,604
关键字:

sql嵌套查询

友情链接: alt-voice.zip