SQL练习

这是一个包含多个SQL练习题目的集合,涵盖了SELECT基础操作、WORLD、NOBEL、SELECT FROM WORLD Tutorial等多个主题,旨在提升SQL查询和数据处理能力。题目涉及人口统计、国家与首都关系、诺贝尔奖、赛事数据等不同领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目来源:http://zh.sqlzoo.net/

SELECT基础操作

world表

1、查询所有国家名字,条件是首都名是国家名加上' City'。

SELECT NAME FROM WORLD
WHERE CAPTIAL = CONCAT(NAME,'CITY');


2、找出所有首都和国家名字,首都名要有国家名出现。

SELECT capital,name FROM world
WHERE capital LIKE CONCAT('%',name,'%');



3、找出所有首都和国家名,首都是国家名的延伸。

SELECT name,name FROM world
WHERE capital LIKE CONCAT('%',name,'%') AND capital != name;


4、显示国家名字,及其延伸词,如首都是国家名字的延伸。

SELECT name,replace(capital,name,'') FROM world
WHERE capital LIKE CONCAT(name,'%_')


SELECT from WORLD Tutorial


1、找出至少有2亿人口的国家名称和人均国内生产总值。

SELECT name,gdp/population FROM world
WHERE population >= 200000000


2、查询南美洲国家的名字和人口数(单位为百万)。

SELECT name,population/1000000 FROM world
WHERE continent='South America'


3、

SELECT name,population FROM world
WHERE name in ('France','Germany','Italy')


4、

SELECT name FROM world
WHERE name LIKE '%United%'


5、

SELECT name,population,area FROM world
WHERE area > 3000000 OR population > 250000000


6、

SELECT name,population,area FROM world
WHERE (area > 3000000 AND population < 250000000) OR (area < 3000000 AND population > 250000000)


7、

SELECT name,ROUND(population/1000000,2),ROUND(gdp/1000000000,2) FROM world
WHERE continent='South America'


8、

SELECT name,ROUND(gdp/population,-3) FROM world
WHERE gdp>1000000000000


9、将N开头的国家中continent为Oceania的用Australasia替换。

SELECT name,
       CASE WHEN continent='Oceania' THEN 'Australasia'
            ELSE continent END
FROM world
WHERE name LIKE 'N%'


10、


SELECT name,
(CASE WHEN continent IN ('Europe','Asia') THEN 'Eurasia'
WHEN continent IN ('South America','North America','Caribbean') THEN 'America'
ELSE continent END) AS continent
FROM world
WHERE name LIKE 'A%' OR name LIKE 'B%'


11、


SELECT name,continent,
CASE WHEN continent='Oceania' 
           THEN 'Australasia'
           WHEN continent IN ('Eurasia','Turkey') 
           THEN 'Europe/Asia'
           WHEN continent='Caribbean' 
           THEN CASE WHEN name LIKE 'B%' 
                               THEN 'North America'
                               ELSE 'South America' 
                               END
           ELSE continent
           END
FROM world
ORDER BY name;


SELECT FROM NOBEL TUTORIAL


1、


SELECT yr,subject FROM nobel
WHERE winner='Albert Einstein';


2、

SELECT winner FROM nobel
WHERE yr >= 2000 AND subject='Peace';


3、


SELECT * FROM nobel
WHERE yr BETWEEN 1980 AND 1989 AND subject='Literature';


4、


SELECT * FROM nobel
 WHERE winner IN ('Theodore Roosevelt',
                  'Woodrow Wilson',
                  'Jimmy Carter')


5、


SELECT winner FROM nobel
WHERE winner LIKE 'John%';


6、


SELECT * FROM nobel
WHERE (subject='physics' AND yr=1980)
OR (subject='chemistry' AND yr=1984);


7、


SELECT * FROM nobel
WHERE yr=1980 AND subject NOT IN ('Chemistry','Medicine');


8、


SELECT * FROM nobel
WHERE (yr<1910 AND subject='Medicine')
OR (yr>=2004 AND subject='Literature');


9、


SELECT * FROM nobel
WHERE winner='PETER GRÜNBERG';


10、


SELECT * FROM nobel
WHERE winner='EUGENE O\'NEILL';


11、


SELECT winner,yr,subject FROM nobel
WHERE winner LIKE 'Sir%'
ORDER BY yr DESC,winner;


12、


找出1984年获奖的详细信息,根据奖项和获奖者名字进行排序,将物理奖和化学奖放在最后,

SELECT winner, subject FROM nobel
WHERE yr=1984
ORDER BY subject IN ('Physics','Chemistry'),subject,winner


13、


SELECT winner FROM nobel
WHERE winner LIKE 'C%' AND winner LIKE '%n'


14、


SELECT COUNT(subject) FROM nobel
WHERE subject = 'Chemistry'
AND yr BETWEEN 1950 and 1960


15、


SELECT COUNT(DISTINCT yr) FROM nobel
WHERE yr NOT IN (SELECT DISTINCT yr FROM nobel WHERE subject = 'Medicine')


16、

### 关于SQL练习题及答案 以下是关于SQL的相关练习题以及解答,这些题目可以帮助初学者更好地理解SQL的基础语法和实际应用。 #### 题目一:查询两门及其以上不及格课程的同学的学号、姓名及其平均成绩 此问题可以通过嵌套子查询来实现。具体逻辑如下: 1. 找到所有不及格的成绩记录。 2. 使用 `GROUP BY` 和 `HAVING COUNT(*) >= 2` 来筛选出至少有两门课不及格的学生。 3. 计算这些学生的平均成绩并返回其学号和姓名。 代码示例如下: ```sql SELECT s.Sid, s.Sname, AVG(sc.Degree) AS AvgDegree FROM Student s JOIN SC sc ON s.Sid = sc.Sid WHERE sc.Degree < 60 GROUP BY s.Sid, s.Sname HAVING COUNT(sc.Cid) >= 2; ``` 上述语句实现了所需功能[^1]。 --- #### 题目二:查询Score表中的最高分的学生学号和课程号 通过使用子查询找到最大分数,并将其与原始数据匹配即可得到目标学生的信息。 代码示例如下: ```sql SELECT Sno, Cno FROM Score WHERE Degree = (SELECT MAX(Degree) FROM Score); ``` 这段代码能够有效解决该问题[^2]。 --- ### SQL学习资源推荐 对于希望深入学习SQL的人群来说,除了完成各种类型的练习题外,还可以参考以下几种方式获取更多知识: 1. **在线平台** - LeetCode 提供了大量的SQL挑战题目,适合不同层次的学习者尝试。 - W3Schools 是一个非常友好的入门网站,它提供了详尽的SQL教程和实例演示。 2. **书籍资料** 推荐《SQL必知必会》这本书籍作为基础读物;另外,《高性能MySQL》则更侧重性能优化方面的话题,适用于有一定经验的技术人员进一步提升自己能力水平。 3. **实践操作环境搭建** 安装本地数据库服务器如 MySQL 或 PostgreSQL ,创建虚拟项目场景来进行反复试验也是极为重要的环节之一 。可以利用Docker快速部署所需的测试环境。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值