一、建立用戶並受權 java
建立用戶:create user test identified by hw 用戶受權:grant connect, resource to hw
二、建表語句web
CREATE TABLE webSites( id INT PRIMARY KEY, name VARCHAR2(30), url VARCHAR2(100), alexa INT, country VARCHAR2(30) ); INSERT INTO webSites(id,name,url,alexa,country) VALUES (1,'Google','http://www.google.com/',1,'USA'); INSERT INTO webSites(id,name,url,alexa,country) VALUES (2,'淘寶','http://www.taobao.com/',13,'CN'); INSERT INTO webSites(id,name,url,alexa,country) VALUES (3,'天貓','http://www.tianmao.com/',16,'CN'); INSERT INTO webSites(id,name,url,alexa,country) VALUES (4,'微博','http://www.weibo.com/',20,'CN'); INSERT INTO webSites(id,name,url,alexa,country) VALUES (5,'Facebook','http://www.facebook.com/',3,'USA'); INSERT INTO webSites(id,name,url,alexa,country) VALUES (7,'stackoverflow','http://www.stackoverflow.com/',0,'IND'); CREATE TABLE accessLog( aid INT PRIMARY KEY, siteId INT, count INT, dateTime date ); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (1,1,45,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (2,3,100,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (3,1,230,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (4,2,10,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (5,5,205,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (6,4,13,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (7,3,220,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (8,5,545,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (9,3,201,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); INSERT INTO accessLog(aid,siteId,count,dateTime) VALUES (10,8,201,to_timestamp(to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS.FF')); COMMIT;
SELECT * FROM webSites; SELECT * FROM accessLog;
三、SQL 鏈接(JOIN) 用於把來自兩個或多個表的行結合起來。數據庫
下圖展現了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相關的 7 種用法。ide
(1) INNER JOIN從多個表中返回知足 JOIN 條件的全部行,關鍵字在表中存在至少一個匹配時返回行,INNER JOIN 與 JOIN 是相同的。測試
SELECT
w.id,
w.name,
w.url,
w.alexa,
w.country,
a.aid,
a.siteId,
a.count,
a.datetime
FROM Websites w
INNER JOIN accessLog a
ON w.id = a.siteId
ORDER BY a.count
註釋:INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。若是 "Websites" 表中的行在 "access_log" 中沒有匹配,則不會列出這些行。google
不一樣的 SQL JOINurl
(2)LEFT JOIN 關鍵字從左表(table1)返回全部的行,即便右表(table2)中沒有匹配。若是右表中沒有匹配,則結果爲 NULL。spa
SELECT
w.id,
w.name,
w.url,
w.alexa,
w.country,
a.aid,
a.site_id,
a.count,
a.datetime
FROM Websites w
LEFT JOIN access_log a
ON w.id = a.site_id
ORDER BY a.count
註釋:LEFT JOIN 關鍵字從左表(webSites)返回全部的行,即便右表(accessLog)中沒有匹配。 3d
註釋:在某些數據庫中,LEFT JOIN 稱爲 LEFT OUTER JOIN。blog
(3)RIGHT JOIN 關鍵字從右表(table2或accessLog)返回全部的行,即便左表(table1或webSites)中沒有匹配。若是左表中沒有匹配,則結果爲 NULL。
SELECT
w.id,
w.name,
w.url,
w.alexa,
w.country,
a.aid,
a.siteId,
a.count,
a.datetime
FROM Websites w
RIGHT JOIN accessLog a
ON w.id = a.siteId
ORDER BY a.count
註釋:在某些數據庫中,RIGHT JOIN 稱爲 RIGHT OUTER JOIN。
(4)FULL OUTER JOIN 關鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行.
FULL OUTER JOIN 關鍵字結合了 LEFT JOIN 和 RIGHT JOIN 的結果。
SELECT
w.id,
w.name,
w.url,
w.alexa,
w.country,
a.aid,
a.siteId,
a.count,
a.datetime
FROM Websites w
FULL OUTER JOIN accessLog a
ON w.id = a.siteId
ORDER BY a.count DESC
註釋:FULL OUTER JOIN 關鍵字返回左表(WebSites)和右表(accessLog)中全部的行。若是 "Websites" 表中的行在 "accessLog" 中沒有匹配或者 "accessLog" 表中的 行在 "WebSites" 表中沒有匹配,也會列出這些行。
註解:本次測試數據庫是Oracle,MySQL中不支持 FULL OUTER JOIN。
(5)
SELECT w.id, w.name, w.url, w.alexa, w.country, a.aid, a.siteId, a.count, a.datetime FROM Websites w LEFT JOIN accessLog a ON w.id = a.siteId WHERE a.siteId IS NULL
(6)
SELECT w.id, w.name, w.url, w.alexa, w.country, a.aid, a.siteId, a.count, a.datetime FROM Websites w RIGHT JOIN accessLog a ON w.id = a.siteId WHERE w.id IS NULL
(7)FULL OUTER JOIN------- IS NULL返回關鍵字返回左表(WebSites)和右表(accessLog)中空行。
SELECT w.id, w.name, w.url, w.alexa, w.country, a.aid, a.siteId, a.count, a.datetime FROM Websites w FULL OUTER JOIN accessLog a ON w.id = a.siteId WHERE w.id IS NULL OR a.siteId IS NULL