sqlzoo練習題答案


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

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

SQL基礎

由一些簡單的查詢開始

這裏的默認表格爲WORLD表格 。api

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 通配符this

在搜索數據庫中的數據時,SQL 通配符能夠替代一個或多個字符。.net

SQL 通配符必須與 LIKE 運算符一塊兒使用。code

在 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.

相關文章
相關標籤/搜索