ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 14168|回复: 40

SQL语句共享!

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-3-28 22:31 | 显示全部楼层 |阅读模式
本帖最后由 wuxiang_123 于 2012-3-29 10:16 编辑

在SELECT查询语句里可以嵌入SELECT查询语句,称为嵌套查询。        有些书上将内嵌的SELECT语句称为孒查询,子查询形成的结果又成为父查询的条件。
       孒查询可以嵌套多层,子查询操作的数据表可以是父查询不操作的数据表。
       子查询中不能有ORDER BY分组语句

子查询可以有ORDER BY 排序子句,有时候,ORDER BY排序子句是不可省略的。 ---wuxiang_123注

1.简单嵌套查询
     语句范例
     select 单价表.客户, 单价表.产品名, 单价表.单价 from 单价表  where 单价表.产品名 = (select  产品表.产品名 from 产品表 where 产品表.产品ID =  "102-5000")
    说明:
  查询得到单价表里满足产品名产品表产品ID为“102-5000”的产品的相关信息
    2.带【in】的嵌套查询
     语句范例
      select 雇员表.雇员编号, 雇员表.姓名, 雇员表.职位, 雇员表.薪水 from 雇员表 where 薪水 in (select  薪水 from  雇员表 where 姓名='张三')
     说明:
查询得到雇员表里满足薪水符合姓名为张三的薪水的所有雇员的相关信息,比如 in(1000,1500,2000)表示薪水=1000或1500或2000的情况。注:此语句完成的查询薪水和张三相等的职员,也可以使用【not in】来进行相反的查询
3.带【any】的嵌套查询
     语句范例
     select 雇员表.雇员编号,雇员表.姓名, 雇员表.职务, 雇员表.薪水 from 雇员表 where 薪水> any (select 薪水 from 雇员表 where 职务=‘工程师’)
     说明:
查询得到薪水比职务为工程师的薪水要高的职员信息。例如子查询结果为(2000,1500,1000),父查询的条件为"薪水>2000 or 薪水>1500 or 薪水>1000"


ANY可以理解为主查询的记录与子查询的任意记录进行比较,符合则返回。>ANY可以理解为主查询中记录若大于子查询中最小值,则返回,<ANY可以理解为父查询中若小于子查询最大值则返回。上面的例子可以理解为:返回父查询中,薪水比职务是工程师的薪水最小值还大的记录。ANY与SOME同义,下同。------wuxiang_123注

4.带【some】的嵌套查询
       语句范例
     select 雇员表.雇员编号,雇员表.姓名, 雇员表.职务, 雇员表.薪水 from 雇员表 where 薪水= some (select 薪水 from 雇员表 where 职务=‘工程师’)
     说明:
查询得到薪水和职务为工程师的薪水一样的职员信息,也就是和任意一个工程师的薪水相等的职员信息。例如子查询结果为(2000,1500,1000),父查询的条件为"薪水=2000 or 薪水=1500 or 薪水=1000"。
      带【any】的嵌套查询和【some】的嵌套查询功能是一样的。早期的SQL仅仅允许使用【any】,后来的版本为了和英语的【any】相区分,引入了【some】,同时还保留了【any】关键词。

5.带【all】的嵌套查询
     语句范例
      select 雇员表.雇员编号,雇员表.姓名, 雇员表.职务, 雇员表.薪水 from 雇员表 where 薪水> all (select 薪水 from 雇员表 where 职务=‘工程师’)
     说明:
查询得到薪水比任一工程师薪水都要高的职员信息。例如子查询结果为(2000,1500,1000),父查询的条件为"薪水>2000 and 薪水>1500 and 薪水>1000"。


ALL谓词表示所有的。所以,>ALL可以理解为返回父查询中,比子查询所有值都要大的值,即相当于返回父查询中比子查询最大值还要大的记录,等效于:select 雇员表.雇员编号,雇员表.姓名, 雇员表.职务, 雇员表.薪水 from 雇员表 where 薪水> (select MAX(薪水) from 雇员表 where 职务=‘工程师’)
同理,<all则等效于:
select 雇员表.雇员编号,雇员表.姓名, 雇员表.职务, 雇员表.薪水 from 雇员表 where 薪水> (select Min(薪水) from 雇员表 where 职务=‘工程师’)
----wuxiang_123注

6.带【exists】的嵌套查询
     语句范例
     select 雇员表.雇员编号, 雇员表.姓名, 雇员表.职务, 雇员表.薪水 from 雇员表, 部门表 where exists (select * from 雇员表 where 雇员表.部门编号 = 部门表.部门编号)

     说明:
查询得到雇员表和部门表的部门编号相匹配的所有雇员信息。


{NOT} EXISTS是将子查询和主查询进行比较,返回一个TURE/FLASE的值,TURE则返回,FLASE则不返回。----wuxiang_123注

7.并操作【union】的嵌套查询
     语句范例
(select 部门编号 from 雇员表) union (select 部门编号 from 部门表)
     说明:
     并操作就是集合中并集的概念。属于集合A或集合B的元素的总和就是并集。注:该操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。

在EXCEL中,UNION生成的是联合查询,对于进行联合查询的表或查询,要求请求返回的字段数目要相同,字段的类型和属性可以不同。另外,上面的语法中,括号是多余的,这样写会让SQL以为【select 部门编号 from 雇员表) union (select 部门编号 from 部门表)】这部分是表名称。正确的语法为:select 部门编号 from 雇员表 union select 部门编号 from 部门表
下面的8和9不能在OLE DB中使用。
----wuxiang_123注

8.交操作【intersect】的嵌套查询   
     语句范例
(select 部门编号 from 雇员表) intersect (select 部门编号 from 部门表)
     说明:
     交操作就是集合中交集的概念。属于集合A且属于集合B的元素的总和就是交集。注:该操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。
9.差操作【minus】的嵌套查询
     语句范例
    (select 部门编号 from 部门表) minus (select 部门编号 from 雇员表)
     说明:
      差操作就是集合中差集的概念。属于集合A(前一个孒查询结果)且不属于集合B(后一个孒查询结果)的元素的总和就是差集。注:该操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。

小结:尽管SQL有自己的国际标准,但由于不同开发者的使用习惯和思维,决定了不同环境的SQL会具有差异性或者说扩展性,在EXCEL OLE DB和MQ,与ACCESS执行的SQL标准基本一致。---wuxiang_123注

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-3-28 22:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
收藏,日后再看,但为什么没附件?如果有数据源就更好了

TA的精华主题

TA的得分主题

发表于 2012-3-28 22:47 | 显示全部楼层
本帖最后由 bibisin 于 2012-3-28 22:48 编辑

楼主的举例涉及子查询的知识,刚好帮本周在学习T-SQL的我巩固知识,谢谢分享

TA的精华主题

TA的得分主题

发表于 2012-3-29 09:17 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-29 09:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
来个附件就更好了.....

TA的精华主题

TA的得分主题

发表于 2012-3-29 09:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢哈。。。。

TA的精华主题

TA的得分主题

发表于 2012-3-29 10:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-30 16:13 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-29 21:10 | 显示全部楼层
感谢版主的点评...太猛了!

TA的精华主题

TA的得分主题

发表于 2012-3-30 17:20 | 显示全部楼层

好久没看SQL了。谢谢!

点评

轮回好久没见了,换头像了?  发表于 2012-3-30 17:23
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 14:36 , Processed in 0.037973 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表