SQL ZOO我的答案3之SELECT from Nobel

本文提供了一系列SQL查询示例,用于从诺贝尔奖数据库中检索特定信息,包括获奖者、年份、奖项类别等,覆盖了从1950年到2000年的多个奖项。

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

1、更改查詢以顯示1950年諾貝爾獎的獎項資料。

     SELECT * FROM nobel WHERE yr=1950

2、顯示誰贏得了1962年文學獎(Literature)。

     SELECT winner FROM nobel WHERE yr = 1962  AND subject = 'Literature'

3、顯示“愛因斯坦”('Albert Einstein') 的獲獎年份和獎項。

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

4、顯示2000年及以後的和平獎(‘Peace’)得獎者。

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

5、顯示1980年至1989年(包含首尾)的文學獎(Literature)獲獎者所有細節(年,主題,獲獎者)。

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

6、顯示總統獲勝者的所有細節:

  • 西奧多•羅斯福 Theodore Roosevelt
  • 伍德羅•威爾遜 Woodrow Wilson
  • 吉米•卡特 Jimmy Carter

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

7、顯示名字為John 的得獎者。 (注意:外國人名字(First name)在前,姓氏(Last name)在後)

     SELECT winner FROM nobel WHERE winner LIKE 'John %'

     或者

     SELECT winner FROM nobel WHERE winner LIKE concat('John',' %');

8、顯示1980年物理學(physics)獲獎者,及1984年化學獎(chemistry)獲得者。

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

9、查看1980年獲獎者,但不包括化學獎(Chemistry)和醫學獎(Medicine)。

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

10、顯示早期的醫學獎(Medicine)得獎者(1910之前,不包括1910),及近年文學獎(Literature)得獎者(2004年以後,包括2004年)。

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

11、Find all details of the prize won by PETER GRÜNBERG

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

12、查找尤金•奧尼爾EUGENE O'NEILL得獎的所有細節 Find all details of the prize won by EUGENE O'NEILL

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

     (当需要显示单引号的时候,需要用2个单引号来表示)

13、列出爵士的獲獎者、年份、獎頁(爵士的名字以Sir開始)。先顯示最新獲獎者,然後同年再按名稱順序排列。

     SELECT winner,yr,subject FROM nobel WHERE winner LIKE 'sir%' ORDER BY yr DESC, winner ASC

     (ORDER BY 关键字默认按照升序对记录进行排序)

14、The expression subject IN ('Chemistry','Physics') can be used as a value - it will be 0 or 1.

Show the 1984 winners and subject ordered by subject and winner name; but list Chemistry and Physics last.

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

     (ORDER BY 可以指定一组数据在整体中的前后)

### SQLZOO JOIN 练习解答 在处理数据库查询时,`JOIN` 是一种用于组合来自两个或多个表的数据的重要工具。对于 `LEFT JOIN` 和 `RIGHT JOIN` 的区别,在某些情况下,选择合适的连接方式可以极大地影响查询的结果集。 #### 左连接 (LEFT JOIN) 左连接返回左表中的所有记录以及右表中存在的匹配记录。如果右表中不存在匹配,则结果集中相应的列将包含 NULL 值[^1]。 ```sql SELECT A.column_name, B.column_name FROM TableA AS A LEFT JOIN TableB AS B ON A.common_field = B.common_field; ``` #### 右连接 (RIGHT JOIN) 右连接则相反,它会返回右表中的所有记录以及左表中存在的匹配记录。同样地,当左表缺少对应数据时,这些字段会被填充为 NULL。 ```sql SELECT A.column_name, B.column_name FROM TableA AS A RIGHT JOIN TableB AS B ON A.common_field = B.common_field; ``` 为了更好地理解如何应用这两种类型的联接操作,下面提供几个基于 SQLZOO 平台上的练习实例: ##### 示例 1: 查询世界人口超过五千五百万的国家及其所属大洲的人口总和 此问题可以通过执行内连接来解决,因为这里只需要考虑那些确实存在于两张表格内的条目;但是也可以通过其他形式的外键关联实现相同的功能。 ```sql SELECT continent, SUM(population) FROM world WHERE population > 55000000 GROUP BY continent; -- 或者使用 INNER JOIN 实现同样的效果 SELECT T1.continent, SUM(T2.population) FROM world AS T1 INNER JOIN world AS T2 ON T1.name = T2.name WHERE T2.population > 55000000 GROUP BY T1.continent; ``` ##### 示例 2: 列出欧洲各国首都名称与所在国名 这个问题适合采用左连接的方式来进行求解,即使有些国家可能暂时还没有定义其首都城市也不会丢失该国的信息。 ```sql SELECT country.name, city.name FROM country LEFT JOIN city ON country.capital = city.id WHERE country.continent=&#39;Europe&#39;; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值