mysql的第四次作业

-- 第一题
-- 创建歌手表
CREATE TABLE singer(
	singer_Num INT PRIMARY KEY AUTO_INCREMENT, -- 歌手编号
	singer_name VARCHAR(10),  -- 歌手姓名
	singer_brithday DATETIME , -- 歌手生日
	singer_region VARCHAR(10)      -- 歌手地区
); 

-- 插入歌手信息
INSERT INTO singer VALUES (1001,'黄家驹','1962-6-10','香港');

INSERT INTO singer VALUES (1002,'罗大佑','1954-7-20','台湾');

INSERT INTO singer VALUES (1003,'刘德华','1961-9-27','中国内地');

INSERT INTO singer VALUES (1004,'林俊杰','1987-6-09','中国内地');

INSERT INTO singer VALUES (1005,'安苏羽','1990-5-25','中国内地');

INSERT INTO singer VALUES (1006,'邓紫棋','1988-4-15','中国内地');

-- 查看singer表
SELECT *FROM singer;

效果图

-- 创建专辑表
CREATE TABLE special (
	special_Num INT PRIMARY KEY AUTO_INCREMENT ,	-- 专辑标号
	special_title VARCHAR(20) ,	-- 专辑标题
	singer_Num INT ,	-- 歌手编号外键
	-- 创建外键
	CONSTRAINT singer_fk FOREIGN KEY (singer_Num) REFERENCES singer (singer_Num),
	special_price NUMERIC(5,2),	-- 专辑售价
	special_time DATETIME ,		-- 发行日期
	special_company VARCHAR (10) ,  -- 唱片公司
	special_ranking  INT 		-- 专辑排名
	
);

-- 插入专辑
INSERT INTO special VALUES (NULL,'光辉岁月',1001,100,'1993-01-01','百纳',1);

INSERT INTO special VALUES (NULL,'老王的故事',1002,90,'1990-01-01','华纳',2);

INSERT INTO special VALUES (NULL,'老罗哭吧哭吧不是醉',1003,80,'1999-01-01','百纳',3);

INSERT INTO special VALUES (NULL,'咱屯里的人',1003,90,'2016-01-01','sony',4);

INSERT INTO special VALUES (NULL,'期待爱',1004,120,'2018-01-01','华夏',5);

INSERT INTO special VALUES (NULL,'缺氧',1005,110,'2017-01-01','天宇',6);

INSERT INTO special VALUES (NULL,'泡沫',1006,130,'2019-01-01','宇飞',7);

-- 查看special表
SELECT * FROM special;

效果图

-- 创建曲目表
CREATE TABLE chapter (
	chapter_Num INT PRIMARY KEY  UNIQUE AUTO_INCREMENT	,-- 曲目编号
	special_Num INT ,	-- 专辑编号(外键关联)
	CONSTRAINT special_Num_fk FOREIGN KEY (special_Num) REFERENCES special(special_Num),
	songNamenum INT ,	-- 歌名排序号
	chapter_Name 	VARCHAR(20)	-- 歌曲名
	
);

-- 插入曲目
INSERT INTO chapter VALUES (10001,1,1,'光辉岁月');

INSERT INTO chapter VALUES (NULL,1,2,'真的爱你');

INSERT INTO chapter VALUES (NULL,1,3,'岁月无声');

INSERT INTO chapter VALUES (NULL,2,1,'老王的故事');

INSERT INTO chapter VALUES (NULL,2,2,'恋曲1990');

INSERT INTO chapter VALUES (NULL,2,3,'皇后大道东');

INSERT INTO chapter VALUES (NULL,3,1,'老罗哭吧哭吧不是醉');

INSERT INTO chapter VALUES (NULL,3,2,'冰雨');

INSERT INTO chapter VALUES (NULL,3,3,'笨小孩');


-- 查看曲目
SELECT * FROM chapter;

效果图

-- 查询除了年龄最大的歌手信息
SELECT * FROM singer s WHERE s.`singer_brithday` > (SELECT MIN(s.`singer_brithday`) FROM singer s);

-- 查询专辑售价高于平均价格的专辑
SELECT * FROM special s WHERE s.`special_price` > (SELECT AVG(s.`special_price`) FROM special s);

-- 如果有歌曲<真的爱你>,则显示所有的歌曲信息,没有则不显示歌曲信息
SELECT *FROM special  WHERE EXISTS (SELECT * FROM chapter c WHERE c.`chapter_Name`='真的爱你');

-- 列出包含含有“哭”字的歌曲信息和专辑名以及作者。
SELECT c.*,s.`special_title`,g.`singer_name` FROM special s,chapter c,singer g WHERE  
		c.`special_Num`=s.`special_Num` 
		AND s.`singer_Num`=g.`singer_Num`
		AND   s.`special_title` LIKE '%哭%' 
		AND c.`chapter_Name` LIKE '%哭%' 
		AND g.`singer_name` LIKE '%哭%';


-- 列出谁具有作品《恋曲1990》。第一种方法
SELECT g.`singer_name` FROM chapter c, special s , singer g WHERE c.`special_Num`=s.`special_Num` 
		AND s.`singer_Num`=g.`singer_Num`
		AND c.`chapter_Name`='恋曲1990';

-- 第二种方法
SELECT g.`singer_name` FROM singer g INNER JOIN  special s ON  s.`singer_Num`=g.`singer_Num` INNER JOIN  chapter c ON c.`special_Num`=s.`special_Num` 
		WHERE c.`chapter_Name`='恋曲1990';

-- 列出光辉岁月专辑里面所有的歌曲。 内连接的第一种方式
SELECT c.* FROM chapter c, special s WHERE   c.`special_Num`=s.`special_Num`
		AND s.`special_title`='光辉岁月';

-- 内连接的第二种方式
SELECT c.* FROM chapter c INNER JOIN special s ON   c.`special_Num`=s.`special_Num`
		WHERE s.`special_title`='光辉岁月';

SELECT * FROM chapter c LEFT JOIN special s ON   c.`special_Num`=s.`special_Num`;

-- 列出1961年的歌手的专辑名称和全部歌曲信息
SELECT s.`special_title` AS 专辑名, c.* FROM special s,chapter c,singer g WHERE  
		c.`special_Num`=s.`special_Num` 
		AND s.`singer_Num`=g.`singer_Num`
		AND g.`singer_brithday`>='1961'
		AND g.`singer_brithday` <= '1962';

-- 列出所有歌手的歌曲数量。
SELECT g.`singer_name`,COUNT(*) FROM  chapter c, special s , singer g WHERE c.`special_Num`=s.`special_Num` 
		AND s.`singer_Num`=g.`singer_Num` GROUP BY g.`singer_name`;
		

-- 列出所有歌手的歌曲数量大于1的歌手信息。
SELECT g.* FROM  chapter c, special s , singer g WHERE c.`special_Num`=s.`special_Num` 
		AND s.`singer_Num`=g.`singer_Num`
		GROUP BY g.`singer_name`  HAVING COUNT(*)>1;
		
		
-- 列出低于100元的专辑。
SELECT s.`special_title` FROM special s WHERE s.`special_price`<100;


-- 列出不包括黄家驹的所有歌曲列表。
SELECT  g.`singer_name`,c.* FROM  chapter c, special s , singer g WHERE c.`special_Num`=s.`special_Num` 
		AND s.`singer_Num`=g.`singer_Num`
		AND g.`singer_name`!= '黄家驹';

-- 列出香港地区歌手和歌曲。
SELECT g.`singer_name`,c.* FROM chapter c, special s , singer g WHERE c.`special_Num`=s.`special_Num` 
		AND s.`singer_Num`=g.`singer_Num`
		AND g.`singer_region`='香港';


-- 列出所有的歌手最受欢迎的歌曲。(歌曲排在第一的表示最受欢迎歌曲)
SELECT g.`singer_name`,c.`chapter_Name` FROM chapter c, special s , singer g WHERE c.`special_Num`=s.`special_Num` 
		AND s.`singer_Num`=g.`singer_Num`
		AND c.`songNamenum`=1;


-- 列出所有的唱片公司发行的专辑。
SELECT s.`special_company`,s.`special_title` FROM special s;

效果图

-- 第二题
-- 创建地区表
CREATE TABLE region(
	tid INT  PRIMARY KEY AUTO_INCREMENT,
	region_name VARCHAR(10),
	pid INT 
);
DROP TABLE region;

-- 插入地区信息
INSERT INTO region VALUES (1001,'中国',NULL),
			(NULL,'湖南',1001),
			(NULL,'湖北',1001),
			(NULL,'长沙',1002),
			(NULL,'株洲',1002),
			(NULL,'湘潭',1002),
			(NULL,'武汉',1003),
			(NULL,'芙蓉区',1004),
			(NULL,'天心区',1004),
			(NULL,'宁乡区',1004),
			(NULL,'林科大社区',1009);
-- 查看地区表
SELECT * FROM region;

效果图

-- 找出中国一级下级地区。
SELECT region_name FROM region WHERE pid = (SELECT tid FROM region WHERE region_name = '中国');

SELECT t2.`region_name` FROM region t1 ,region t2 WHERE t1.tid = t2.pid   AND t1.region_name = '中国';


-- 查询所有城市
SELECT t3.`region_name` FROM region t1 ,region t2 ,region t3 WHERE t1.tid = t2.pid AND t2.`tid`=t3.`pid` ;

-- 找出湖南的下级地区。
SELECT r.`region_name` FROM region r WHERE r.`pid` = (SELECT r.`tid` FROM region r WHERE r.`region_name` = '湖南');

-- 找出宁乡的上级地区。
SELECT r.`region_name` FROM region r WHERE r.`tid` = (SELECT r.`pid` FROM region r WHERE r.`region_name` = '宁乡区');


-- 参考
SELECT r.`region_name` FROM region r WHERE r.`pid`=r.`tid`;

SELECT * FROM 地区表 WHERE 上级地区=1001
发布了7 篇原创文章 · 获赞 0 · 访问量 120

猜你喜欢

转载自blog.csdn.net/winwinwin99/article/details/100023237