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對大小寫不敏感。
- 以顯示德國德國的人口
SELECT population
FROM world
WHERE name = 'Germany'
- 查詢面積為5,000,000以上平方公里的國家,對每個國家顯示她的名字和人均國內生產總值(
gdp/population
)
SELECT name, gdp/population
FROM world
WHERE area > 5000000
- 查詢“Ireland 愛爾蘭”,“Iceland 冰島”,“Denmark 丹麥”的國家名稱和人口
SELECT name, population
FROM world
WHERE name IN ('Ireland', 'Iceland', 'Denmark');--IN 操作符允許我們在 WHERE 子句中規定多個值
- 面積為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] | 不在字符列中的任何單一字符 |
- 找出以Y為開首的國家
SELECT name
FROM world
WHERE name LIKE 'Y%'
--LIKE 操作符用於在 WHERE 子句中搜索列中的指定模式。
- 找出以Y為結尾的國家
SELECT name
FROM world
WHERE name LIKE '%Y'
- 找出包含字母x的所有國家
SELECT name
FROM world
WHERE name
LIKE '%x%'
- 找出名字以land結尾的所有國家
SELECT name
FROM world
WHERE name
LIKE '%land'
- 查找以C開頭,ia結尾的所有國家
SELECT name
FROM world
WHERE name
LIKE 'C%ia'
- 找出名字包含雙oo的國家
SELECT name
FROM world
WHERE name
LIKE '%oo%'
- 找出名字包含三個或三個以上a的國家
SELECT name
FROM world
WHERE name
LIKE '%a%a%a%'
- 找出名字第二個字母為t的國家
SELECT name
FROM world
WHERE name
LIKE '_t%'
ORDER BY name
- 找出所有國家,其名字都有兩個字母 o,被另外兩個字母相隔着
SELECT name
FROM world
WHERE name
LIKE '%o__o%'
10 . 找出名字是4個字母的國家
SELECT name
FROM world
WHERE name
LIKE '____'
- 找出首都和國家名字相同的國家
SELECT name
FROM world
WHERE name = capital; --可以加空格
- “Mexico 墨西哥”的首都是”Mexico City”。找出所有國家名字,其首都是國家名字加上”City”。
SELECT name
FROM world
WHERE capital = concat(name,' City');--注意City前面的空格
- 找出所有首都和其國家名字,而首都要有國家名字中出現。
SELECT capital,name
FROM world
WHERE capital
LIKE concat('%',name,'%')
- 找出所有首都和其國家名字,而首都是國家名字的延伸。
你願顯示 Mexico City,因它比其國家名字 Mexico 長。
你不願顯示 Luxembourg,因它的首都和國家名相是相同的。
SELECT name,capital
FROM world
WHERE capital
LIKE concat(name,'%') --注意審題,國家名字的延伸,那么國家名字應該在最前面。
AND capital != name;--這里也可以用"<>"
-
"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:國內生產總值
**表格說明 **
- *查詢大於2億人口的國家。
SELECT name
FROM world
WHERE population>200000000;
- 查詢大於2億人口的國家,及國內生產總值
SELECT name,gdp/population
FROM world
WHERE population > 200000000;
- 查詢在South America南美洲的國際愛和以百萬為單位的人口數
SELECT name,population / 1000000
FROM world
WHERE continent = 'South America';--別忘記單引號,代表字符串
- 查詢法國,德國,意大利(France, Germany, Italy)的國家名稱和人口
SELECT name,population
FROM world
WHERE name in ('France', 'Germany', 'Italy')--別忘記單引號,代表字符串
- 查詢包含單詞“United”的國家
SELECT name
FROM world
WHERE name
LIKE '%United%';
- 查詢大國(面積大於300萬平方公里或者人口大於2.5億)的名字,面積,人口
SELECT name,population,area
FROM world
WHERE area > 3000000
OR population > 250000000;
-
美國,印度,中國(USA, India, China)是人口又大,同時面積又大的國家。排除這些國家。
顯示以人口或面積為大國的國家,但不能同時面積大且人口多的國家名稱,人口,面積。
SELECT name,population,area
FROM world
WHERE (area > 3000000 AND population < 250000000)
OR (area < 3000000 AND population > 250000000);
- 查詢並顯示南美洲國家以百萬計人口和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*/
- 查詢萬億元國內生產總值國家的人均國內生產總值,四捨五入到最近的$ 1000。
SELECT name,ROUND(gdp/population,-3)
FROM world
WHERE gdp > 1000000000000;
繼續使用round函數。因為留一位小數1,不留小數是0,-1就好比153不留3,直接四舍五入150,同樣-2就是153,不留53,直接四舍五入200.