实验内容
0、准备工作
0.1、设置Users表的UserPassword列不能为空
0.2、建立歌曲表Songs和收藏表Collections
我们已经有User表、Album表、Song表、Collections表,E-R图如下
将本次用的实验用数据脚本运行,插入数据
1、简单数据查询
(1)用中文标题显示所有专辑的专辑名称、发行公司、发行时间、专辑类别和专辑歌手信息,并按发行时间的降序排列。
(2)查找专辑名称中包含“歌”且会员价格低于80元的专辑,显示其全部信息。
(3)查找收藏歌曲在2首以上的用户及其收藏的歌曲数。
(4)显示各公司发行的专辑最低和最高的市场价格。
(5)查找所包含的歌曲数大于等于10首的专辑,显示专辑名和所包含的歌曲数。
代码:
CREATE TABLEUsers(
UserName varchar(20),
UserPassword varchar(6),
UserSex char(2),
UserRealName varchar(20),
UserAgeRange char(8),
UserAddress varchar(256),
UserPostCode char(6),
UserPhone varchar(32),
UserEmail varchar(50),
UserRegisterTime smalldatetime,
UserAdvancePayment numeric(8,2)
);
create tableAlbum(
AlbumID tinyint,
AlbumName varchar(64) not null,
AlbumIssueCompany varchar(64),
AlbumIssueDate smalldatetime,
AlbumType tinyint,
AlbumIntroduce varchar(4096),
AlbumImageUrl varchar(200),
AlbumSinger varchar(32) ,
AlbumLanguage varchar(10),
AlbumMarketPrice numeric(6,2),
AlbumMemberPrice numeric(6,2),
AlbumIsRecommend bit
);
alter tableUsers add UserUpdateTime datetime;
alter tableUsers alter columnUserSex INT;
alter tableUsers DROP COLUMNUserUpdateTime;
CREATE UNIQUEINDEX User_Name_Index ONUsers(UserName);
drop tableUsers;
insert intoUsers values
('ws',
'123',
'女',
'王珊',
'21-30岁',
'北京海淀区中关村',
'100098',
'18611983575',
'ws@cuc.edu.cn',
null,
null
);
update Users set UserPassword=111 where UserName='ws' ;
delete fromUsers where UserName='ws';
CREATE TABLESongs (
SongID tinyint identity PRIMARY KEY,
SongNumber tinyint,
AlbumID tinyint,
SongTitle varchar(256) NOT NULL,
SongDuration char(8),
SongContent varchar(4096),
SongUploadDate smalldatetime ,
SongUrl varchar(200),
SongFormat varchar(10),
SongLanguage varchar(10),
SongType tinyint,
SongSinger varchar(32),
SongIsRecommend bit
);
CREATE TABLECollections(
CollectionID tinyintidentity PRIMARYKEY,
SongID tinyint,
UserName varchar(20),
CollectionDate smalldatetime
);
--()用中文标题显示所有专辑的专辑名称、发行公司、发行时间、专辑类别和专辑歌手信息,
--并按发行时间的降序排列。
SELECT AlbumName,AlbumIssueCompany,AlbumIssueDate,AlbumType,AlbumSinger
FROM Album ORDERBY AlbumIssueDate;
--()查找专辑名称中包含“歌”且会员价格低于元的专辑,显示其全部信息。
SELECT*FROM Album WHERE AlbumName LIKE '%歌%' ANDAlbumMemberPrice<80;
--()查找收藏歌曲在首以上的用户及其收藏的歌曲数。
SELECT UserName,COUNT(DISTINCTCollectionID)
FROM Collections GROUPBY UserName HAVINGCOUNT(DISTINCT CollectionID)>2;
--()显示各公司发行的专辑最低和最高的市场价格。
SELECT MIN(AlbumMarketPrice),MAX(AlbumMarketPrice),AlbumIssueCompany
FROM Album GROUPBY AlbumIssueCompany;
--()查找所包含的歌曲数大于等于首的专辑,显示专辑名和所包含的歌曲数。
SELECT AlbumName,COUNT(SongID) FROM Album,Songs
WHERE Album.AlbumID=Songs.AlbumID GROUP BY Album.AlbumName HAVING COUNT(SongID)>=10;