对于MySQL相信很多人都不陌生,但对于MySQL的使用很多程序员只停留在增删改查。一旦问到除增删改查以外的内容相信很多人都很陌生。本篇不讲增删改查。因为这里默认是大家都会。同时也是为了自己日后回来查找方便。
模板:大写的是关键字(SQL中关键字不区分大小写)
SELECT DISTINCT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
ORDER BY column_name
LIMIT row_num
ASC是升序(默认的),DESC是降序
去重关键字 DISTINCT;例如
SELECT DISTINCT xxx FROM XXX WHERE ....
关键字 HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
例如,查询并显示 统计某某字段的和 超过1000。这时候通过where条件查询只能获取到对应得数据,单无法做统计,此时聚合函数就可以上场了!!! 当然也可以是自己写好的SQL函数
+ 在sql中的作用
- 运算符(当两边操作的数据是数值型数据时) 例如:select 1+2;结果是3
- 运算符(当有一个操作数据是字符型)
例如:
select '1' + 2;结果是3(转义成功时)
select 'a1'+2;结果是2(转义失败就是0)- 其中有一个是null 则结果就是 null
SQL中的 字符串的拼接 CONCAT() 函数的使用
SELECT CONCAT('String1','String2');-- 结果是String1String2。还可以传入多个参数用逗号隔开
判断字段是否为NULL的 IFNULL() 函数
安全等于
<=>可以判断null值,也能判断数值
<=> 注意不等于是 <>
常见的函数
字符函数:
取长度 LENGTH();
xxxxxxxxxx
1SELECT LENGTH('john');
2SELECT LENGTH('张三123'); -- 结果是9,utf8编码中中文站3个字节,GBK中是2个字节
大小写转换:UPPER()、LOWER()
SELECT UPPER('john');-- JOHN
SELECT LOWER('jOHn');-- john
字符串拼接:CONCAT()
SELECT CONCAT(UPPER('john'),lOWER('_TOM'));
截取字符串:SUBSTR()
SELECT SUBSTR('李莫愁爱上了陆展元',1,3)
返回子串第一次出现的索引:INSTR()
SELECT INSTR('李莫愁爱上了陆展元','陆展元')
去除字符串前后的空格或回车 TRIM()
第二种用法 去除指定的字符
SELECT LENGTH(TRIM(' 123456 '));
SELECT TRIM('a' FROM 'aaa 123aaa456 aa');-- 结果是' 123aaa456 '
填充
SELECT LPAD('hello',10,'=');-- 左填充;
SELECT RPAD('hello',10,'=');-- 右填充;
数学函数:
SELECT ROUND('1.3');-- 四舍五入
SELECT CEIL('1.3');-- 上取整
SELECT FLOOR('1.3');-- 下取整
SELECT TRUNCATE('1.333333',1);-- 截断小树点后一位
SELECT MOD(-10,3);-- 取余,结果是-1;a%b取余=a -(a/b)*b;余数正负数取决于被除数
日期函数:
SELECT NOW();-- 返回日期和时间
SELECT CURDATE();-- 返回日期,不会返回时间
SELECT CURTIME();-- 返回时间,不会返回日期
SELECT YEAR(NOW());-- 返回年
SELECT MONTH(NOW());-- 返回月
SELECT MONTHNAME(NOW());-- 返回月英文名称
SELECT DAY(NOW());-- 返回日
流程控制函数:
IF()
SELECT IF(10>5,'大','小');
-- 第一个表达式判断是否为真,真返回第二个表达式的内容,假返回第三表达式内容;---->换言之可以是sql子句
CASE:
相当于java中的switch的写法:其中的when可以有多个,else代表default
CASE case_value
WHEN when_value THEN
statement_list
ELSE
statement_list
END CASE;
CASE的另一种用法:
CASE
WHEN 常亮1 THEN 显示的值1或语句1
WHEN 常亮2 THEN 显示的值2或语句2
...省略
ELSE 显示的值n或语句n
END