SQLZoo網(wǎng)站是一個(gè)SQL在線交互課程,適合初學(xué)者入門。


優(yōu)點(diǎn):
- 學(xué)習(xí)梯度平穩(wěn),帶著實(shí)例,從最基礎(chǔ)的一小塊知識點(diǎn)開始
- 交互實(shí)時(shí)反應(yīng)。能夠模擬「鍵入輸入命令」-「獲得輸出結(jié)果」的實(shí)戰(zhàn)情景,同時(shí)無需另新手沮喪的繁瑣的環(huán)境配置安裝。
- 符號「必要難度」理論。比如,第一部分給出示例代碼,到下一部分,便讓學(xué)生復(fù)現(xiàn)一樣的代碼。這樣,學(xué)習(xí)者在「進(jìn)階區(qū)」,而非「恐慌區(qū)」和「舒適區(qū)」。
傳送門:https://sqlzoo.net/wiki/SQL_Tutorial
SELECT基礎(chǔ)
介紹 World表格(數(shù)據(jù)包含:各國的名稱、人口、面積以及GDP)

-
WHERE子句——條件匹配
示例
SELECT population FROM world
WHERE name = 'France'
答案:查詢name為'Germany'數(shù)據(jù)行的population
SELECT population FROM world
WHERE name = 'Germany'

注: 字符串用單引號
2.IN子句——項(xiàng)目是否在列表中
示例
SELECT name, population FROM world
WHERE name IN ('Brazil', 'Russia', 'India', 'China');
答案:查詢name為'Sweden', 'Norway', 'Denmark'數(shù)據(jù)行的population
SELECT name, population FROM world
WHERE name IN ('Sweden', 'Norway', 'Denmark');

3.BETWEEN子句——按照值的范圍邊界來篩選數(shù)據(jù)
示例
SELECT name, area FROM world
WHERE area BETWEEN 250000 AND 300000
答案:查詢area的數(shù)值介于'200,000——250,000'數(shù)據(jù)行的name, area
SELECT name, area FROM world
WHERE area BETWEEN 200000 AND 250000

SELECT小測驗(yàn)
傳送門:https://sqlzoo.net/wiki/SELECT_Quiz

SELECT name, continent, population FROM world
SELECT name, continent, population FROM world
SELECT name FROM world
WHERE population = 64105700
SELECT name FROM world
WHERE population > 200000000
SELECT name, GDP/population FROM world
WHERE population >= 200000000

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

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

Ref:
https://stackoverflow.com/questions/14290857/sql-select-where-field-contains-words
SELECT name, population, area FROM world
WHERE area > 3000000
OR population >250000000

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

Ref:
https://stackoverflow.com/questions/41034292/xor-in-sql-server
SELECT name, ROUND(population/1000000,2),ROUND(GDP/1000000000,2)
AS ROUNDValue
FROM world
WHERE continent='South America'

Ref:
https://www.w3schools.com/sql/func_sqlserver_round.asp
https://www.quora.com/Is-it-possible-to-round-up-a-figure-to-the-nearest-1000-in-SQL-Server
SELECT name, capital, LENGTH(name),LENGTH(capital)
FROM world
WHERE LENGTH(name)=LENGTH(capital)

SELECT name, capital
FROM world
WHERE LENGTH(name)=LENGTH(capital);

SELECT name, capital
FROM world
WHERE LEFT(name,1)=LEFT(capital,1)
AND name<>capital;

SELECT name
FROM world
WHERE name LIKE '%a%'
AND name LIKE '%e%'
AND name LIKE '%i%'
AND name LIKE '%o%'
AND name LIKE '%u%'
AND name NOT LIKE '% %'
wildcard 通配符

SELECT name
FROM world
WHERE name LIKE '%a%'
OR name LIKE '%e%'
OR name LIKE '%i%'
OR name LIKE '%o%'
OR name LIKE '%u%'
AND name NOT LIKE '% %'

--------------------分隔線-------------------------------
SELECT基礎(chǔ)2
介紹 Nobel表格(諾貝爾獎(jiǎng)得主的數(shù)據(jù)表格,數(shù)據(jù)包含:獲獎(jiǎng)?wù)咝彰?、獲獎(jiǎng)年份、專業(yè)領(lǐng)域)
nobel(yr, subject, winner)

-
WHERE子句——條件匹配
示例
SELECT yr, subject, winner
FROM nobel
WHERE yr = 1960
答案:查詢 1950年諾貝爾獎(jiǎng)的數(shù)據(jù)
SELECT yr, subject, winner
FROM nobel
WHERE yr = 1950
-
WHERE子句——條件匹配
示例
SELECT winner
FROM nobel
WHERE yr = 1960
AND subject = 'Physics'
答案:查詢誰在 1962 年獲得了諾貝爾文學(xué)獎(jiǎng)
SELECT winner
FROM nobel
WHERE yr = 1962
AND subject = 'Literature';
- 愛因斯坦
示例:無
答案:查詢愛因斯坦獲得的諾貝爾獎(jiǎng)的年份和專業(yè)
SELECT yr, subject
FROM nobel
WHERE winner='Albert Einstein'
- 近年的諾貝爾和平獎(jiǎng)
示例:無
答案:查詢從 2000 年(包括千禧年)以來所有的諾貝爾和平獎(jiǎng)得主
SELECT winner
FROM nobel
WHERE yr>=2000
AND subject='Peace';
- 20世紀(jì) 80 年代的諾貝爾文學(xué)獎(jiǎng)
示例:無
答案:查詢從 2000 年(包括千禧年)以來所有的諾貝爾和平獎(jiǎng)得主
SELECT yr, subject, winner
FROM nobel
WHERE subject='Literature'
AND yr BETWEEN 1980 AND 1989;
- 哪些諾貝爾獎(jiǎng)得主是總統(tǒng)?
示例:
SELECT * FROM nobel
WHERE yr = 1970
AND subject IN ('Cookery',
'Chemistry',
'Literature')
答案:
查詢以下總統(tǒng)的獲獎(jiǎng)細(xì)節(jié)
- Theodore Roosevelt
- Woodrow Wilson
- Jimmy Carter
- Barack Obama
SELECT * FROM nobel
WHERE winner IN ('Theodore Roosevelt',
'Woodrow Wilson',
'Jimmy Carter','Barack Obama')
- 名字叫約翰 John 的諾貝爾獎(jiǎng)得主
示例:無
答案:名字叫約翰 John 的諾貝爾獎(jiǎng)得主
SELECT winner
FROM nobel
WHERE winner LIKE 'John%'
- 物理與化學(xué)諾貝爾獎(jiǎng)
示例:無
答案:查詢1984 年的諾貝爾化學(xué)獎(jiǎng)得主及 1980 年的諾貝爾物理學(xué)將得主
SELECT *
FROM nobel
WHERE (subject='Physics' AND yr=1980)
OR (subject='Chemistry' AND yr=1984);
- 排除化學(xué)家和醫(yī)學(xué)家
示例:無
答案:查詢1980年的諾貝爾獎(jiǎng)得主,排除化學(xué)和醫(yī)學(xué)領(lǐng)域的得主。
SELECT *
FROM nobel
WHERE yr=1980
AND NOT subject='Medicine'
AND NOT subject='Chemistry';
- 早期的諾貝爾醫(yī)學(xué)獎(jiǎng)及近期的諾貝爾文學(xué)獎(jiǎng)
示例:無
答案:查詢1910年之前(不包括1910)的諾貝爾醫(yī)學(xué)獎(jiǎng)數(shù)據(jù),以及2004年之后(包括2004)的諾貝爾文學(xué)獎(jiǎng)數(shù)據(jù)。
SELECT *
FROM nobel
WHERE (yr<1910 AND subject='Medicine')
OR (yr>=2004 AND subject='Literature');
更難的題目
- 查詢 PETER GRüNBERG的獲獎(jiǎng)細(xì)節(jié)
Non-ASCII characters—— 獲獎(jiǎng)得主的名字有一個(gè)特殊字符——ü
參考如何輸入非ASCII字符
https://en.wikipedia.org/wiki/%C3%9C#Keyboarding
ü的macOS的鍵盤輸入組合:箭頭向上+Shift+U
答案:
SELECT *
FROM nobel
WHERE winner='PETER GRüNBERG';
- Apostrophe 引號
查詢EUGENE O'NEILL的獲獎(jiǎng)細(xì)節(jié)
「字符串中含有單引號」的處理方法
答案:
SELECT *
FROM nobel
WHERE winner='EUGENE O''NEILL'
注意:在字符串「O'」之后添加一個(gè)「'」單引號
- 國王的騎士們
查詢所有以「Sir.」開頭的諾貝爾獎(jiǎng)得主,獲獎(jiǎng)時(shí)間近的得主排在前列,若獲獎(jiǎng)年份相同,安裝名字的的字母順序排序。
答案:
SELECT winner, yr, subject
FROM nobel
WHERE winner LIKE 'Sir%'
ORDER BY yr DESC, winner ASC;
注意:ORDER BY語法
- 化學(xué)家&物理學(xué)家列在最后
查詢1984年的諾貝爾獎(jiǎng)得主,按照專業(yè)(學(xué)科)及獲獎(jiǎng)?wù)呙Q來排列,但是專業(yè)是化學(xué)和物理的,要排列在最后。
答案:
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject IN ('Physics','Chemistry'),subject,winner;