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 秒 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一张表后,不能编辑,下方显示只读,原因是表没有设置主键。