一.SQL Aggregate (聚合)函數
SQL Aggregate 函數計算從列中取得的值,傳回一個單一的值。
- AVG() - 傳回平均值
- COUNT() - 傳回行數
- FIRST() - 傳回第一個記錄的值
- LAST() - 傳回最後一個記錄的值
- MAX() - 傳回最大值
- MIN() - 傳回最小值
- SUM() - 傳回總和
二.SQL Scalar 函數
SQL Scalar 函數基于輸入值,傳回一個單一的值。
- UCASE() - 将某個字段轉換為大寫
- LCASE() - 将某個字段轉換為小寫
- MID() - 從某個文本字段提取字元,MySql 中使用
- SubString(字段,1,end) - 從某個文本字段提取字元
- LEN() - 傳回某個文本字段的長度
- ROUND() - 對某個數值字段進行指定小數位數的四舍五入
- NOW() - 傳回目前的系統日期和時間
- FORMAT() - 格式化某個字段的顯示方式
三執行個體
3.1SQL AVG() 執行個體
3.1.1下面的 SQL 語句從 "access_log" 表的 "count" 列擷取平均值:
SELECT AVG(count) AS CountAverage FROM access_log;
3.1.2下面的 SQL 語句選擇通路量高于平均通路量的 "site_id" 和 "count":
SELECT site_id, count FROM access_log
WHERE count > (SELECT AVG(count) FROM access_log);
3.2SQL COUNT() 函數
3.2.1有此字段的行數
SELECT COUNT(column_name) FROM table_name;
3.2.2行數總和
SELECT COUNT(*) FROM table_name;
3.2.3統計某字段的值不重複的和
SELECT COUNT(DISTINCT column_name) FROM table_name;
3.2.4執行個體,同一id的通路統計次數
SELECT COUNT(count) AS nums FROM access_log
WHERE site_id=3;

3.2.5 SELECT COUNT(DISTINCT site_id) AS nums FROM access_log;
3.3取第一行的資料
SELECT name FROM Websites
ORDER BY id ASC
LIMIT 1;
3.4取最後一行的資料
SELECT column_name FROM table_name
ORDER BY column_name DESC
3.5MAX() 函數
MAX() 函數傳回指定列的最大值
3.5.1下面的 SQL 語句從 "Websites" 表的 "alexa" 列擷取最大值
SELECT MAX(alexa) AS max_alexa FROM Websites;
3.6MIN() 函數
MIN() 函數傳回指定列的最小值。
SELECT MIN(alexa) AS min_alexa FROM Websites;
3.7SUM() 函數傳回數值列的總數。
SELECT SUM(count) AS nums FROM access_log;
3.8GROUP BY 語句
GROUP BY 語句用于結合聚合函數,根據一個或多個列對結果集進行分組。
SQL GROUP BY 文法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
3.8.1單表操作 統計 access_log 各個 site_id 的通路量
SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;
3.8.2多表操作 下面的 SQL 語句統計有記錄的網站的記錄數量
下面的 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;
3.9HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與聚合函數一起使用。
HAVING 子句可以讓我們篩選分組後的各組資料。
SQL HAVING 文法
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
3.9.1現在我們想要查找總通路量大于 200 的網站
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;
3.9.2現在我們想要查找總通路量大于 200 的網站,并且 alexa 排名小于 200
SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200
3.10UCASE() 函數
下面的 SQL 語句從 "Websites" 表中選取 "name" 和 "url" 列,并把 "name" 列的值轉換為大寫
SELECT UCASE(name) AS site_title, url FROM Websites;
3.11LCASE() 函數
LCASE() 函數把字段的值轉換為小寫。
下面的 SQL 語句從 "Websites" 表中選取 "name" 和 "url" 列,并把 "name" 列的值轉換為小寫:
SELECT LCASE(name) AS site_title, url
FROM Websites;
3.12MID() 函數
MID() 函數用于從文本字段中提取字元。
column_name | 必需。要提取字元的字段。 |
start | 必需。規定開始位置(起始值是 1)。 |
length | 可選。要傳回的字元數。如果省略,則 MID() 函數傳回剩餘文本。 |
3.12.1下面的 SQL 語句從 "Websites" 表的 "name" 列中提取前 4 個字元
SELECT MID(name,1,4) AS ShortTitle FROM Websites;
3.13LEN() 函數
LEN() 函數傳回文本字段中值的長度
下面的 SQL 語句從 "Websites" 表中選取 "name" 和 "url" 列中值的長度:
SELECT name, LENGTH(url) as LengthOfURL FROM Websites;
3.14ROUND() 函數
ROUND() 函數用于把數值字段舍入為指定的小數位數。
參數 | 描述 |
---|---|
必需。要舍入的字段。 | |
decimals | 必需。規定要傳回的小數位數。 |
3.15NOW() 函數
下面的 SQL 語句從 "Websites" 表中選取 name,url,及當天日期:
SELECT name, url, Now() AS date FROM Websites;
3.16FORMAT() 函數
FORMAT() 函數用于對字段的顯示進行格式化。
SQL FORMAT() 文法
SELECT FORMAT(column_name,format) FROM table_name;
必需。要格式化的字段。 | |
format | 必需。規定格式。 |
下面的 SQL 語句從 "Websites" 表中選取 name, url 以及格式化為 YYYY-MM-DD 的日期:
SELECT name, url, DATE_FORMAT(Now(),'%Y-%m-%d') AS date FROM Websites;
四.項目實戰之concat函數運用
CONCAT函數做模糊查詢:
WHERE a.sys_xzqh=b.xzqh_id AND a.sys_scbj = '0' AND b.node_id LIKE CONCAT(?, '%')
好了,資料庫入門到此為止啦,小夥伴們請繼續關注