笔记本
手机
内存
cpu
投影机
主板
数码
显卡
显示器
网络
服务器
MP3
打印机
  信阳电脑网首页|电脑资讯|电脑行情|电脑导购|电脑硬件|降价风暴|下载中心|装机必备|软件下载|源码下载|教程下载|图片中心|网站建设|广告投放|  
|最新视点|软件新闻|网页制作|图像处理|媒体应用|操作系统|数码技术|编程设计|数据库类|网络安全|办公软件|等级考试|人物专访|信阳教育|IT类新闻
|新闻视频|体育新闻|军事新闻|社会新闻|信阳新闻|信阳设计|健康饮食|家居装修|信阳旅游|信阳商家|信阳婚庆|信阳美食|信阳黄页|信阳宾馆|信阳建材
|生活服务|信阳毛尖|信阳名人|信阳房产|信阳娱乐|信阳车市|市场信息|二手市场|信阳人才|卡通动漫|电子商务|电脑科技|公司企业|汽车图片|娱乐图片
信阳IT权威门户网站
 
您现在的位置: 信阳IT第一门户网站 >> 新闻中心 >> 数据库类 >> 正文
使用SQL子选择来和并查询
作者:佚名 文章来源:互联网 点击数: 在线投稿 投稿指南

你是否曾经为了得到所需要的信息而反复查询?子选择,也被称为子查询,也许正是你在寻找的。SQL的这项功能使你可以在一组结果中查询,创造性地给结果组加以限定,或是在向数据库的单一调用中将结果与一个无关系的查询做相关。这篇文章中我将给出几个子选择的例子并就何时使用他们进行讨论。

在一个结果组中搜索
  
子选择的理念很简单:一个选择查询安置在另一个查询内部,创建一个在单一声明搜索中不可用的资源。子选择允许查询的和并,结果组比较的责任落到了数据库中而不是应用软件代码中。

使用这个功能的一个途径是对两个表格中的可比数据专栏中的值进行定位。例如,我的一个数据库有两个表格,Album和Lyric。我可以很容易地通过下面的子查询声明来找到每一个Metallica的歌曲中包含“justice”的歌名:

SELECT song_name FROM Album
WHERE band_name = ‘Metallica’
AND song_name IN
(SELECT song_name FROM Lyric
WHERE song_lyric LIKE ‘%justice%’);

这个例子是很简单的,我从Album表格中选择了所有Metallica的歌曲,接着,我在lyric表格中选择所有包含“justice”的歌曲,最后,我使用IN关键字来从Lyric表格结果组中显示的Album表格中返回歌曲名称。

我使用Lyric表格结果组来给Album表格中的结果做限定。WHERE子句中的子选择部分是完全自包含的,因此我不需要使用例如Album.song_name和Lyric.song_name等完整的专栏名称。我没有从最终结果组的Lyric表格中返回任何值,如果我需要歌曲的Lyric,我会使用一个JOIN声明。

使用NOT IN排除结果
你可以使用NOT IN关键字来获得明确地不被包含在另一个结果组中的结果。例如,我想要通过下面的代码来返回Metallica在“And Justice for All”专辑中不包含单词“justice”的歌曲:

SELECT song_name FROM Album
WHERE album_name = ‘And Justice for All’
AND band_name = ‘Metallica’
AND song_name NOT IN
(SELECT song_name FROM Lyric
WHERE song_lyric LIKE ‘%justice%’);

在前面的SQL代码中,我选择了Metallica的“And Justice for All,”专辑中的所有歌曲,接着是带有歌词中带有“justice”所有歌曲,最后从在Lyric结果组中没有出现的Album结果组返回了所有歌曲。较之于返回两个查询并使用代码来比较数组,你通过一个单独的声明就可以得到确切的结果。

使用EXISTS来相关结果
有时你可以通过多种途径来访问相同的数据,而且你需要对你的结果进行匹配(或相关)来得到值的交叉区。例如,我可以通过搜索Album表格来得到Metallica的歌曲列表,可是,我也可以从我的Cover表格中得到由Damage, Inc表演的Metallica的歌曲的列表,我可以在两个表格中直接比较查询结果来对值作相关。

SELECT Album.song_name FROM Album
WHERE Album.band_name = ‘Metallica’
AND EXISTS
(SELECT Cover.song_name FROM Cover
WHERE Cover.band_name = ‘Damage, Inc.’
AND Cover.song_name = Album.song_name);

在SQL代码中,我使用完整的专栏名称,这是因为我直接对两个表格作比较,而不仅仅是将结果组作为一个被动资源来使用。我并不从Cover表格中返回结果。一些数据库支持NOT EXISTS关键字来确保你并没有匹配。

使用和计函数来比较
  
除了使用子选择在相关的表格中检查数据,你还可以在一个WHERE子选择中使用和计函数来确定主结果组。例如,我想要核实每一个Metallica歌曲在Album表格中的条目。而且,我还想返回缺少歌曲的专辑的名称。很方便地,AlbumInfo表格包含的一个专栏(album_tracks)给出了应该有多少首歌曲方面的信息。

SELECT AlbumInfo.album_name FROM AlbumInfo
WHERE AlbumInfo.band_name = ‘Metallica’
AND album_tracks <>
(SELECT COUNT(*) FROM Album
WHERE Album.album_name = AlbumInfo.album_name);

现在我已经成功地返回了所有Metallica的专辑中,应有的曲目数量与Album表格中实际的歌曲条目数量不符的专辑名称。

[1] [2] 下一页

信阳电脑网申明:本站资源来源于互联网,版权归原作者所有,如有侵权请联系我们,我们将在收到消息后24小时内删除.

  • 上一篇文章:
  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    首页推荐

    7球队或在选秀当天交易:…
    推荐文章 女大学升会网友偷走对方价值8万名表
    推荐文章 大连护士门事件“护士门”照片全集
    推荐文章 一块钱任你摸的福~务行业惊现国内,只需一块钱任你…
    推荐文章 外媒曝光中国再传震撼消息:我军又列装信杀手锏
    推荐文章 中美“信准则”阴影笼罩印度:阿三很怕中美联手
    推荐文章 美军对华警报越拉越响:中美天军太空战随时开打
    推荐文章 一触即发:美军顶级潜艇航母逼近中国内幕曝光了
    推荐文章 航母等不及了!中国建成歼15航母舰载机训练基地
    精彩信息
     一本关于数据库的书籍
     使用SQL子选择来和并查询
     查询多个表格
     创建和修改表格
     串行数据类型
     跟我学SQL:(七)从子表里删除数据
     跟我学SQL:(八)数值数据类型
     datetime和interval数据类型
     微软SQL Server 2005的30项顶尖特性
     Coca-Cola 系列trexi公仔
    图文信息

    一本关于数据库的书籍

    Coca-Cola 系列trexi公…

    剖析SQL Server 2005查…

    JDBC连接SQL2000详细流…
    设为首页 - 加入收藏 - 广告服务 - 友情链接 - 联系我们 - 版权申明 - 网站建设 - 帮助
    豫ICP备10021913号  本站声明:本站资源来源于互联网,版权归原作者所有,如有侵权请联系我们,我们将在收到消息后24小时内删除.
    © CopyRight 2002-2008, XYDNW.COM, Inc. QQ:869696845 官方①群:58890563(满)官方②群:58890410