天天看點

mysql之SQL入門與提升(四)——終結篇,函數

一.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;

mysql之SQL入門與提升(四)——終結篇,函數
mysql之SQL入門與提升(四)——終結篇,函數

 3.2.5 SELECT COUNT(DISTINCT site_id) AS nums FROM access_log;

mysql之SQL入門與提升(四)——終結篇,函數

3.3取第一行的資料

SELECT name FROM Websites

ORDER BY id ASC

LIMIT 1;

mysql之SQL入門與提升(四)——終結篇,函數

 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;

mysql之SQL入門與提升(四)——終結篇,函數
mysql之SQL入門與提升(四)——終結篇,函數
mysql之SQL入門與提升(四)——終結篇,函數

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;

mysql之SQL入門與提升(四)——終結篇,函數

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(?, '%')

好了,資料庫入門到此為止啦,小夥伴們請繼續關注