sqlzoo練習題答案



title: SQL-Learning
date: 2019-03-12 20:37:21
tags: SQL

這是關於在一個SQL學習網站的練習題答案記錄:SQL教程

SQL基礎

由一些簡單的查詢開始

這里的默認表格為WORLD表格 。

name continent area population gdp
Afghanistan Asia 652230 25500100 20343000000
Albania Europe 28748 2831741 12960000000
Algeria Africa 2381741 37100000 188681000000
Andorra Europe 468 78115 3712000000
Angola Africa 1246700 20609294 100990000000
....

name:國家名稱 continent:大洲 area:面積 population:人口 gdp:國內生產總值


SQL對大小寫不敏感。

  1. 以顯示德國德國的人口
SELECT population 
FROM world
WHERE name = 'Germany'
  1. 查詢面積為5,000,000以上平方公里的國家,對每個國家顯示她的名字和人均國內生產總值gdp/population
SELECT name, gdp/population 
FROM world
WHERE area > 5000000
  1. 查詢“Ireland 愛爾蘭”,“Iceland 冰島”,“Denmark 丹麥”的國家名稱和人口
SELECT name, population 
FROM world
WHERE name IN ('Ireland', 'Iceland', 'Denmark');--IN 操作符允許我們在 WHERE 子句中規定多個值
  1. 面積為200,000及250,000之間的國家名稱和該國面積
SELECT name, area 
FROM world
WHERE area 
BETWEEN 200000 AND 250000;
--操作符 BETWEEN ... AND 會選取介於兩個值之間的數據范圍。這些值可以是數值、文本或者日期。

SELECT國家名字

name continent
Afghanistan Asia
Albania Europe
Algeria Africa
Andorra Europe
Angola Africa
....

name:國家名稱 continent:大洲


SQL 通配符

在搜索數據庫中的數據時,SQL 通配符可以替代一個或多個字符。

SQL 通配符必須與 LIKE 運算符一起使用。

在 SQL 中,可使用以下通配符:

通配符 描述
% 替代一個或多個字符
_ 僅替代一個字符
[charlist] 字符列中的任何單一字符
[^charlist]或者[!charlist] 不在字符列中的任何單一字符

  1. 找出以Y為開首的國家
SELECT name 
FROM world
WHERE name LIKE 'Y%'
--LIKE 操作符用於在 WHERE 子句中搜索列中的指定模式。
  1. 找出以Y為結尾的國家
SELECT name 
FROM world
WHERE name LIKE '%Y'
  1. 找出包含字母x的所有國家
SELECT name 
FROM world
WHERE name 
LIKE '%x%'
  1. 找出名字以land結尾的所有國家
SELECT name 
FROM world
WHERE name 
LIKE '%land'
  1. 查找以C開頭,ia結尾的所有國家
SELECT name 
FROM world
WHERE name 
LIKE 'C%ia'
  1. 找出名字包含雙oo的國家
SELECT name 
FROM world
WHERE name 
LIKE '%oo%'
  1. 找出名字包含三個或三個以上a的國家
SELECT name 
FROM world
WHERE name 
LIKE '%a%a%a%'
  1. 找出名字第二個字母為t的國家
SELECT name 
FROM world
WHERE name 
LIKE '_t%'
ORDER BY name
  1. 找出所有國家,其名字都有兩個字母 o,被另外兩個字母相隔着
SELECT name 
FROM world
WHERE name 
LIKE '%o__o%'

10 . 找出名字是4個字母的國家

SELECT name 
FROM world
WHERE name 
LIKE '____'
  1. 找出首都和國家名字相同的國家
SELECT name
FROM world
WHERE name = capital; --可以加空格
  1. “Mexico 墨西哥”的首都是”Mexico City”。找出所有國家名字,其首都是國家名字加上”City”。
SELECT name
FROM world
WHERE capital = concat(name,' City');--注意City前面的空格
  1. 找出所有首都和其國家名字,而首都要有國家名字中出現。
SELECT capital,name
FROM world
WHERE capital 
LIKE concat('%',name,'%')
  1. 找出所有首都和其國家名字,而首都是國家名字的延伸。
    你願顯示 Mexico City,因它比其國家名字 Mexico 長。
    你不願顯示 Luxembourg,因它的首都和國家名相是相同的。
SELECT name,capital
FROM world
WHERE capital 
LIKE concat(name,'%')  --注意審題,國家名字的延伸,那么國家名字應該在最前面。
AND capital != name;--這里也可以用"<>"
  1. "Monaco-Ville"是合併國家名字 "Monaco" 和延伸詞"-Ville"

    顯示國家名字,及其延伸詞,如首都是國家名字的延伸

    你可以使用SQL函數 REPLACE 或 MID

    SELECT name,replace(capital, name, '') 
    FROM world 
    WHERE capital 
    LIKE concat(name,'%_')
    /*replace函數定義
    replace(original-string,search-string,replace-string)
    original-string: 被搜索的字符串。可為任意長度。
    search-string: 要搜索並被 replace-string 替換的字符串。該字符串的長度不應超過 255 個字節。如果 search-string 是空字符串,則按原樣返回原始字符串。
    replace-string: 該字符串用於替換 search-string。可為任意長度。如果 replacement-string 是空字符串,則刪除出現的所有 search-string。
    說明
    用字符串表達式3替換字符串表達式1中出現的所有字符串表達式2的匹配項。返回新的字符串。
    如果有某個參數為 NULL,此函數返回 NULL。
    */
    

SQLZOO練習題之SELECT from WORLD Tutorial/zh

查詢世界


name continent area population gdp
Afghanistan Asia 652230 25500100 20343000000
Albania Europe 28748 2831741 12960000000
Algeria Africa 2381741 37100000 188681000000
Andorra Europe 468 78115 3712000000
Angola Africa 1246700 20609294 100990000000
...

name:國家名稱 continent:大洲 area:面積 population:人口 gdp:國內生產總值

**表格說明 **


  1. *查詢大於2億人口的國家。
SELECT name 
FROM world
WHERE population>200000000;
  1. 查詢大於2億人口的國家,及國內生產總值
SELECT name,gdp/population
FROM world
WHERE population > 200000000;
  1. 查詢在South America南美洲的國際愛和以百萬為單位的人口數
SELECT name,population / 1000000
FROM world
WHERE continent = 'South America';--別忘記單引號,代表字符串
  1. 查詢法國,德國,意大利(France, Germany, Italy)的國家名稱和人口
SELECT name,population
FROM world
WHERE name in ('France', 'Germany', 'Italy')--別忘記單引號,代表字符串
  1. 查詢包含單詞“United”的國家
SELECT name
FROM world
WHERE name
LIKE '%United%';
  1. 查詢大國(面積大於300萬平方公里或者人口大於2.5億)的名字,面積,人口
SELECT name,population,area
FROM world
WHERE area > 3000000 
OR population > 250000000;
  1. 美國,印度,中國(USA, India, China)是人口又大,同時面積又大的國家。排除這些國家。

    顯示以人口或面積為大國的國家,但不能同時面積大且人口多的國家名稱,人口,面積。

SELECT name,population,area
FROM world
WHERE (area > 3000000 AND population < 250000000)
OR (area < 3000000 AND population > 250000000);
  1. 查詢並顯示南美洲國家以百萬計人口和10億計gdp(保留小數點2位)。
SELECT name,ROUND(population/1000000,2),ROUND(gdp/1000000000,2)
FROM world
WHERE continent = 'South America';
/*ROUND 函數用於把數值字段舍入為指定的小數位數。
SELECT ROUND(column_name,要保留的位數) FROM table_name*/

ROUND() 函數

  1. 查詢萬億元國內生產總值國家的人均國內生產總值,四捨五入到最近的$ 1000。
SELECT name,ROUND(gdp/population,-3)
FROM world
WHERE gdp > 1000000000000;

繼續使用round函數。因為留一位小數1,不留小數是0,-1就好比153不留3,直接四舍五入150,同樣-2就是153,不留53,直接四舍五入200.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM