-- 第一题
-- 创建歌手表
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