玖叶教程网

前端编程开发入门

MySQL学习笔记No.02

测试库(练习)

mysql中TIMESTAMPDIFF和TIMESTAMPADD函数的用法

TIMESTAMPDIFF

TIMERSTAMPDIFF语法:
TIMERSTAMPDIFF(interval,datetime_expr1,datetime_expr2)
?
说明:
该函数是返回datetime_expr1和datetime_expr2之间的整数差,其中单位有interval参数决定,interval的常用参数有:
FRAC_SECOND 时间间隔是毫秒
SECOND 时间间隔是秒
MINUTE 时间间隔是分钟
HOUR 时间间隔是小时
DAY 时间间隔是天
WEEK 时间间隔是周
MOUTH 时间间隔是月
QUARTER 时间间隔是季度
YEAR 时间间隔是年

示例一:

MariaDB [(none)]> select timestampdiff(hour,'2018-06-05 09:00:00','2018-06-15 09:00:00');
+-----------------------------------------------------------------+
| timestampdiff(hour,'2018-06-05 09:00:00','2018-06-15 09:00:00') |
+-----------------------------------------------------------------+
| 240 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)
?

示例二:

MariaDB [(none)]> select timestampdiff(day,'2018-06-05 09:00:00','2018-06-15 09:00:00');
+----------------------------------------------------------------+
| timestampdiff(day,'2018-06-05 09:00:00','2018-06-15 09:00:00') |
+----------------------------------------------------------------+
| 10 |
+----------------------------------------------------------------+
1 row in set (0.00 sec)
?

TIMESTAMPADD

TIMESTAMPADD语法:
TIMESTAMPADD(interval,int_expr,datetime_expr)
?
说明:
将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中。式中的interval和TIMESTAMPDIFF中列举的取值是一样的。

示例:

MariaDB [(none)]> select timestampadd(second,86400,'2018-06-15 09:00:00');
+--------------------------------------------------+
| timestampadd(second,86400,'2018-06-15 09:00:00') |
+--------------------------------------------------+
| 2018-06-16 09:00:00 |
+--------------------------------------------------+
1 row in set (0.00 sec)
?

msyql中CASE WHEN语法

MySQL中case when语句,用于计算条件列表并返回多个可能表达式之一。

CASE具有两种格式:简单CASE函数将某个表达式与一组简单表达式进行比较以确定结果。CASE搜索函数计算一组布尔表达式以确定结果。两种都支持可选的ELSE函数。

1)简单CASE函数

语法如下:

CASE input_expression 
WHEN when_expression THEN 
 result_expression [...n ] [ 
ELSE 
 else_result_expression 
END 

参数介绍

input_expression是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Microsoft SQL Server 表达式。
WHEN when_expression使用简单 CASE 格式时 input_expression 所比较的简单表达式。When_expression 是任意有效的 SQL Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。
占位符,表明可以使用多个 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。
THEN result_expression 当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值 TRUE 时返回的表达式。
result expression 是任意有效的 SQL Server 表达式。
ELSE else_result_expression当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。else_result_expression 是任意有效的 SQL Server 表达式。else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。
?
简单 CASE 函数:返回结果值介绍:
?
计算 input_expression,然后按指定顺序对每个 WHEN 子句的 input_expression = when_expression 进行计算。
返回第一个取值为 TRUE 的 (input_expression = when_expression) 的 result_expression。如果没有取值为 TRUE 的 input_expression = when_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。

2)CASE搜索函数

语法如下:

CASE 
WHEN Boolean_expression THEN 
 result_expression [...n ] [ 
ELSE 
 else_result_expression 
END 
?

参数介绍:

WHEN Boolean_expression 使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。结果类型从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型。有关更多信息,请参见数据类型的优先顺序。
?
CASE 搜索函数:返回结果值介绍:
按指定顺序为每个 WHEN 子句的 Boolean_expression 求值。返回第一个取值为 TRUE 的 Boolean_expression 的 result_expression。
如果没有取值为 TRUE 的 Boolean_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。

3)CASE WHEN例子介绍

1、仅带简单case的select语句

select 
 CASE good_type
WHEN '0' THEN
 '食品类'
WHEN '1' THEN
 '饮料类'
WHEN '2' THEN
 '日用品'
WHEN '3' THEN
 '鲜果类'
END AS good_type_now,
good_type,user_id,user_name
FROM 
 express.t_main_order
+---------------+-----------+---------+-----------+
| good_type_now | good_type | user_id | user_name |
+---------------+-----------+---------+-----------+
| 食品类 | 0 | 1 | tina |
| 食品类 | 0 | 2 | tige |
| 饮料类 | 1 | 3 | five |
| 日用品 | 2 | 4 | wate |
| 鲜果类 | 3 | 5 | fiww |
| 鲜果类 | 3 | 6 | www |
| 鲜果类 | 3 | 7 | wfiw |
+---------------+-----------+---------+-----------+
?

2、使用带有简单CASE函数和CASE搜索函数的select语句

在select语句中,CASE搜索函数允许根据比较值

select 
 CASE 
WHEN good_type<2 
 THEN '<2' 
WHEN good_type>=2 AND good_type<3 
 THEN '>=2 && <3' 
 ELSE '>=3' END AS good_now_type,
good_type,user_id,user_name 
FROM t_main_order;
+---------------+-----------+---------+-----------+
| good_now_type | good_type | user_id | user_name |
+---------------+-----------+---------+-----------+
| <2 | 0 | 1 | tina |
| <2 | 0 | 2 | tige |
| <2 | 1 | 3 | five |
| >=2 && <3 | 2 | 4 | wate |
| >=3 | 3 | 5 | fiww |
| >=3 | 3 | 6 | www |
| >=3 | 3 | 7 | wfiw |
+---------------+-----------+---------+-----------+
?

3)CASE的其他用法

select 
 CASE 
WHEN good_type<2 
 THEN '<2' 
WHEN good_type>=2 AND good_type<3 
 THEN '>=2 && <3' ELSE '>=3' 
END AS good_now_type,
 count(*) AS num_count 
FROM t_main_order 
GROUP BY good_now_type 
ORDER BY num_count;
+---------------+-----------+
| good_now_type | num_count |
+---------------+-----------+
| >=2 && <3 | 1 |
| <2 | 3 |
| >=3 | 3 |
+---------------+-----------+
?

left join、right join、inner join的区别

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

inner join(等值连接) 只返回两个表中联结字段相等的行

举例如下:


表A记录如下:

aID aNum

1 a20050111

2 a20050112

3 a20050113

4 a20050114

5 a20050115

表B记录如下:

bID bName

1 2006032401

2 2006032402

3 2006032403

4 2006032404

8 2006032408


1.left join

sql语句如下:

select * from A

left join B

on A.aID = B.bID

结果如下:

aID aNum bID bName

1 a20050111 1 2006032401

2 a20050112 2 2006032402

3 a20050113 3 2006032403

4 a20050114 4 2006032404

5 a20050115 NULL NULL

(所影响的行数为 5 行)

结果说明:

left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.

换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).

B表记录不足的地方均为NULL.


2.right join

sql语句如下:

select * from A

right join B

on A.aID = B.bID

结果如下:

aID aNum bID bName

1 a20050111 1 2006032401

2 a20050112 2 2006032402

3 a20050113 3 2006032403

4 a20050114 4 2006032404

NULL NULL 8 2006032408

(所影响的行数为 5 行)

结果说明:

仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.


3.inner join

sql语句如下:

select * from A

innerjoin B

on A.aID = B.bID

结果如下:

aID aNum bID bName

1 a20050111 1 2006032401

2 a20050112 2 2006032402

3 a20050113 3 2006032403

4 a20050114 4 2006032404

结果说明:

很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.


注:

LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2

说明:table1, table2参数用于指定要将记录组合的表的名称。

field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。

compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。

如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误.

其他常用函数

DATE_FORMAT
GROUP BY
ORDER BY
LIMIT
AS
DATE
UNION
UNION ALL
AND
IN
?

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言