SQL--Advanced tutorials

LIKE--模糊查詢

模糊查詢

選取 url 以字母 https開始的全部網站sql

SELECT * FROM Websites
WHERE url LIKE 'https%';

選取 url 包含模式 "oo" 的全部網站數據庫

SELECT * FROM Websites
WHERE url LIKE '%oo%';

JOIN--外鏈接查詢

SQL JOIN 子句:函數

用於把來自兩個或多個表的行結合起來,==基於這些表之間的共同字段==。網站

最多見的 JOIN 類型:url

SQL INNER JOIN(簡單的 JOIN)。 SQL INNER JOIN 從多個表中返回知足 JOIN 條件的全部行。code

"Websites" 表中的 "id" 列指向 "access_log" 表中的字段 "site_id"。上面這兩個表是經過 "site_id" 列聯繫起來的。圖片

而後,若是咱們運行下面的 SQL 語句(包含 INNER JOIN):it

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

執行以上 SQL 輸出結果以下:table

img

INNER JOIN--內鏈接查詢

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

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

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

**註釋:**INNER JOIN 與 JOIN 是相同的。

SQL INNER JOIN

LEFT JOIN--右鏈接

LEFT JOIN 關鍵字從左表(table1)返回全部的行,即便右表(table2)中沒有匹配。若是右表中沒有匹配,則結果爲 NULL。

SQL LEFT JOIN 語法

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

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

**註釋:**在某些數據庫中,LEFT JOIN 稱爲 LEFT OUTER JOIN。

SQL LEFT JOIN

SELECT Websites.name, access_log.count, access_log.date
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;

執行以上 SQL 輸出結果以下:

img

VIEWS--SQL 視圖

視圖是可視化的表。

DATAS--SQL內建函數

內建函數

  • [x] SQL CREATE TABLE Orders ( OrderId int NOT NULL, ProductName varchar(50) NOT NULL, OrderDate datetime NOT NULL DEFAULT NOW(), PRIMARY KEY (OrderId) )

MySQL 使用下列數據類型在數據庫中存儲日期或日期/時間值:

  • DATE - 格式:YYYY-MM-DD
  • DATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
  • YEAR - 格式:YYYY 或 YY

GROUP BY--多表查詢

  • [x] SQL SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;

GROUP BY 簡單應用

統計 access_log 各個 site_id 的訪問量:

實例

SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

執行以上 SQL 輸出結果以下:

img


SQL GROUP BY 多表鏈接

如今咱們想要查找每一個送貨員配送的訂單數目。

下面的 SQL 語句統計全部網站的訪問的記錄數:

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;

執行以上 SQL 輸出結果以下:

img

##HAVING--組合篩選

在 SQL 中增長 HAVING 子句緣由是,WHERE 關鍵字沒法與聚合函數一塊兒使用。

HAVING 子句可讓咱們篩選分組後的各組數據。

  • [x] SQL SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value;

如今咱們想要查找總訪問量大於 200 的網站。

咱們使用下面的 SQL 語句:

實例

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log INNER JOIN Websites ON access_log.site_id=Websites.id) GROUP BY Websites.name HAVING SUM(access_log.count) > 200;

執行以上 SQL 輸出結果以下:

img

相關文章
相關標籤/搜索