文档章节

子查询和高级子查询

bharals
 bharals
发布于 2017/05/19 17:03
字数 1193
阅读 1
收藏 0
点赞 0
评论 0
--  谁的工资比 Abel 高
SELECT salary FROM employees WHERE last_name='Abel';
SELECT last_name, salary FROM employees WHERE salary>=11000;
SELECT last_name, salary FROM employees WHERE salary>=(SELECT salary FROM employees WHERE last_name='Abel');
--  子查询一般是哪个条件未知
--  子查询要包含在括号内。
--  将子查询放在比较条件的右侧。
--  单行操作符对应单行子查询,多行操作符对应多行子查询。

--  返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id 和工资
SELECT last_name, job_id, salary
            FROM   employees
            WHERE  job_id =  
                            (SELECT job_id
                             FROM   employees
                             WHERE  employee_id = 141)
            AND    salary >
                            (SELECT salary
                             FROM   employees
                             WHERE  employee_id = 143);
--  在子查询中使用组函数    题目:返回公司工资最少的员工的last_name,job_id和salary
SELECT last_name, job_id, salary
            FROM   employees
            WHERE  salary = 
                            (SELECT MIN(salary)
                             FROM   employees);
--  子查询中的 HAVING 子句     首先执行子查询。向主查询中的HAVING 子句返回结果。
--  题目:查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT   department_id, MIN(salary)
FROM     employees
GROUP BY department_id
HAVING   MIN(salary) >
                       (SELECT MIN(salary)
                        FROM   employees
                        WHERE  department_id = 50);


--  多行子查询   IN: 等于列表中任意一个   ANY:  和子查询返回的某个值比较  ALL:和子查询返回的所有值比较
--  1、在多行子查询中使用 ALL 操作符  
--  题目:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及salary
SELECT employee_id, last_name, job_id, salary
                        FROM   employees
                        WHERE  salary < ALL
                                            (SELECT salary
                                             FROM   employees
                                             WHERE  job_id = 'IT_PROG')
                        AND    job_id <> 'IT_PROG';
--  2、子查询中的空值问题
SELECT emp.last_name
                        FROM   employees emp
                        WHERE  emp.employee_id NOT IN
                                                     (SELECT mgr.manager_id
                                                      FROM   employees mgr);

--  NO ROWS selected




--  高级子查询
SELECT last_name
FROM   employees
WHERE  salary > 
                (SELECT salary
                 FROM   employees
                 WHERE  employee_id = 149) ;

--查询与141号或174号员工的manager_id和department_id相同的其他员工的employee_id, manager_id, department_id  
--成对比较
SELECT	employee_id, manager_id, department_id
FROM	employees
WHERE  (manager_id, department_id) IN
                      (SELECT manager_id, department_id
                       FROM   employees
                       WHERE  employee_id IN (141,174))
AND	employee_id NOT IN (141,174);
--不成对比较举例
SELECT  employee_id, manager_id, department_id
FROM    employees
WHERE   manager_id IN                   (SELECT  manager_id
                   FROM    employees
                   WHERE   employee_id IN (174,141))
AND     department_id IN                   (SELECT  department_id
                   FROM    employees
                   WHERE   employee_id IN (174,141))
AND	employee_id NOT IN(174,141);
--在 FROM 子句中使用子查询
--问题:返回比本部门平均工资高的员工的last_name, department_id, salary及平均工资
-- 方法一:
select last_name,department_id,salary,
(select avg(salary)from employees e3 
where e1.department_id = e3.department_id 
group by department_id) avg_salary
from employees e1
where salary > 
         (select avg(salary)
          from employees e2  
          where e1.department_id = e2.department_id
          GROUP BY department_id
          );
--方法二:
SELECT  a.last_name, a.salary, 
        a.department_id, b.salavg
FROM    employees a, (SELECT   department_id, 
                      AVG(salary) salavg
                      FROM     employees
                      GROUP BY department_id) b
WHERE   a.department_id = b.department_id
AND     A.salary > b.salavg;

--单列子查询应用举例
--在 CASE 表达式中使用单列子查询
--问题:显式员工的employee_id,last_name和location。其中,
--若员工department_id与location_id为1800的department_id相同,则location为’Canada’,其余则为’USA’。
SELECT employee_id, last_name,
       (CASE
        WHEN department_id =
                
                 
        THEN 'Canada' ELSE 'USA' END) LOCATION
FROM   employees;
--在 ORDER BY 子句中使用单列子查询
--问题:查询员工的employee_id,last_name,要求按照员工的department_name排序
SELECT   employee_id, last_name
FROM     employees e
ORDER BY(SELECT department_name
 FROM departments d
 WHERE e.department_id = d.department_id);


--相关子查询举例
--问题:查询员工中工资大于本部门平均工资的员工的last_name,salary和其department_id
SELECT last_name, salary, department_id
FROM   employees outer
WHERE  salary >(SELECT AVG(salary)
                   FROM   employees
                   WHERE  department_id =  
                          OUTER.department_id) ;
--问题:若employees表中employee_id与job_history表中employee_id相同的数目不小于2,输出这些相同id的员工的employee_id,last_name和其job_id
SELECT e.employee_id, last_name,e.job_id
FROM   employees e 
WHERE  2 <= (SELECT COUNT(*)
             FROM   job_history 
             WHERE  employee_id = e.employee_id);


--EXISTS 操作符检查在子查询中是否存在满足条件的行
--如果在子查询中存在满足条件的行:
--不在子查询中继续查找
--条件返回 TRUE
--如果在子查询中不存在满足条件的行:
--条件返回 FALSE
--继续在子查询中查找

--问题:查询公司管理者的employee_id,last_name,job_id,department_id信息
SELECT employee_id, last_name, job_id, department_id
FROM   employees outer
WHERE  EXISTS ( SELECT 'X'
                 FROM   employees
                 WHERE  manager_id = 
                        OUTER.employee_id);
--问题:查询departments表中,不存在于employees表中的部门的department_id和department_name
SELECT department_id, department_name
FROM departments d
WHERE NOT EXISTS (SELECT 'X'
                  FROM   employees
                  WHERE  department_id 
                         = d.department_id);

--相关更新应用举例
ALTER TABLE employees
ADD(department_name VARCHAR2(14));
UPDATE employees e
SET    department_name = 
              (SELECT department_name 
	       FROM   departments d
	       WHERE  e.department_id = d.department_id);
--问题:删除表employees中,其与emp_history表皆有的数据
DELETE FROM employees E
WHERE employee_id =  
           (SELECT employee_id
            FROM   emp_history 
            WHERE  employee_id = E.employee_id);


--使用 WITH 子句, 可以避免在 SELECT 语句中重复书写相同的语句块
--WITH 子句将该子句中的语句块执行一次并存储到用户的临时表空间中
--使用 WITH 子句可以提高查询效率

--问题:查询公司中各部门的总工资大于公司中各部门的平均总工资的部门信息
WITH dept_costs  AS (
   SELECT  d.department_name, SUM(e.salary) AS dept_total
   FROM    employees e, departments d
   WHERE   e.department_id = d.department_id
   GROUP BY d.department_name),
avg_cost    AS (
   SELECT SUM(dept_total)/COUNT(*) AS dept_avg
   FROM   dept_costs)
SELECT * 
FROM   dept_costs 
WHERE  dept_total >
        (SELECT dept_avg 
         FROM avg_cost)
ORDER BY department_name;

© 著作权归作者所有

共有 人打赏支持
bharals
粉丝 0
博文 26
码字总数 46307
作品 0
ylb: SQL表的高级查询-子查询

ylbtech-SQL Server: SQL Server- SQL表的高级查询-子查询 SQL Server 表的高级查询-子查询。 1,ylb:表的高级查询-子查询返回顶部 --================================-- ylb:表的高级查询...

吞吞吐吐的
2017/09/06
0
0
ylb:SQL 表的高级查询-多表连接和子查询

ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询。 1,ylb:表的高级查询-多表连接和子查询返回顶部 --========================...

吞吞吐吐的
2017/10/14
0
0
Hibernate高级查询

@Test DDL创建表 hibernate标准化对象查询(QBC) 也即是把查询条件封装成一个对象,它支持运行时动态生成查询语句 Criteria接口 存放查询条件的容器 Critertion接口 代表一个查询条件,可以...

嘿嘿!!
2016/09/16
0
0
功能表单之树形选择字段类型的高级使用——JEPLUS软件快速开发平台

JEPLUS功能表单之树形选择字段类型的高级使用 JEPLUS功能表单中树形选择字段类型的目标字段在开发过程中还有一些高级配置和高级应用,如果知晓怎么配置也许能解决我们系统开发过程的大问题,...

JEPLUS
06/13
0
0
SQL Server T-SQL高级查询

高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinc...

种地瓜
2016/01/06
40
0
SQL Server Transact-SQL高级查询

高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --selectselect * from student; --all 查询所有select all sex from student; --distinct 过滤重复select distinct...

ibm_hoojo
2011/07/15
0
0
【ElasticSearch】查询基础篇

elasticsearch的查询有两部分组成:query and filter。 两者的主要区别在于:filter是不计算相关性的,同时可以cache。因此,filter速度要快于query。 先记录一下es提供的各种query。 以下内...

鴿神丶
2016/06/22
84
0
读《程序员的SQL金典》[3]--表连接、子查询

一、表连接-JOIN 1. 自连接实例 查询类型相同的订单信息。 SELECT O1 .,O2.FROM TOrder O1 JOIN TOrder O2ON O1 .FTypeId= O2.FTypeId AND O1.FID...

技术小胖子
2017/11/09
0
0
多个数据表中查询信息

关系型数据库的威力在于它能将两种东西关联起来,即能把多个表中查询出来的数据结合在一起解答单个数据表不足以解答的问题。 联结查询(join) 把多张表查询到的同类数据进行匹配得到的查询结...

marjey
2016/12/19
8
0
Mybatis使用的困惑

为了解决“N+1”问题,Mybatis推荐使用left join等关联查询,并结合等标签来映射高级查询结果。 比如:

xmut
2012/11/20
982
4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周六乱弹 —— 妹子和游戏哪个更好玩

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享唐朝乐队的单曲《国际歌》 《国际歌》- 唐朝乐队 手机党少年们想听歌,请使劲儿戳(这里) @举个栗子- :日常祈雨 邪恶的大祭...

小小编辑
25分钟前
61
4
流利阅读笔记32-20180721待学习

“人工智能”造假:只有人工,没有智能 Lala 2018-07-21 1.今日导读 当今社会,擅长单个方面的人工智能已经盛行,手机借助 AI 智慧防抖技术帮助大家拍出清晰照片,谷歌研发的 AI 助手将可以帮...

aibinxiao
今天
2
0
我的成长记录(一)

今天突然精神抖擞,在我的博客下新开一项分类>成长记录,专门记录每隔一段时间我的一点感悟吧。因为今天才专门花时间新开这样一个分类,所以以前有过的一些感悟没有记录下来,现在已经想不起...

dtqq
今天
0
0
机器学习管理平台 MLFlow

最近工作很忙,博客一直都没有更新。抽时间给大家介绍一下Databrick开源的机器学习管理平台-MLFlow。 谈起Databrick,相信即使是不熟悉机器学习和大数据的工程湿们也都有所了解,它由Spark的...

naughty
今天
0
0
idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部