目錄
1.SQL語句學習網站(來源於https://www.jianshu.com/p/723e8bd6c5c8)
1.SQL語句學習網站(來源於https://www.jianshu.com/p/723e8bd6c5c8)
(1)http://www.w3school.com.cn/sql/
速查基礎SQL命令,快速理解SQL命令的含義和使用方法
(2)CodeCademy
https://www.codecademy.com/learn/learn-sql
https://www.codecademy.com/learn/sql-table-transformati
交互式地學習並在類似真實數據庫下使用SQL。需要註冊,解鎖高級功能需要付費。
推薦這個學習網站,這個網站上有詳細解釋SQL語句功能,並提供可交互的在線編程環境,配合練習題鞏固所學知識點,無需註冊。
(4)http://www.w3resource.com/sql-exercises/
題量豐富但基礎,提供可交互的編程窗口,但界面不夠友好。適合已經大體掌握SQL後鞏固之用,無需註冊。
題量豐富且困難,出題的人考慮到了實際使用時的一些坑爹場景。適合刷題解悶,理解SQL運行的深層邏輯。網站風格古老,需要註冊。
網友推薦
2.SQL練習題
本人使用的是https://sqlbolt.com/,既瞭解句法結構,又可以鞏固知識點。
2.1 第二節練習題 帶約束的查詢
#1.找出電影id=6的這一行
SELECT * FROM movies WHERE id=6;
#2.找出在2000年到2010年發行的電影
SELECT * FROM movies WHERE year BETWEEN 2000 AND 2010;
#3.找出不在2000年到2010年發行的電影
SELECT * FROM movies WHERE year NOT BETWEEN 2000 AND 2010;
#4.找出前五個電影和他們的發行年
SELECT title,year FROM movies WHERE Year <=2003
或者
SELECT title,year FROM movies WHERE Year IN(0,1,2,3,4,5)
2.2 第三節 有約束的查詢
- 知識點 :常見的文本數據特定運算符,分爲兩類,一類是區分大小寫的精確字符串比較,=、!=、<>;另一類是不區分大小寫的字符串精確比較,LIKE、NOT LIKE.
- 匹配0個或多個字符串序列用%,可以替代*,可以解釋爲查找包含關鍵詞的詞彙;
- 匹配單個字符串的序列用-符號。
Operator | Condition | Example | Explaining |
= | Case sensitive exact string comparison (notice the single equals) | col = "abc" | 等於 |
!= or <> | Case sensitive exact string inequality comparison | col_name != "abcd" | 不等於 |
LIKE | Case insensitive exact string comparison | col_name LIKE "ABC" | 等於 |
NOT LIKE | Case insensitive exact string inequality comparison | col_name NOT LIKE "ABCD" | 不等於 |
% | Used anywhere in a string to match a sequence of zero or more characters (only with LIKE or NOT LIKE) | col_name LIKE "%AT%" (matches "AT", "ATTIC", "CAT" or even "BATS") |
模糊匹配 |
_ | Used anywhere in a string to match a single character (only with LIKE or NOT LIKE) | col_name LIKE "AN_" (matches "AND", but not "AN") |
模糊匹配單字符串 |
IN (…) | String exists in a list | col_name IN ("A", "B", "C") | 在集合 |
NOT IN (…) | String does not exist in a list | col_name NOT IN ("D", "E", "F") | 不在集合 |
- 練習題
# 1.找出所有Toy Story電影
SELECT * FROM movies WHERE title LIKE "%Toy Story%";
# 下面也可以
SELECT * FROM movies WHERE title LIKE "Toy Story%";
# 2.找出所有John Lasseter拍的電影
SELECT * FROM movies WHERE Director LIKE "John Lasseter";
# 下面也可以
SELECT * FROM movies WHERE director="John Lasseter";
# 3.找出所有不是John Lasseter拍的電影
SELECT * FROM movies WHERE director!="John Lasseter";
# 4.找出WALL-*系列電影
SELECT * FROM movies
WHERE title LIKE "WALL-_";
2.3 第四節 篩選和排序查詢
(1)知識點
SQL提供了一種使用DISTINCT
關鍵字丟棄具有重複列值的行的便捷方法。原因在於即使數據庫中的數據可能是唯一的,任何特定查詢的結果可能都不是 - 例如,以我們的電影表爲例,許多不同的電影可以在同一年發佈。基本語句是:
SELECT DISTINCT column, another_column, …
FROM mytable
WHERE condition(s);
由於
DISTINCT
關鍵字會盲目刪除重複行,因此我們將在以後的課程中學習如何使用分組和GROUP BY
子句根據特定列丟棄重複項。
- order by命令
爲解決表中數量增加到海量造成數據難以閱讀問題,SQL提供了一種使用order by子句按升序對給定列排序結果的方法。基本句式爲:
選擇具有有序結果的查詢
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC;
當一個ORDER BY
指定的子句,每行被排序的α-數值基於指定的列的值。在某些數據庫中,您還可以指定排序規則以更好地對包含國際文本的數據進行排序。
通常與該ORDER BY
子句一起使用的另一個子句是LIMIT
和OFFSET
子句,它們是一種有用的優化,用於向數據庫指示您關注的結果的子集。這LIMIT
將減少要返回的行數,而可選項OFFSET
將指定從哪裏開始計算行數。句式結構爲
選擇有限行的查詢
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC
LIMIT num_limit OFFSET num_offset;
(2)練習題
#1.按照字母順序,不重複地列出所有皮克斯電影導演
SELECT DISTINCT director FROM movies
ORDER BY director ASC;
#2.列出Pixar最近發行的四部電影(按照發行日期倒序)
SELECT title, year FROM movies
ORDER BY year DESC
LIMIT 4;
#3.列出按照字母排序的Pixar前五部電影
SELECT TITLE,YEAR FROM movies
ORDER BY TITLE ASC
LIMIT 5;
#4.根據3,列出按照字母排序的Pixar下五部電影
SELECT title FROM movies
ORDER BY title ASC
LIMIT 5 OFFSET 5;