Mysql常用建表/索引/函数/分组分页

1、建表

CREATE TABLE `RECOMMEND_REGISTERED_RECORD` (
`RECOMMEND_REGISTERED_RECORD_ID` BIGINT(20) NOT NULL COMMENT 'ID',
`PLATFORM_ID` BIGINT(20) DEFAULT NULL COMMENT '平台ID',
`DEPT_ID` BIGINT(20) DEFAULT NULL COMMENT '科室ID',
`PATIENT_ID` BIGINT(20) DEFAULT NULL COMMENT '患者ID',
`PATIENT_NAME` VARCHAR(50) DEFAULT NULL COMMENT '患者姓名',
`PATIENT_PHONE` VARCHAR(11) DEFAULT NULL COMMENT '患者手机号',
`RECOMMEND_TIME` DATETIME DEFAULT NULL COMMENT '推荐时间',

`RECOMMEND_DATE` VARCHAR(10) DEFAULT NULL COMMENT '推荐日期YYYY-MM-DD',
`VALID_FLAG` SMALLINT(2) DEFAULT '0' COMMENT '是否校验(1-是 0-否)',
`VISIT_FLAG` SMALLINT(2) DEFAULT '0' COMMENT '是否到诊(1-是 0-否)',
`VISIT_ID` BIGINT(20) DEFAULT NULL COMMENT '就诊ID',
`HOSPITAL_SOID` BIGINT(20) NOT NULL COMMENT '医院ID',
`IS_DEL` SMALLINT(6) NOT NULL DEFAULT '0' COMMENT '是否删除',
`CREATED_AT` DATETIME DEFAULT NULL COMMENT '创建时间',
`MODIFIED_AT` DATETIME DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`RECOMMEND_REGISTERED_RECORD_ID`),
KEY `IDX_RECOMMEND_TIME` (`RECOMMEND_TIME`)
) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 COMMENT='推荐挂号记录表';

2、索引

1)主键索引
alter   table  表名   add  primary   key(列名);
2)唯一索引
alter  table  表名  add  unique(列名);
3)普通索引
alter  table  表名  add  index  索引名(index_name)  (列名);
4)组合索引
alter  table  表名  add  index  索引名(index_name)  (列名1,列名2.......);
5)删除索引
DROP INDEX <索引名> ON <表名>

3、聚合

聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据

3.1、COUNT(col):表示求指定列的总行数

1)效率:innodb存储引擎,1=2>3

2)COUNT查无记录返回默认值0

#1
SELECT COUNT(1) 
FROM SIGNED_PS A 
WHERE A.SIGNED_AT BETWEEN '2022-10-01 00:00:00' AND '2022-10-23 S3:59:59';

#2
SELECT COUNT(*) 
FROM SIGNED_PS A 
WHERE A.SIGNED_AT BETWEEN '2022-10-01 00:00:00' AND '2022-10-23 S3:59:59';

#3
SELECT COUNT(A.SIGNED_PACKAGE_RETAIL) 
FROM SIGNED_PS A 
WHERE A.SIGNED_AT BETWEEN '2022-10-01 00:00:00' AND '2022-10-23 S3:59:59';

3.2、MAX(col): 表示求指定列的最大值

1)对非空非Null数据进行统计取出最大值

2)MAX查无记录时默认返回Null

3)不要和MAX函数一起返回某个字段,返回的字段是第一条数据的该字段值

SELECT MAX(A.SIGNED_PACKAGE_RETAIL)
FROM SIGNED_PS A 
WHERE A.SIGNED_AT BETWEEN '2022-10-01 00:00:00' AND '2022-10-07 23:59:59';

#返回的SIGNED_PS_ID为第一条数据ID
SELECT MAX(A.SIGNED_PACKAGE_RETAIL),A.SIGNED_PS_ID
FROM SIGNED_PS A 
WHERE A.SIGNED_AT BETWEEN '2022-10-01 00:00:00' AND '2022-10-10 23:59:59';

3.3、MIN(col):表示求指定列的最小值

1)对非空非Null数据进行统计取出最小值

2)MIN查无记录时默认返回Null

SELECT MIN(A.SIGNED_PACKAGE_RETAIL)
FROM SIGNED_PS A 
WHERE A.SIGNED_AT BETWEEN '2022-10-01 00:00:00' AND '2022-10-07 23:59:59';

3.4、SUM(col):表示求指定列的和

1)对非空非Null数据进行统计和

2)SUM查无记录时默认返回Null

SELECT SUM(A.MEDICAL_GROUP_CODE)
FROM SIGNED_PS A 
WHERE A.SIGNED_AT BETWEEN '2022-10-01 00:00:00' AND '2022-10-10 23:59:59';

3.5、AVG(col):表示求指定列的平均值

avg = sum / count

1)对非空非Null数据进行统计平均值,为null的指定列,sum不求和,count不加1

2)AVG查无记录时默认返回Null

SELECT AVG(A.SIGNED_PACKAGE_RETAIL)
FROM SIGNED_PS A 
WHERE A.SIGNED_AT BETWEEN '2022-10-01 00:00:00' AND '2022-10-10 23:59:59';

4、分组分页排序        

1)分组:group by col1,col2;按照col1和col2同时分组,相同的汇为同一条数据;

2)分页:limit x,y;从第x条开始返回y条数据;

3)排序:order by col1,col2;先按照col1排序,再按照col2排序,默认asc升序,desc为降序;

5、链表查询

6、查询结果列处理

时间加减
时间加N天SELECT DATE_ADD(NOW(), INTERVAL N DAY);
时间减N天SELECT DATE_SUB(NOW(), INTERVAL N DAY);
时间加N小时SELECT DATE_ADD(NOW(), INTERVAL N HOUR);
时间减N小时SELECT DATE_SUB(NOW(), INTERVAL N HOUR);
时间加N分钟SELECT DATE_ADD(NOW(), INTERVAL N MINUTE);
时间减N分钟SELECT DATE_SUB(NOW(), INTERVAL N MINUTE);
时间格式转换
DATE_FORMAT(date,format)

 

将日期格式化为指定的格式

%Y 年、%m 月、%d 日、

%H 时、%i 分、%s 秒
select

DATE_FORMAT(now(),'%Y-%m-%d %H-%i-%s')

STR_TO_DATE(date,format)将字符串转换为日期
UNIX_TIMESTAMP()返回当前日期时间的UNIX时间戳
FROM_UNIXTIME(unix_timestamp)将UNIX时间戳转换为日期时间格式

7、Mysql冷知识

7.1、windows下mysql默认是不区分大小写

但是linux会区分大小写,可在安装mysql的目录,修改my.ini文件,在文件最后一行加上下面一句话:lower_case_table_names=0(0:区分大小写,1:不区分大小写)

1)
select a.PAYMENT_SETTLED_EMPLOYEE_NO,a.* 
from payment a where PAYMENT_SETTLED_EMPLOYEE_NO in ('wx02','wx01');
2)
select a.PAYMENT_SETTLED_EMPLOYEE_NO,a.* 
from payment a where PAYMENT_SETTLED_EMPLOYEE_NO in ('WX02','Wx01');

1和2查询效果一致

7.2、查询Mysql进程为Sleep的并杀掉

查询
select * from information_schema.processlist where COMMAND = 'Sleep'; 
删除
select group_concat(concat('kill ',id) separator '; ') as cmd 
from information_schema.processlist  where COMMAND = 'Sleep' and TIME > 500;

7.3、关键字“_”不参与模糊查询

下划线是关键字,模糊查询时只占位不查询,如下可以查询返回全模糊ONLINE的数据

select * from CLINICAL_FORM_EXT_DATA  d where d.CLINICAL_FORM_EXT_DATA_BLOCK like "%ONLINE_%";

7.4、NAVICAT上查询没有设置主键的表后只读

select一张表后,不能编辑,下方显示只读,原因是表没有设置主键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值