mysql基础教程(一)-----常见函数

一、MySQL基本函数

1、MySQL 字符串函数

 常用函数:

 CONCAT(s1,s2...sn)    字符串 s1,s2 等多个字符串合并为一个字符串

 函数  描述  实例
 CONCAT(s1,s2...sn) 字符串 s1,s2 等多个字符串合并为一个字符串

合并多个字符串

SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook")AS ConcatenatedString;

CONCAT_WS(x, s1,s2...sn)

CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上 x,x 可以是分隔符

合并多个字符串,并添加分隔符:

SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString;

 

FORMAT(x,n)

 函数可以将数字 x 进行格式化 "#,###.##", 将 x 保留到小数点后 n 位,最后一位四舍五入。  格式化数字 "#,###.##" 形式:

SELECT FORMAT(250500.5634, 2);     -- 输出 250,500.56

 LOWER(s)  将字符串 s 的所有字母变成小写字母  字符串 RUNOOB 转换为小写:

SELECT LOWER('RUNOOB') -- runoob

SUBSTR(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串

从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:

SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO

SUBSTRING(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串

从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:

SELECT SUBSTRING("RUNOOB", 2, 3) AS ExtractString; -- UNO

TRIM(s) 去掉字符串 s 开始和结尾处的空格

去掉字符串 RUNOOB 的首尾空格:

SELECT TRIM(' RUNOOB ') AS TrimmedString;

UCASE(s) 将字符串转换为大写

将字符串 runoob 转换为大写:

SELECT UCASE("runoob"); -- RUNOOB

 UPPER(s)  将字符串转换为大写  将字符串 runoob 转换为大写:

SELECT UPPER("runoob"); -- RUNOOB

2、MySQL 数字函数

 函数  描述  实例
COUNT(expression) 返回查询的记录总数,expression 参数是一个字段或者 * 号

返回 Products 表中 products 字段总共有多少条记录:

SELECT COUNT(ProductID) AS NumberOfProducts FROM Products;

select count(l.second_prod_code='cash_short' or null)   短期个数FROM Products

SUM(expression) 返回指定字段的总和

计算 OrderDetails 表中字段 Quantity 的总和:

SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;

select sum(l.second_prod_code='cash_short' ) 短期个数 FROM Products

 AVG(expression)  返回一个表达式的平均值,expression 是一个字段  返回 Products 表中Price 字段的平均值:

SELECT AVG(Price) AS AveragePrice FROM Products;

 TRUNCATE(x,y)  返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)  SELECT TRUNCATE(1.23456,3) -- 1.234

3、MySQL 日期函数

 函数  描述  实例
CURDATE() 返回当前日期

SELECT CURDATE();
-> 2018-09-19

CURRENT_DATE() 返回当前日期

SELECT CURRENT_DATE();
-> 2018-09-19

 DATEDIFF(d1,d2)  计算日期 d1->d2 之间相隔的天数

 SELECT DATEDIFF('2001-01-01','2001-02-02');

-> -32
 TIMEDIFF(time1, time2)   计算时间差值  

SELECT TIMEDIFF("13:10:11", "13:10:10");
-> 00:00:01

 DATE_FORMAT(d,f)   按表达式 f的要求显示日期 d

SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r')
-> 2011-11-11 11:11:11 AM(%Y 年,4 位  %y 年,2 位。

%M 月名   %m 月,数值(00-12)。%D 带有英文前缀的月中的天

%d 月的天,数值(00-31) %e 月的天,数值(0-31)

ADDDATE(d,n)

计算起始日期 d 加上 n 天的日期

(天数可正可负)(类似的函数有ADDTIME(t,n)时间 t 加上 n 秒的时间)

SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
->2017-06-25

4、MySQL 高级函数

 函数  描述  实例

CASE expression
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE result

CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1,

如果 condition2 成立,则返回 result2,当全部不成立则返回 result,

而当有一个成立之后,后面的就不执行了。

select l.loan_number,second_prod_code,admin_rate aa,
case second_prod_code
when 'short' then admin_rate*2
when 'long' then admin_rate*3
when 'old_short' then admin_rate*4
when 'old_long' then admin_rate*4
when 'tra_short' then admin_rate*4
when 'tra__long' then admin_rate*4

else 0

end 

from finance.loan_detail l group by l.loan_number, l.second_prod_code ;

 COALESCE(expr1, expr2, ...., expr_n)

返回参数中的第一个非空表达式(从左向右)

 SELECT COALESCE(NULL, NULL, NULL, 'runoob.com', NULL, 'google.com');

-> runoob.com

 IF(expr,v1,v2) 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。  SELECT IF(1 > 0,'正确','错误') 

->正确

IFNULL(v1,v2) 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。

SELECT IFNULL(null,'Hello Word')
->Hello Word

     

二、分组函数

• AVG()

• COUNT()

• MAX()

• MIN()

• SUM()

GROUP BY 子句语法
1、WHERE一定放在FROM后面

2、在SELECT 列表中所有未包含在组函数中的列都应该包含 在 GROUP BY 子句中。
3、包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
4、在GROUP BY子句中包含多个列

 三、多表查询

1、等值连接 

 2、内连接

– 内连接 [inner] join on

 

 3、 外连接

  • 左外连接 left [outer] join on

  • 右外连接 right [outer] join on

注:full join在mysql中不好使,oracle中支持。mysql可以通过left join + union + right join实现(利用union的去重机制)

原文地址:https://www.cnblogs.com/jimmy2019/p/11660264.html