1. 程式人生 > >SQL複習——高階語法

SQL複習——高階語法

SQL SELECT TOP 字句

SELECT TOP 字句用於規定要返回的記錄數目,對於擁有數千條記錄的大型表來說是非常有用的。

SELECT TOP number/percent column_name(s)
FROM table_name;

SQL LIKE操作符

LIKE操作符用於在WHERE字句中搜索列中的指定模式

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
#例項
SELECT * FROM Websites
WHERE name LIKE 'G%';
SELECT * FROM Websites
WHERE name NOT LIKE '%oo%';

SQL 萬用字元

萬用字元可用於替代字串中的任何其他字元

萬用字元 描述
% 替代零個或者多個字元
_ 替代一個字元
[charlist] 字元列中的任何單一字元
[^charlist] 不在字元列中的任何單一字元
SELECT * FROM Websites
WHERE url LIKE 'https%';
SELECT * FROM Websites
WHERE url LIKE '%oo%';
SELECT * FROM Websites
WHERE name LIKE '_oogle'; 

SQL IN 操作符

IN 操作符允許在WHERE字句中規定多個值

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
SELECT * FROM Websites
WHERE name IN ('Google','菜鳥教程');

SQL BETWEEN 操作符

BETWEEN 操作符用於選取介於兩個值之間的資料範圍內的值

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
SELECT * FROM Websites
WHERE alexa BETWEEN 1 AND 20;
SELECT * FROM Websites
WHERE alexa NOT BETWEEN 1 AND 20;
#帶有IN的BETWEEN操作符例項
SELECT * FROM Websites
WHERE (alexa BETWEEN 1 AND 20)
AND country NOT IN ('USA','IND');
#帶有文字值的BETWEEN 操作符例項
SELECT * FROM Websites
WHERE name BETWEEN  'A' AND 'H';
#帶有日期值的BETWEEN操作符例項
SELECT * FROM access_log
WHERE date BETWEEN '2016-05-10' AND ‘2016-05-14’

SQL 別名

可以為表明稱或者列名稱指定別名,基本上建立別名是為了讓列的名稱更加具有可讀性。

SELECT column_name AS alias_name
FROM table_name;
SELECT column_name(s)
FROM table_name AS alias_name;
SELECT name AS n, country AS c
FROM Websites;
#將三個列結合在一起,並建立一個新的別名
SELCT name,CONCAT(url,','alexa,',',country) AS site_info
FROM Websites;
#通過使用別名讓語句更簡短一些
SELECT w.name,w.url,a.count,a.date
FROM Websites AS w,access_log AS a
WHERE w.id=a.site_id and w.name='菜鳥教程';

SQL 連線(JOIN)

用於將兩個或多個表的行結合起來,基於這些表之間的共同欄位。最常見的JOIN型別:SQL INNER JOIN(簡單的JOIN) 從多個表中返回滿足條件的所有行。

SELECT Websites.id,Websites.name,access_log.count,access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;

SQL INNER JOIN 關鍵字

INNER JOIN 關鍵字在表中存在至少一個匹配時返回行

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

在使用join時,on和where條件的區別如下: 1.on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。 2.where條件是在臨時表生成好之後,再對臨時表進行過濾、這是已經沒有left join的含義(必須返回左邊表的記錄了),條件不為真的就全部過濾掉。

SQL LEFT JOIN 關鍵字

LEFT JOIN 關鍵字從左表返回所有行,即使右表中沒有匹配。如果右表中沒有匹配,則結果為NULL。

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

SQL RIGHT JOIN 關鍵字

RIGHT JOIN 關鍵字從右表(table2)返回所有行,即使左表中沒有匹配。如果左表中沒有匹配,則結果為NULL。

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

SQL FULL OUTER JOIN關鍵字

FULL OUTER JOIN 關鍵字只要左表和右表其中一個表存在匹配,則返回行。

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;