大家好,今天来为大家解答深入解析:高效数据处理之核心技巧——子查询这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
从后面看:
支持表子查询
在哪里或有之后:
标量子查询(单行)
列子查询(多行)
行子查询
后面存在(相关子查询)
表子查询根据结果集中的行数和列数而有所不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般是多行多列)
*/
一、where或having后面
/*
1.标量子查询(单行子查询)
2.列子查询(多行子查询)
3.行子查询(多列多行)
特征:
子查询放在括号内
子查询一般放在条件的右侧
标量子查询,一般与单行运算符一起使用
===
列子查询通常与多行运算符一起使用。
在、任何/一些、所有
子查询的执行优先于主查询的执行,主查询的条件使用子查询的结果。
*/
1.标量子查询
案例1:谁的工资比 Abel 高?
查询Abel的工资
选择薪资
来自员工
WHERE 姓氏="阿贝尔"
查询员工的信息,满足 salary结果
选择*
来自员工
工资在哪里(
选择薪资
来自员工
WHERE Last_name="Abel");
案例2:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和工资
查询141号员工的job_id
选择job_id
来自员工
其中员工ID=141
查询143号员工的salary
选择薪资
来自员工
其中员工ID=143
查询员工的姓名,job_id 和工资,要求job_id=并且salary
选择姓氏、工作ID、工资
来自员工
哪里工作ID=(
选择工作ID
来自员工
其中员工ID=141
) 和工资(
选择薪资
来自员工
其中员工ID=143
);
案例3:返回公司工资最少的员工的last_name,job_id和salary
查询公司的 最低工资
选择最低(工资)
来自员工
查询last_name,job_id和salary,要求salary=
选择姓氏、工作ID、工资
来自员工
其中工资=(
选择最低(工资)
来自员工
);
案例4:查询最低工资大于50号部门最低工资的部门id和其最低工资
查询50号部门的最低工资
选择最低(工资)
来自员工
其中部门ID=50
查询每个部门的最低工资
选择MIN(工资),department_id
来自员工
按部门ID 分组
在基础上筛选,满足min(salary)
选择MIN(工资),department_id
来自员工
按部门ID 分组
最低工资(工资)(
选择最低(工资)
来自员工
其中部门ID=50
);
非法使用标量子查询
选择MIN(工资),department_id
来自员工
按部门ID 分组
最低工资(工资)(
选择薪资
来自员工
其中部门ID=250
);
2.列子查询(多行子查询)
案例1:返回location_id是1400或1700的部门中的所有员工姓名
查询location_id是1400或1700的部门编号
选择不同的部门_id
来自部门
哪里location_id IN(1400,1700)
查询员工姓名,要求部门号是列表中的某一个
选择姓氏
来自员工
WHERE Department_id IN ( #IN 与=ANY 含义相同
选择不同的部门ID
来自部门
哪里location_id IN(1400,1700)
);
案例2:返回其它工种中比job_id为‘IT_PROG’工种任一工资低的员工的员工号、姓名、job_id 以及salary
查询job_id为‘IT_PROG’部门任一工资
选择不同的工资
来自员工
WHERE job_id="IT_PROG"
查询员工号、姓名、job_id 以及salary,salary()的任意一个
选择姓氏、员工ID、工作ID、工资
来自员工
工资在哪里
选择不同的工资
来自员工
WHERE job_id="IT_PROG"
) AND job_id"IT_PROG";
或
选择姓氏、员工ID、工作ID、工资
来自员工
工资在哪里(
选择最高(工资)
来自员工
WHERE job_id="IT_PROG"
) AND job_id"IT_PROG";
案例3:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工 的员工号、姓名、job_id 以及salary
选择姓氏、员工ID、工作ID、工资
来自员工
工资在哪里
选择不同的工资
来自员工
WHERE job_id="IT_PROG"
) AND job_id"IT_PROG";
或
选择姓氏、员工ID、工作ID、工资
来自员工
工资在哪里(
选择最低(工资)
来自员工
WHERE job_id="IT_PROG"
) AND job_id"IT_PROG";
3、行子查询(结果集一行多列或多行多列)
案例:查询员工编号最小并且工资最高的员工信息
选择*
来自员工
WHERE (employee_id,工资)=(
选择MIN(员工ID),MAX(工资)
来自员工
);
查询最小的员工编号
选择最小值(employee_id)
来自员工
查询最高工资
选择最大(工资)
来自员工
查询员工信息
选择*
来自员工
哪里员工_id=(
选择最小值(员工ID)
来自员工
)和工资=(
选择最高(工资)
来自员工
);
二、select后面
/*
仅支持标量子查询(一行或一列)
*/
案例:查询每个部门的员工个数
选择d.*,(
选择计数(*)
来自员工e
WHERE e.department_id=d.`department_id`) 数字
来自部门d;
案例2:查询员工号=102的部门名
选择(
SELECT 部门名称,e.部门ID
来自部门d
INNER JOIN 员工e
ON d.department_id=e.department_id
其中e.employee_id=102
) 部门名称;
三、from后面
/*
使用子查询结果作为表并需要别名
*/
案例:查询每个部门的平均工资的工资等级
查询每个部门的平均工资
选择平均(工资),department_id
来自员工
按部门ID 分组
从工作成绩中选择*;
连接的结果集和job_grades表,筛选条件平均工资 between lowest_sal and highest_sal
选择ag_dep.*,g.grade_level
从(
选择平均(工资)ag,department_id
来自员工
按部门ID 分组
) ag_dep
内连接job_grades g
在ag_dep.ag 上,最低_sal 和最高_sal 之间;
四、exists后面(相关子查询)
/*
语法:
存在(完整的查询语句)
结果:
1或0
*/
SELECT EXISTS(从员工中选择员工ID,工资=300000);
案例1:查询有员工的部门名
in
选择部门名称
来自部门d
哪里d.department_idIN(
选择部门ID
来自员工
)
exists
选择部门名称
来自部门d
哪里存在(
选择*
来自员工e
其中d.department_id=e.department_id
);
案例2:查询没有女朋友的男神信息
in
选择bo.*
来自男孩博
其中bo.id 不在(
选择男朋友ID
来自美丽
)
exists
选择bo.*
来自男孩博
哪里不存在(
选择男朋友ID
来自美丽b
其中bo.id=b.boyfriend_id
);
1. 查询和Zlotkey相同部门的员工姓名和工资
查询Zlotkey的部门
选择部门ID
来自员工
WHERE 姓氏="Zlotkey"
查询部门号=的姓名和工资
选择姓氏,工资
来自员工
哪里部门_id=(
选择部门ID
来自员工
WHERE 姓氏="Zlotkey"
)
2.查询工资比公司平均工资高的员工的员工号,姓名和工资。
查询平均工资
选择平均(工资)
来自员工
查询工资的员工号,姓名和工资。
选择姓氏、员工ID、工资
来自员工
工资在哪里(
选择平均(工资)
来自员工);
3.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
查询各部门的平均工资
选择平均(工资),department_id
来自员工
按部门ID 分组
连接结果集和employees表,进行筛选
选择员工ID、姓氏、工资、e.department_id
来自员工e
内连接(
选择平均(工资)ag,department_id
来自员工
按部门ID 分组
) ag_dep
ON e.department_id=ag_dep.department_id
哪里工资ag_dep.ag;
4. 查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
查询姓名中包含字母u的员工的部门
选择不同的部门_id
来自员工
WHERE 姓氏LIKE "%u%"
查询部门号=中的任意一个的员工号和姓名
选择姓氏、员工ID
来自员工
WHERE 部门_id IN(
选择不同的部门ID
来自员工
WHERE 姓氏LIKE "%u%"
);
5. 查询在部门的location_id为1700的部门工作的员工的员工号
查询location_id为1700的部门
选择不同的部门_id
来自部门
其中位置ID=1700
查询部门号=中的任意一个的员工号
选择员工ID
来自员工
WHERE 部门ID=ANY(
选择不同的部门ID
来自部门
其中位置ID=1700
);
6.查询管理者是King的员工姓名和工资
查询姓名为king的员工编号
选择员工ID
来自员工
WHERE 姓氏="K_ing"
查询哪个员工的manager_id =
选择姓氏,工资
来自员工
哪里manager_id IN(
选择员工ID
来自员工
WHERE 姓氏="K_ing"
);
7.查询工资最高的员工的姓名,要求first_name和last_name显示为一列,列名为 姓.名
查询最高工资
选择最大(工资)
来自员工
查询工资=的姓.名
SELECT CONCAT(first_name,last_name) "姓氏.名字"
来自员工
其中工资=(
选择最高(工资)
来自员工
);
进阶8:分页查询
/*
应用场景:当要显示的数据在一页上没有完整显示时,需要分页提交sql请求。
语法:
选择查询列表
从表
[连接类型连接表2]
在连接条件下
where 过滤条件
按组字段分组
分组后过滤
按排序字段排序]
限制[偏移量,]大小;
offset是要显示的条目的起始索引(起始索引从0开始)
size 要显示的条目数特征:
limit语句放在查询语句的最后
公式
显示页面的页数、每页大小的条目数
选择查询列表
从表
限制(第1页)*大小,大小;
尺寸=10
页
1 0
2 10
3 20*/
案例1:查询前五条员工信息
从员工中选择* LIMIT 0,5;
从员工LIMIT 5 中选择*;
案例2:查询第11条——第25条
从员工LIMIT 10,15 中选择*;
文章分享结束,深入解析:高效数据处理之核心技巧——子查询和的答案你都知道了吗?欢迎再次光临本站哦!
【深入解析:高效数据处理之核心技巧——子查询】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我之前也遇到过子查询的问题,挺复杂的,感觉学习起来还挺费时
有12位网友表示赞同!
子查询听起来很专业啊,我还以为只有程序员才会用到!
有14位网友表示赞同!
不知道子查询有什么实际应用场景?可以举个例子吗?
有10位网友表示赞同!
我刚开始接触数据库,对子查询了解不多,可以简单介绍一下吗?
有6位网友表示赞同!
有人说子查询效率低,是真的吗?应该怎么提高子查询的效率?
有10位网友表示赞同!
学习子查询好像需要掌握好sql语法,这块我是差点儿手忙脚乱
有17位网友表示赞同!
我感觉子查询还挺像嵌套层,一层一层往下看
有6位网友表示赞同!
看到这篇标题就想到用哪个数据库语言来实现子查询呢?
有12位网友表示赞同!
有没有一些好的资料可以用来学习子查询呀
有16位网友表示赞同!
子查询是什么样的东西啊?简单易懂的解释一下好嘛!
有10位网友表示赞同!
好像听过子查询这个词,但是具体作用不太清楚,期待了解更多
有20位网友表示赞同!
最近在学校学数据库,遇到子查询不知道怎么应付,感觉好难啊
有10位网友表示赞同!
有用的学习资料吗?可以帮我解决用子查询写的sql语句错误?
有14位网友表示赞同!
我想知道子查询在实际项目中是怎么应用的,能不能举个真实的例子?
有15位网友表示赞同!
子查询的使用方法比较灵活吗?
有12位网友表示赞同!
想学习一下子查询的精髓,可以分享一些技巧吗?
有5位网友表示赞同!
学完子查询之后,就能写什么样类型的 sql 语句?
有14位网友表示赞同!
是不是所有数据库系统都支持子查询呢?
有8位网友表示赞同!
子查询是一个比较重要的概念吗?学习它对未来的职业发展有帮助吗?
有19位网友表示赞同!