SQL循序渐进(19)DISTINCT和排除复制

DISTINCT和排除复制

假如你象列出所有买过古董的ID和名字,很明显,你可能会将所有的顾客都列出来而没有考虑有些顾客是买过多讲古董的,所以这时你会发现有些数据是重复的。这就意味着你需要通知SQL来排除复制的行,而不管这个顾客买过多少个古董只需要列出一次即可。为了实现这个目的,你可以使用DISTINCT关键字。

首先我们需要为AntiqueOwners表来一个equijoin以得到顾客的LastName和First的详细数据。但是,你要考虑到Antiques表中的SellerID列是AntiqueOwners表的一个外码,所以顾客只能在AntiqueOwners表列出ID和名字的行才被列出。我们还想在列的数据中排除SellerID复制的发生,所以我们要在发生重复的列上使用DISTINCT 。

为了防止复制的发生,我们还想将LastName以字母顺序排列,然后在按字母顺序排列FirstName最后排列OwnerID,因此我们还必须使用ORDER BY子句,具体语句如下:

SELECT DISTINCT SELLERID, OWNERLASTNAME, OWNERFIRSTNAME

FROM ANTIQUES, ANTIQUEOWNERS

WHERE SELLERID = OWNERID

ORDER BY OWNERLASTNAME, OWNERFIRSTNAME, OWNERID

在这个例子中,因为每个人都买都一个件古董,所以我们将Lasname以字母顺序列出所有的古董拥有者。

时间: 2024-12-27 16:59:46

SQL循序渐进(19)DISTINCT和排除复制的相关文章

SQL循序渐进(目录)

教程提纲: SQL循序渐进(1)-------介绍SQL SQL循序渐进(2)-------表的基础知识 SQL循序渐进(3)-------数据检索 SQL循序渐进(4)-------创建表 SQL循序渐进(5)-------插入数据到表 SQL循序渐进(6)-------删除表 SQL循序渐进(7)-------更新记录 SQL循序渐进(8)-------删除记录 SQL循序渐进(9)-------SELECT语句 SQL循序渐进(10)------合计函数 SQL循序渐进(11)------

SQL循序渐进(21)更多的子查询

更多的子查询 我们可以使用在SELECT查询语句中再包括一个SELECT子查询语句.举个例子吧,首先我们列除所有购买贵重物品的顾客,贵重物品的标准是比所有卖出的物品价钱的平均值多100元的物品.具体语句如下: SELECT OWNERID FROM ANTIQUES WHERE PRICE > (SELECT AVG(PRICE) + 100 FROM ANTIQUES); 上面子查询语句是计算物品的平均价格再加100元,并搜索所有在ANTIQUES表中PRICE大于这个数值的OWNERID.这

SQL点滴19—T-SQL中的透视和逆透视

原文:SQL点滴19-T-SQL中的透视和逆透视   透视 今天抽一点时间来看看透视和逆透视语句,简单的说就是行列转换.假设一个销售表中存放着产品号,产品折扣,产品价格三个列,每一种产品号可能有多种折扣,每一种折扣只对应一个产品价格.下面贴出建表语句和插入数据语句. 1 create table SalesOrderDetail( 2 ProductID int /*unique多谢wuu00的提醒*/, 3 UnitPriceDiscount float, 4 ProductPrice flo

SQL循序渐进(23)UNION 和 外部连接

UNION 和 外部连接 有些时候,你可以想一起看多个查询的结果.组合它们的输出,你可以使用UNION关键字.为了合并以下两个查询的输出:显示所有买方的ID和已经有定货的顾客,你可以使用以下语句: SELECT BUYERID FROM ANTIQUEOWNERS UNION SELECT OWNERID FROM ORDERS; 这里要注意SQL要求SELECT的列表必须匹配,即列于数据类型匹配.在本例子中,BuyerID 和OwnerID都是相同的数据类型,同为Interger(整型).同时

SQL循序渐进(9)SELECT语句

SELECT语句 在上面的教程中已经有用到SELECT语句.在本节教程中将详细对它进行阐述.SELECT语句是SQL的核心,在你的SQL语句中可能用的最多的就是SELECT语句了.由于大量的选项可以用于SELECT语句,所以整个教程好象就是围这SELECT语句转.当我们构造SQL查询语句(利用了SELECT语句)的时候,认识所有的可能选项和最好的或者最有效率的方法来实现是很有用的.这个教程将为你提供这些技能. SELECT语句用于查询数据库并检索匹配你指定条件的选择数据.SELECT语句有五个主

Sql Server2000+Sql Server Mobile Edition配置合并复制

近期都在研究合并复制的配置.我需要的环境是这样的,服务器端的数据库采用SQL Server 2000.PPC,客户端采用的精简数据库是Sql Server Mobile Edition. 时下大多采用的数据库配合方式基本上是sql server 2005和Sql Server Mobile Edition.其实,我也想这样采用.但是考虑到原有的数据库系统是采用2000的版本,很难让原来的研发人员去花费时间整迁移. 本来,精简数据库要选择sql ce 2.0.但在安装过程中总是无法成功解决Serv

SQL循序渐进(15)IN 和 BETWEEN 条件运算符

IN 和 BETWEEN 条件运算符 下面是IN条件运算符的SQL语句: SELECT column1, SUM(column2) FROM "list-of-tables" WHERE column3 IN (list-of-values); 下面是BETWEEN条件运算符的SQL语句: SELECT column1, SUM(column2) FROM "list-of-tables" WHERE column3 BETWEEN value1 AND value

SQL Server如何通过备份文件初始化复制

一.背景 MySQL在对有历史数据的数据库进行搭建复制(Master/Slave)的时候,可以通过在Master服务器备份历史数据,利用这个备份文件在Slave进行还原:这样做的好处是可以更加快速的搭建好环境,因为可以对备份文件进行压缩.分包,并且可以使用FTP等工具保证传输过程的安全与快捷:详情可参考:Windows下搭建MySQL Master Slave 当SQL Server遇到同样需要对历史数据库搭建复制,通常的做法是在本地发布快照,再由订阅传输数据,那SQL Server应该如何实现

SQL Server 跨网段跨机房复制

一. 背景 搭建SQL Server复制的时候,如果网络环境是局域网内,通过主机名就可以实现了,但是如果是跨网段.跨机房异地搭建复制的时候就需要注意了,因为SQL Server复制不支持通过IP连接分发服务器,那有什么办法解决跨网段.跨机房的问题呢? 二. 解决方案 在跨网段.跨机房进行SQL Server复制的时候需要区分两种情况:一种是外网IP的1433端口对应了这台机器SQL Server的数据库端口:另外一种情况是外网IP对应SQLServer机器的端口不是1433:下面是几种解决方案: