0

0

实例简析SQL嵌套子查询

php中文网

php中文网

发布时间:2016-06-07 16:21:40

|

1426人浏览过

|

来源于php中文网

原创

实例简析SQL嵌套子查询: 一些初级程序员常常对SQL语法中的子查询,由其对嵌套子查询(子查询中包含一个子查询)的使用比较生疏,本文就此做一个基本讲解,相信新手会有一定收获。 使用子查询的原则 1.一个子查询必须放在圆括号中。 2.将子查询放在比较条件的

   实例简析sql嵌套子查询:

  一些初级程序员常常对SQL语法中的子查询,由其对嵌套子查询(子查询中包含一个子查询)的使用比较生疏,本文就此做一个基本讲解,,相信新手会有一定收获。

  使用子查询的原则

  1.一个子查询必须放在圆括号中。

  2.将子查询放在比较条件的右边以增加可读性。

  子查询不包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,

  并且如果指定了它就必须放在主 SELECT 语句的最后。

  ORDER BY 子句可以使用,并且在进行 Top-N 分析时是必须的。

  3.在子查询中可以使用两种比较条件:单行运算符和多行运算符。

  子查询的类型

  单行子查询:从内 SELECT 语句只返回一行的查询

  多行子查询:从内 SELECT 语句返回多行的查询

  单行子查询

  单行子查询是从内查询返回一行的查询。在该子查询类型中用一个单行操作符。幻灯片中列出了单行操作符。

  例

  显示那些 job ID 与雇员 141 相同的雇员。

  SELECT last_name, job_id

  FROM employees

MakeSong
MakeSong

AI音乐生成,生成高质量音乐,仅需30秒的时间

下载

  WHERE job_id =

  (SELECT job_id

  FROM employees

  WHERE employee_id = 141);

  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);

  显示 job ID 与雇员 141 相同,并且薪水 高于雇员 143 的那些雇员。

  注:外和内查询可以从不同的表中取得数据。

  SELECT last_name, job_id, salary

  FROM employees

  WHERE salary =

  (SELECT MIN(salary)

  FROM employees);

  求所有人谁的工资最小。

  SELECT department_id, MIN(salary)

  FROM employees

  GROUP BY department_id

  HAVING MIN(salary) >

  (SELECT MIN(salary)

  FROM employees

  WHERE department_id = 50);

  求每个部门的最小工资,但是要高于50号部门的工资。

  SELECT employee_id, last_name

  FROM employees

  WHERE salary =

  (SELECT MIN(salary)

  FROM employees

  GROUP BY department_id);

  问题出现在:单行子查询返回了多个查询值;

  应改为:

  SELECT employee_id, last_name

  FROM employees

  WHERE salary in

  (SELECT MIN(salary)

  FROM employees

  GROUP BY department_id);

  SELECT last_name, job_id

  FROM employees

  WHERE job_id =

  (SELECT job_id

  FROM employees

  WHERE last_name = ’Haas’);

  如果子查询返回的是零值,不会对主程序造成影响;

  如果子查询返回的是空值,那么会影响主程序的返回值;

  SELECT employee_id,

  last_name

  FROM employees

  WHERE employee_id NOT IN

  (SELECT manager_id

  FROM employees)

  SELECT employee_id,

  last_name

  FROM employees

  WHERE employee_id NOT IN

  (SELECT manager_id

  FROM employees

  WHERE manager_id IS NOT NULL)

  放在select下的子查询的返回值必须是一个具体值,

  from后面也可以加子查询;

  having后面也可以加子查询;

  order by后面也可以;

  多列子查询适应于:成对比较;非成对比较。

  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 (178,174))

  AND employee_id NOT IN (178,174);

  输出:176 149 80

  只有要查询的东西和你子查询返回的东西一一对应上了,你的查询才能成功。

  如果有一个 对应不上那么你的查询不会成功。

  非成对的子查询:

  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);

  输出:144 124124 50

  143 124124 50

  142 124124 50

  176 149 80

  上面两个程序就是成对子查询和非成对子查询两者之间的区别。

  如果我想去显示员工信息,要求:员工的工资高于本部门的平均工资。

  SELECT a.last_name,

  a.salary,

  a.department_id

  FROM employees a

  WHERE a.salary >

  (SELECT AVG(salary)

  FROM employees b

  WHERE b.department_id = a.department_id);

  in line view(内联视图)

  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;

  数据分散于多个表中需要进行拼合

  SELECT DISTINCT c.LastName, c.FirstName

  FROM Person.Contact c JOIN HumanResources.Employee e

  ON e.ContactID = c.ContactID WHERE EmployeeID IN

  (SELECT SalesPersonID

  FROM Sales.SalesOrderHeader

  WHERE SalesOrderID IN

  (SELECT SalesOrderID

  FROM Sales.SalesOrderDetail

  WHERE ProductID IN

  (SELECT ProductID

  FROM Production.Product p

  WHERE ProductNumber LIKE 'FW123%')));

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
微信文件过期恢复教程
微信文件过期恢复教程

本专题整合了微信文件过期恢复方法、技巧教程,阅读专题下面的文章了解更多详细内容。

0

2026.02.04

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

63

2026.02.04

学习通网页版入口与在线学习指南 学习通官网登录与使用方法
学习通网页版入口与在线学习指南 学习通官网登录与使用方法

本专题详细汇总了学习通网页版入口与登录方法,提供学习通官方网页端入口、学生登录平台、网页版使用指南等内容,帮助用户快速稳定地登录学习通官网,顺利进入学习平台,提升学习效率和体验。

9

2026.02.04

Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

9

2026.02.04

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

3

2026.02.04

Golang 容器化与 Docker 实战
Golang 容器化与 Docker 实战

本专题深入讲解 Golang 应用的容器化与 Docker 部署,涵盖 Docker 基础概念、容器构建与镜像管理、Go 应用的 Dockerfile 编写、跨平台容器部署与优化、Docker Compose 和 Kubernetes 部署工具。通过实际案例,帮助学习者掌握 如何将 Golang 应用容器化并实现高效部署与管理,提升系统的可扩展性与运维效率。

3

2026.02.04

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

59

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

110

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

56

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 10.3万人学习

CSS3 教程
CSS3 教程

共18课时 | 5.2万人学习

Rust 教程
Rust 教程

共28课时 | 5.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号