SQL
自學
程式語言
若想取得資料表中所有欄位的資料時,可以用「*」符號來指定。
表中若有內容重複的資料列並非好事,可能會造成查詢資料時,得到重複的資料;因此,會使用「DISTINCT」除去重複的資料。
決定要查詢的資料表。
在FROM 子句中需要寫上資料表名:table_name
分為內結合(INNER JOIN)及外結合(LEFT/RIGHT JOIN)。
條件式則皆在「ON」之後寫,
範例
:資料表 A 和 B ,以 A.t = B.t 的條件式進行內結合
3個(含)以上的資料表結合
用括號將INNER JOIN… ON… 括號起來,使他被當成是一個資料表並進行結合。
範例
:將資料表 A、B 和 C 結合
選自 HackerRank 範例
:
選自 HackerRank 範例
:
使用 LEFT JOIN 及 RIGHT JOIN 時,要注意資料表寫的順序。
如範例,「A RIGHT JOIN B」會把寫在右側的 B 資料表的所有資料留下。
因為屬於外結合,所以亦可用代表外部的「OUTER」來寫。
範例
:省略 OUTER 和不省略的寫法
「FULL OUTER JOIN」類似合併使用LEFT、RIGHT JOIN,也是外結合的一種。
範例
:用 FULL OUTER 進行結合
「CROSS JOIN」能進行「交叉結合」,沒有結合條件。
範例
:將 A 和 B 資料表做交叉結合
若結合之條件是同名的欄位,可以用「USING」指定結合條件。
範例
:將 A 和 B 資料表依 a 欄位進行內結合
指定抽出或結合條件。
寫上選擇列資料的條件式;如此只有條件符合的列資料才會作為結果被傳回。
除了欄位名,亦可用運算子和函式來寫。
想要取得符合某種條件的列資料。
範例
:將商品資料表中,單價為100的商品列出
可以指定要群組化的欄位名,或是含有欄位名的陳述式。
範例
:將資料表 foo 中的 a 欄位進行群組化,在統計其列數
範例
:合計投票結果
選自 HackerRank 範例
:
OLAP 合計選項
用統計函式的結果值作為條件來篩選
含有統計函式的條件式,不能使用WHERE子句的條件式來寫
範例
:群組合計值大於100者,才傳回作為查詢結果。
選自 HackerRank 範例
:
指定取得之資料的順序
範例
:將資料表 A 中的所有資料依 a 欄位之值,由小到大排序範例
:將資料表 A 中的所有資料依 a 欄位之值,由大到小排序
依資料庫種類不同而異。
在 SQL Server、MySQL 和 Access中,會被當作最小值排序。
在 Oracle、DB2、PostgrSQL中,NULL則會被當作最大值來排序。
範例
:將資料表 A 中的所有資料依 a 欄位之值,由大到小排序,NULL值排在最後 Oracle
可以指定欄位的編號,欄位編號是從1開始的任意數值。
範例
:依要選取之欄位名清單中的第2個欄位作排序
範例
:依要選取之欄位名清單中的第2個運算是作排序
選自 HackerRank 範例
:
MySQL
限制查詢結果
讓SELECT查詢到的資料不全部全回,而只傳回特定的部分。
語法
count:取得的資料筆(列)數
start:從第幾筆(列)資料開始使用
範例
:只取得所有查詢結果中,第5列開始的3列資料。
範例
:只取得查詢結果排序後的最前頭3筆資料。
選自 HackerRank 範例
:
SELECT 中的 SELECT 命令
語法
利用子查詢能進行複雜的查詢動作。
範例
:將bar資料表中b欄位之最大值拿來與foo資料表之a值表較,然後列出foo資料表中兩值相同的資料。
範例
:將select 命令所得的結果存到變數中後,再於下一個select命中使用。
選自 HackerRank 範例
:
範例
:子查詢依存於主查詢的情況。
指定了bar之b欄位最大值,必須從bar和foo資料表中的c欄位值相同的資料裡找出。
選自 HackerRank 範例
:
選自 HackerRank 範例
:
範例
:在foo資料表中,若有1筆以上的資料其a欄位值和bar資料表中的a欄位值相同,就把該筆資料傳回。
面對數筆有意義資料要匯總成橫式資料時,可以考慮使用 PIVOT 來扭轉資料,讓資料呈現上更貼近人性。
語法
選自 HackerRank 範例
:
運算子 | 意思 |
---|---|
< | 小於 |
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
<> | 不相等 |
!= | 不相等 |
主要用在SELECT命令的WHERE子句中。
運算式若含有NULL值,就無法獲得確實的結果。
選自 HackerRank 範例
:
選自 HackerRank 範例
:
相關語法
:COUNT
比對搜尋
Oracle | SQL Server | DB2 | MySQL | |
---|---|---|---|---|
任意字串 | % | % | % | % |
任意單一文字 | _ | _ | _ | _ |
指定範圍中的單一文字 | 無 | [a-f] | 無 | 無 |
指定範圍外的單一文字 | 無 | [^a-f] | 無 | 無 |
選自 HackerRank 範例
:
檢索 % 或 _ 萬用字元符號時,要進行「跳脫」的動作。
\
,寫成LIKE '%\%'
條件,便可用來查詢 100% 或 25% 此類的字串資料。LIKE '%e%' ESCAPE 'e'
,是指定將e作為跳脫文字。選自 HackerRank 範例
:
否定(非)
選自 HackerRank 範例
:
邏輯的且
「AND」運算子在其左右兩邊的值都為TRUE,會傳回TRUE。
選自 HackerRank 範例
:
CASE 後寫上作為轉換來源的陳述式
WHEN 後寫上轉換來源實際上的值
當轉換來源之值符合WHEN後所寫的值,THEN後所記述的值就會作為結果回傳
WHEN後之值不符合時,所要傳回的結果值,寫在ELSE後
最後寫上END,CASE的運算結束
範例
:將通訊錄資料表的性別資料轉換成英文表示的SELECT查詢。
範例
:檢索出年齡在20歲以上的,標為成人,不滿20歲的標為未成年。
範例
:變換NULL值。
選自 HackerRank 範例
:
求平均值 Average
選自 HackerRank 範例
:
算出資料筆數
範例
:計算通訊錄資料表的資料筆數。
選自 HackerRank 範例
:
求最大值 Maximum及最小值 Minimum
選自 HackerRank 範例
:
選自 HackerRank 範例
:
求合計值
範例
:算出年齡欄位的合計值。
選自 HackerRank 範例
:
選自 HackerRank 範例
:
結合字串
會將參數所指定的字串結合在一起,並傳回結果值。
範例
:利用CONCAT來結合a欄位和b欄位的字串值。
範例
:利用CONCAT來結合a,b,c各欄位的字串值。
選自 HackerRank 範例
:
選自 HackerRank 範例
:
轉換成小寫
s:字串陳述式
只有英文字母可以做為轉換對象;反之,欲將小寫文字轉成大寫,就要用「UPPER」函式。
範例
:將欄位a 之字串都轉換成小寫。
重複字串,會將指定給 s 參數的字串重複 n 此後傳回。
s:字串陳述式
n:數值陳述式
範例
:將欄位a的字串值,重複欄位b之值的次數後,建立新字串。
置換字串,把字串s中含有的字串t,通通置換成字串u
s:要進行置換的主要字串陳述式
t:置換前要找出的字串陳述式
u:要置換進去的字串陳述式
範例
:將欄位a的字串值裡的欄位b之字串值,都換成字串c。
反轉字串,把s參數所提供的字串,左右反轉後,傳回新產生的字串
範例
:將欄位a的字串資料值反轉。
抽出字串的某部分
n:要抽出文字之起始位置
m:要抽出之文字數
選自 HackerRank 範例
:
取得字串長度
可以算出字串的「文字數」或是字串的「位元組數」
當字串資料為固定長度的CHAR資料類型,SQL Server中的LEN函式會忽略右側多餘的空白數,指傳回有效文字數。
範例
:算出欄位 a 的字串長度
SQL Server中的LENGTH函式會傳回字串的位元組數。
範例
:算出欄位 a 的字串長度
轉換資料類型,是由ANSI所規定的。
語法
e:要轉換的值
t:轉換成的類型
範例
:將數值資料轉換成字串資料類型。範例
:將字串資料轉換成日期資料類型。
求絕對值 Absolute
語法
選自 HackerRank 範例
:
傳回無條件進位後的整數值
會算出參數n 無條件進位後之整數值(大於等於參數n之最小整數)。
為無條件進位,而非小數點後四捨五入。Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
選自 HackerRank 範例
:
傳回無條件捨去後的整數值
會算出參數n 無條件捨去後之值(小於等於參數n之最大整數)。
範例
:將欄位 a 之值小數點以下無條件捨去。
選自 HackerRank 範例
:
相關語法
:AVG
取中位數,ORACLE適用。
選自 HackerRank 範例
:
取得餘數
語法
n:被除數之值
m:除數之值
範例
:求出欄位a / 欄位b之餘數。
在SQL Sercer中,沒有MOD函式可用,要用「%」來計算餘數。
四捨五入
n:任意數值陳述式
m:要在小數點以下保留幾位數
t:執行之形式(四捨五入或無條件捨去)
範例
:把欄位a之值小數點以下的部分四捨五入。
範例
:把欄位a之值到小數點以下第2位四捨五入,保留到小數點以下第1位。
選自 HackerRank 範例
:
選自 HackerRank 範例
:
選自 HackerRank 範例
:
選自 HackerRank 範例
:
平方根
語法
n 不能是負數。
平方
語法
也可以用「POWER(n, 2)」
選自 HackerRank 範例
:
要代入值到變數中,可以寫成「SELECT @variable_name = 值」,以SELECT命令來代入;或者,「SET @variable_name = 值」,利用SET命令來代入。
範例
:定義i, j兩個變數,並把1代入i,把2代入j。
選自 HackerRank 範例
:
語法
範例
:用WHILE將變數i從0到100為止,進行迴圈處理,並以print來輸出i之值。
選自 HackerRank 範例
:
選自 HackerRank 範例
:
語法
選自 HackerRank 範例
: