CD库查询练习

1a. 找出包含song(歌曲) ‘Alison‘的专辑 title(名称) 和 artist(作者)
SELECT title, artist
FROM album JOIN track ON (album.asin=track.album)
WHERE song = ‘Alison‘
这种表与表之间的连接方式也称为笛卡尔积。也就是第一张表上的一行都会逐个与第二张表的所有行连接,然后再喊另外一行,依次类推,直到第一张表的所有行都连接完。那么连接后的行数就是第一张表的行数*第二张表的行数。可见这样的连接非常的消耗资源浪费空间,因此我们需要在两张表上建立一种关系,通过这种关系去掉所有多余的行。这里我们就使用了album.asin=track.album来建立两张表的关系。

1b. 哪个artist(作者)录制了song(歌曲) ‘Exodus‘?
SELECT artist
FROM album JOIN track ON (asin=album)
WHERE song = ‘Exodus‘

1c. 列出track(曲目表)中所有属于‘Blur‘album(专辑)的 song(歌曲)
SELECT song
FROM album JOIN track ON (asin=album)
WHERE title = ‘Blur‘

2a. 显示每张album(专辑)的title(名称) 和包含的track曲目数.
SELECT title, COUNT(*)
FROM album JOIN track ON (asin=album)
GROUP BY title
这道题在连接两张表后又加上了分组。当两张表连接完后,就相当于在一张表上操作。

2b. 显示每张album(专辑)的 title(名称) 以及曲目名称中包含‘Heart‘的曲目总数. (如果专辑中如果没有满足条件的曲目,则不要显示该专辑.).
SELECT title, COUNT(*)
FROM album JOIN track ON (asin=album)
WHERE song LIKE ‘%Heart%‘
GROUP BY title
注意:如果要在分组的表上使用WHERE过滤,那么必须将WHERE语句写在GROUP BY 的前面

2c. "title track" (主打曲目)就是song(歌名)和  title(专辑名)相同的曲目. 请找出所有的title tracks(主打曲目).
SELECT song
FROM album JOIN track ON (asin=album)
WHERE song = title

2d. An "eponymous" album(同名专辑)就是专辑名和artist(作者名)相同的专辑. (例如,乐队 ‘Blur‘的专辑‘Blur‘就是同名专辑 ). 请列出eponymous albums(同名专辑).
SELECT title
FROM album
WHERE artist = title
这道题并没有使用表连接。

3a. 找出在两张以上专辑中出现过的歌曲.同时包含出现的次数.
SELECT song, COUNT(*)
FROM album JOIN track ON asin=album
GROUP BY song
HAVING COUNT(*)>2
这道题使用了Having语句,因为只有having语句可以使用聚合函数,Where语句则不行。

3b. A "good value" album (一张物超所值的专辑)就是专辑中每首歌曲的定价低于 50 pence(便士)的专辑.请找出这些专辑,并显示 title(专辑标题), the price(专辑价格)和 the number of tracks(曲目总数).
SELECT title, price, COUNT(song)
FROM album JOIN track ON asin=album
GROUP BY title, price
HAVING price/COUNT(song) < 0.50
我在做这道题的时候想了很久,结果老是不正确,并不是这道题的SQL语法有多难,而是这道题的题意不好理解,起初我以为50便士就是50元,直接用< 50来做,怎么也不对,后来我才知道50便士其实相当于RMB的5毛,那么就应该是0.5,看来地域的差异也会影响到程序的不同。

3c. Wagner‘s Ring cycle 的专辑有 173 tracks(曲目), Bing Crosby 的专辑包含101 tracks(曲目).请根据专辑中包含曲目的多少,从多到少依次列出这些专辑的名称和包含的总曲目数.
SELECT title, COUNT(asin)
FROM album JOIN track ON asin=album
GROUP BY asin,title
ORDER BY 2 DESC

时间: 2024-10-09 09:22:59

CD库查询练习的相关文章

sqlserver 全库查询 带架构

网上现有的全库查询,无法识别自定义架构的数据库结构: declare @str nvarchar(10) declare @tablename varchar(50) declare @colname varchar(50) declare @counts int declare @sql nvarchar(2000)--以上定义变量 declare cur1 cursor for select a.name tablename,B.name colname from sys.objects a

mysql 连接 选库 查询

mysql_fetch_row  从结果集中取出一行作为枚举数组 <?php $db_conn=mysql_connect('127.0.0.1','root','123456') or die(cant connect mysql);//连接数据库,如果有错误,则不能连接. mysql_query("set name 'utf8'");  //输出的数据按utf8的格式编码 mysql_query  向数据库发送一次查询 $db_select=mysql_select_db('

Oracle 跨库 查询 复制表数据

在目前绝大部分数据库有分布式查询的需要.下面简单的介绍如何在oracle中配置实现跨库访问. 比如现在有2个数据库服务器,安装了2个数据库.数据库server A和B.现在来实现在A库中访问B的数据库. 第一步.配置A服务器端的tnsnames.ora文件(TNSNAMES.ORA Network Configuration File),该文件存放的位置为: $ORACLE_HOME/network/admin/tnsnames.ora 需要在该文件中增加对B库的配置项,格式如下 ZBCDB3

SQLServer跨库查询--分布式查询

出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名) 在跨库查询时需要启用Ad Hoc Distributed Queries启用Ad Hoc Distri

分库分表的几种常见玩法及如何解决跨库查询等问题

在谈论数据库架构和数据库优化的时候,我们经常会听到"分库分表"."分片"."Sharding"-这样的关键词.让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着一些挑战.让人感到担忧的是,他们系统真的就需要"分库分表"了吗?"分库分表"有那么容易实践吗?为此,笔者整理了分库分表中可能遇到的一些问题,并结合以往经验介绍了对应的解决思路和建议. 垂直分表 垂直分表在日常开

SqlServer跨库查询

由于业务的拆分,数据库拆分为两种作用: 汇总数据库(Master,头节点数据库), 子节点数据库(Compute Node,计算子节点数据库) 这样,就设计到子节点访问头节点数据库中的某张汇总表,这种表的记录一般在几,到几十万行左右,目前适合做跨库查询. 跨库查询目前分为两种: 通过sp_addlinkedserver建立链接服务器 没有链接服务器时,可以使用openrowset或者opendatasource函数 在部署时,需要在SQLSERVER外围应用配置器中启用OpenRowSet和Op

跨库查询问题.

在本地服务器测试的时候,我使用的是TP框架中的M方法.查询的时候 public function text(){ $mod = M('anta.user','store_'); $info = $mod->where("user_id=127")->select(); var_dump($info);exit; } M方法中M('库名.表名','表前缀'); 是可以查询的. 但是我当我在服务器中进行M方法跨库查询的时候,缺总是报错,显示"boolean false

ACCESS-如何多数据库查询(跨库查询)

测试通过:ACCESSselect * from F:\MYk.mdb.tablename说明:1.查询语句2.来原于哪(没有密码是个路径)3.查询的表名 =======================================我有两个数据库 A.B 然后我要将两个数据库的两张表组合作为一张表C显示 判断条件是 A数据库的aa表中字段a和B数据库的bb表中字段b相等 并且A数据库的aa表中字段a或B数据库的bb表中字段b等于某个值 示例:sql="select b.filetitle as

SQLServer跨库查询--分布式查询[转载]

--用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名) --导入示例 select * into 表 from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名) --创建链接服务器 exec sp_addlinkedserve