函数
函数种类:
算术函数
字符串函数
日期函数
转换函数
聚合函数
1. 算术函数
+ - * /
abs --绝对值
mod(被除数,除数) --求余
round(对象数值, 保留小数位数) --四舍五入
2. 字符串函数
concat(str, str2 ,...) -- 字符串拼接
length(字符串) --计算长度
注意: 中文一个字相当于两个字节,一个半角字符一个字节
没有SQL 还有 char_length()函数
lower(字符串)
upper()
replace(对象字符,替换前字符,替换后字符)
substring(对象字符串 from 截取的起始位置 for 截取的字符数 )
3. 日期函数
mysql> select current_date;+--------------+
| current_date |
+--------------+
| 2019-07-08 |
+--------------+
1 row in set (0.03sec)
mysql> select current_time;+--------------+
| current_time |
+--------------+
| 10:38:43 |
+--------------+
1 row in set (0.02sec)
mysql> select current_timestamp;+---------------------+
| current_timestamp |
+---------------------+
| 2019-07-08 10:39:07 |
+---------------------+
1 row in set (0.04 sec)
3.2 截取日期元素
extract(日期元素 from 日期)
mysql> select current_timestamp,-> extract(year from current_timestamp) as year,-> extract(month from current_timestamp) as month,-> extract(day from current_timestamp) as day,-> extract(hour from current_timestamp) ashour,-> extract(minute from current_timestamp) asminute,-> extract(second from current_timestamp) assecond;+---------------------+------+-------+------+------+--------+--------+
| current_timestamp | year | month | day | hour | minute | second |
+---------------------+------+-------+------+------+--------+--------+
| 2019-07-08 11:01:10 | 2019 | 7 | 8 | 11 | 1 | 10 |
+---------------------+------+-------+------+------+--------+--------+
1 row in set (0.03 sec)
4. 转换函数
字符串 ----> 数值
select cast( as signed integer) as
字符串 ----->日期
select cast( as date ) as
将null ----->其他值
coalesce(数据1, 数据2,......) --- 如果有NULL 则转换为对于数据字符 ,没有不会转换
mysql> select * fromproduct;+------------+--------------+--------------+------------+----------------+-------------+------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date | co |
+------------+--------------+--------------+------------+----------------+-------------+------+
| 0001 | T恤 | 衣服 | 1000 | 500 | 2009-09-20 | NULL |
| 0002 | 打孔器 | 办公用品 | 500 | 320 | 2009-09-11 | NULL |
| 0003 | 运行T恤 | 衣服 | 4000 | 2800 | NULL | NULL |
| 0004 | 菜刀 | 厨房用品 | 30000 | 1400 | 2009-09-20 | NULL |
| 0005 | 高压锅 | 厨房用品 | 68000 | 2500 | 2009-01-15 | NULL |
| 0006 | 叉子 | 厨房用品 | 5000 | NULL | 2009-09-20 | NULL |
| 0007 | 砧板 | 厨房用品 | 8800 | 395 | 2008-04-28 | NULL |
| 0008 | 圆珠笔 | 办公用品 | 100 | NULL | 2009-11-11 | NULL |
| 0009 | 电视机 | 家具 | 4000 | 3000 | 2019-07-04 | NULL |
| 0010 | 电视机2 | 家具 | 40000 | NULL | 2019-07-05 | NULL |
| 0011 | 4k电视 | 家具 | 10000 | 3000 | 2019-07-07 | NULL |
| 0020 | 电视机4 | 家具 | NULL | 40001 | 2019-07-05 | NULL |
+------------+--------------+--------------+------------+----------------+-------------+------+
12 rows in set (0.04sec)
mysql> select coalesce( purchase_price , 'null')-> fromproduct;+------------------------------------+
| coalesce( purchase_price , 'null') |
+------------------------------------+
| 500 |
| 320 |
| 2800 |
| 1400 |
| 2500 |
| null |
| 395 |
| null |
| 3000 |
| null |
| 3000 |
| 40001 |
+------------------------------------+
12 rows in set (0.00 sec)
View Code
谓词
like
前方一致 ddd%
中间一致 %ddd%
后方一致 %ddd
下划线 ddd_ ----一个下划线一个字符,以此类推
模式描述
^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
.
匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
[...]
字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^...]
负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
p1|p2|p3
匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
*
匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+
匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
{n}
n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
mysql> select *
-> fromproduct-> where product_name like '%视%';+------------+--------------+--------------+------------+----------------+-------------+------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date | co |
+------------+--------------+--------------+------------+----------------+-------------+------+
| 0009 | 电视机 | 家具 | 4000 | 3000 | 2019-07-04 | NULL |
| 0010 | 电视机2 | 家具 | 40000 | NULL | 2019-07-05 | NULL |
| 0011 | 4k电视 | 家具 | 10000 | 3000 | 2019-07-07 | NULL |
| 0020 | 电视机4 | 家具 | NULL | 40001 | 2019-07-05 | NULL |
+------------+--------------+--------------+------------+----------------+-------------+------+
4 rows in set (0.00 sec)
between ---包括边界
mysql> select *
-> fromproduct-> where purchase_price between 400 and 3000;+------------+--------------+--------------+------------+----------------+-------------+------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date | co |
+------------+--------------+--------------+------------+----------------+-------------+------+
| 0001 | T恤 | 衣服 | 1000 | 500 | 2009-09-20 | NULL |
| 0003 | 运行T恤 | 衣服 | 4000 | 2800 | NULL | NULL |
| 0004 | 菜刀 | 厨房用品 | 30000 | 1400 | 2009-09-20 | NULL |
| 0005 | 高压锅 | 厨房用品 | 68000 | 2500 | 2009-01-15 | NULL |
| 0009 | 电视机 | 家具 | 4000 | 3000 | 2019-07-04 | NULL |
| 0011 | 4k电视 | 家具 | 10000 | 3000 | 2019-07-07 | NULL |
+------------+--------------+--------------+------------+----------------+-------------+------+
6 rows in set (0.00 sec)
in 和 not in
mysql> select *
-> fromproduct-> where product_id in ('0002','0011');+------------+--------------+--------------+------------+----------------+-------------+------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date | co |
+------------+--------------+--------------+------------+----------------+-------------+------+
| 0002 | 打孔器 | 办公用品 | 500 | 320 | 2009-09-11 | NULL |
| 0011 | 4k电视 | 家具 | 10000 | 3000 | 2019-07-07 | NULL |
+------------+--------------+--------------+------------+----------------+-------------+------+
2 rows in set (0.37 sec)
mysql> select * fromshopproduct;+---------+-----------+------------+----------+
| shop_id | shop_name | product_id | quantity |
+---------+-----------+------------+----------+
| 000A | 东京 | 0001 | 30 |
| 000A | 东京 | 0002 | 50 |
| 000A | 东京 | 0003 | 15 |
| 000B | 名古屋 | 0002 | 30 |
| 000B | 名古屋 | 0003 | 120 |
| 000B | 名古屋 | 0004 | 20 |
| 000B | 名古屋 | 0006 | 10 |
| 000B | 名古屋 | 0007 | 40 |
| 000C | 大阪 | 0003 | 20 |
| 000C | 大阪 | 0004 | 50 |
| 000C | 大阪 | 0006 | 90 |
| 000C | 大阪 | 0007 | 70 |
| 000D | 大阪 | 0001 | 100 |
+---------+-----------+------------+----------+
13 rows in set (0.00sec)
mysql> selectproduct_name ,sale_price-> fromproduct-> where product_id in (selectproduct_id-> fromshopproduct-> where shop_id = '000B');+--------------+------------+
| product_name | sale_price |
+--------------+------------+
| 打孔器 | 500 |
| 运行T恤 | 4000 |
| 菜刀 | 30000 |
| 叉子 | 5000 |
| 砧板 | 8800 |
+--------------+------------+
5 rows in set (0.00 sec)
View Code
exists --判断是否满足某种条件的记录 ,, 存在 的意思
注意: 关联子查询作为exists 参数
mysql> SELECTproduct_name, sale_price-> FROM Product ASP-> WHERE EXISTS (SELECT *
-> FROM ShopProduct ASSP-> WHERE SP.shop_id = '000C'
-> AND SP.product_id =P.product_id);+--------------+------------+
| product_name | sale_price |
+--------------+------------+
| 运行T恤 | 4000 |
| 菜刀 | 30000 |
| 叉子 | 5000 |
| 砧板 | 8800 |
+--------------+------------+
4 rows in set (0.00 sec)
case
分为简单CASE表达式和搜索CASE表达式两种
CASE WHEN THEN
WHEN THEN
WHEN THEN .
.
.ELSE
END --不可省略
mysql> select sum(case when sale_price < 1000 then 1 else 0 end ) aslow_price,-> sum(case when sale_price between 1000 and 3000 then 1 else 0 end ) asmid_price,-> sum(case when sale_price >3001 then 1 else 0 end ) ashigh_price-> fromproduct;+-----------+-----------+------------+
| low_price | mid_price | high_price |
+-----------+-----------+------------+
| 2 | 1 | 8 |
+-----------+-----------+------------+
1 row in set (0.08 sec)