sql语言深度学习

>> 应该在 插入单行 的时候使用VALUES,在 插入多行 的时候使用VALUE

>> 查询数据直接存入另一个表中(字段名称要对应)
insert into A表 (字段集合) select 字段集合 from B表

>> 查询结果拼任意字符
SELECT CONCAT(province,'_001') FROM ms_stat_crisis_warning

>> TRUNCATE 清空表; //速度超快

>> 超级SQL (需要多个结果集在不同表里 可以通过这种方式获取结果值)
实例:select (sql语句) as a , (sql语句) as b , '1' as c

SELECT (SELECT created_time AS atime FROM `ms_article` ORDER BY created_time DESC LIMIT 1) AS atime,
(SELECT update_time AS atime FROM `ms_stat_article_reply` ORDER BY update_time DESC LIMIT 1) AS rtime,'1' AS suma

>> sql 替换函数
SELECT REPLACE('www.mysql.com', 'w', 'Ww');

>>多个 排序字段书写方式
ORDER BY SUM(a字段) DESC,b字段 DESC

>> CASE WHEN a.event_id IS NULL THEN '' ELSE a.event_id END // 在select中对字段进行判断

>> left Join 支持多个参数
实例: select * from a left join b on a.id =b.id and a.name=b.name where ...

>>将两个字段 合成一列显示 用逗号分隔
select concat(a.id,',', a.name) as h from a

>> sql 字符串函数
MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能
实例:SUBSTRING(c.fbtime,1,7) as fbtime ( sql语句中是从1开始截取)


>> UNION ALL( 也有 UNION 的写法)
同一个表 查询条件冲突 需要分别查询结果 最后合成一个表 展示用
select * from a where a.a is null and a.b is not null
UNION ALL
select * from a where a.a is not null and a.b is null

>> 5.7环境 下的 group by  兼容问题   可以修改配置文件  
select @@sql_mode 但最好在 写sql语句 注意这个问题

>> 表分区操作
ALTER TABLE `ms_stat_event_month` PARTITION BY RANGE(p_date)(
PARTITION p20170320 VALUES LESS THAN (20170321),PARTITION p20170321 VALUES LESS THAN (20170322),
PARTITION p20170322 VALUES LESS THAN (20170323),PARTITION p20170323 VALUES LESS THAN (20170324),
PARTITION p20170324 VALUES LESS THAN (20170325),PARTITION p20170325 VALUES LESS THAN (20170326))



>> mysql 支持正则查询   正则表达式

>> 查询 结果判断
  • IS NULL: 当列的值是NULL,此运算符返回true。
  • IS NOT NULL: 当列的值不为NULL, 运算符返回true。
  • <=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。
实例:
select  a.name,if(a.value is not null,a.value,0) //   is not null  判断不为空  sql if 类似于三元表达式 支持 多个if判断 可以减少 java算法压力
from a
where ...

>> 左外链接  
实例 :  在实际开发中 左外链接比 子查询效率高了不知道多少倍 支持 左外链接嵌套
select  *
from  biao1 a  left join  biao2 b   on  a.id = b.id
where  ...

>> 字段状态 多条  赋值

SELECT
        CASE
        WHEN b .` flowNodeId `   =   '1'         
THEN  '初审'
        WHEN b .` flowNodeId `   =   '2'
        THEN  '复审'
        WHEN b .` flowNodeId `   =   '3'
        THEN  '终审'
        WHEN b .` flowNodeId `   =   '4'
        THEN  '结束'
        END AS auditProcess ,
        CASE
        WHEN b .` result `   =   'pass'
        THEN  '通过'
        WHEN b .` result `   =   'notPass'
        THEN  '未通过'
        END AS auditStatus ,
        b .` updator `  AS auditor ,
        b .` createTime `  AS auditTime ,
        b .` remark `  AS reason
        FROM
         ` res_flow_instance `  a
        LEFT JOIN  ` res_flow_record `  b
        ON a .` id `   =  b .` instanceId `
        WHERE a .` resourceId `   =   #{resourceCode}  

>> 字段复合查询
select *  from * where CONCAT(字段1,字段2) BETWEEN '*' AND '*'; 
查询条件前后 顺序 不同结果也不同

>> SQL Aggregate 函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:
  • AVG() - 返回平均值
  • COUNT() - 返回行数
  • FIRST() - 返回第一个记录的值
  • LAST() - 返回最后一个记录的值
  • MAX() - 返回最大值
  • MIN() - 返回最小值
  • SUM() - 返回总和

>> SQL Scalar 函数
SQL Scalar 函数基于输入值,返回一个单一的值。
有用的 Scalar 函数:
  • UCASE() - 将某个字段转换为大写
  • LCASE() - 将某个字段转换为小写
  • MID() - 从某个文本字段提取字符
  • LEN() - 返回某个文本字段的长度
  • ROUND() - 对某个数值字段进行指定小数位数的四舍五入
  • NOW() - 返回当前的系统日期和时间
  • FORMAT() - 格式化某个字段的显示方式

>> group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

No operations allowed after connection closed. ] which will not be reported to listeners!
A checked-out resource is overdue, and will be destroyed
No operations allowed after connection closed.
>> <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime">
<value>2500</value>
</property>

猜你喜欢

转载自blog.csdn.net/a1ccwt/article/details/77250298