MIMIC数据库数据提取教程-入门语句
“ MIMIC数据库数据提取教程:常用的SQL语句介绍。”
SQL是用于访问和处理数据库的标准的计算机语言,语法有很多,学习成本比较大。但是针对MIMIC数据库,只要掌握一些基本的、常用的语句,即可以完成数据的提取。
很多小伙伴和我们反馈安装好数据库之后不知道如何提取数据,我们打算做一个系列教程,通过一些常用的案例,介绍一下如何提取MIMIC数据库数据。小伙伴们若不理解文中代码,可运行一下查看效果,然后再根据自己的需要依葫芦画瓢,进行数据提取。
今天主要介绍几个基本的语句,后面会陆续推出一些常见的数据提取场景。
目录
1. 如何查询某个指定表格中的全部或部分字段
所有查询表的语句,都要使用select,比如我们要查询patients表中的所有字段
select * from mimic_core.patients
其中 * 表示查询所有字段,mimic_core是schema名称,patients是所要查询的表
如果只想提取表格中部分字段
select subject_id,gender from mimic_core.patients
2. 如何根据特定条件查询数据
如果我们不想查询全表,想要根据特定的条件进行查询,那么使用where进行限制
-- 查询anchor_age>0的所有患者,同理可以用<,=
select * from mimic_core.patients where anchor_age > 0
-- 查询gender=’F‘的所有患者
select * from mimic_core.patients where gender = 'F'
如果有多个限制条件,用and连接多个条件
select * from mimic_core.patients where anchor_age > 0 and gender = 'F'
3. 如何根据英文描述查询对应编码
一般情况下,我们只知道一些疾病或者药物等名称,但是MIMIC数据库中要根据相应编码筛选数据,此时我们需要通过英文描述查询编码信息。
比如我们需要在d_icd_diagnoses表中通过long_title查询心梗的ICD编码信息
select icd_code, icd_version, long_title from mimic_hosp.d_icd_diagnoses where long_title ~* 'myocardial'
其中 ~* 后接需要匹配的字符串,可以忽略字符串大小写进行匹配,查询结果如下,会将long_title中含有myocardial的行都取出来
4. 如何在查询条件中限制多个值
比如我们通过描述查询到了ICD编码后,发现ICD编码有多个,这时候要通过多个ICD编码在diagnoses_icd表中匹配患者,则需要用in,而不是=
select * from mimic_hosp.diagnoses_icd where icd_code in ('41000','I2121','I2129')
查询结果如下,会将ICD编码为41000、I2121、I2129的患者全部查询出来
5. 如何使SQL可读性更强
我们可以通过使用as,给表名和字段名取别名,取别名可以使SQL的可读性更强
比如我们将patients取别名为t,其中的dod字段取别名为death_time
select subject_id, dod as death_time from mimic_core.patients as t
as可以省略不写,此时上面的SQL可以这样写(death_time和t是别名)
select subject_id, dod death_time from mimic_core.patients t
可以看到查询结果中dod的列名变成了death_time
可能到这里大家还不清楚别名的作用,接下来的语句就会需要用到别名
6. 如何将多个表进行连接
连表分为内连、左连、右连、全连,MIMIC数据库的提取基本上只需要用到左连。
在MIMIC数据库的数据提取中,我们一般都是先确定患者的诊断信息,然后用这些患者去关联其他信息。
这时候我们需要将患者诊断信息表与其他表相连,因此我们一般要利用诊断信息作为左表去左连其他表格。
左连会从左表(table1)返回所有的行,然后取右表(table2)中的行与左表进行匹配。如果右表中没有匹配,则结果为NULL。
例:如果我们需要提取ICD编码为('41000', 'I2121', 'I2129')的患者的基本信息。
那么我们将患者的诊断信息表mimic_hosp.diagnoses_icd作为左表,基本信息mimic_core.patients作为右表,以subject_id进行连接
-- 这时候由于左表和右表都有subject_id字段,那么我们此时要用到别名,来确定是哪个表的字段
select t1.subject_id,t1.hadm_id,t1.icd_code,t2.gender,t2.dod
from mimic_hosp.diagnoses_icd t1
left join mimic_core.patients t2
on t1.subject_id=t2.subject_id
where t1.icd_code in ('41000','I2121','I2129')
查询结果如下,我们可以看到已经将两个表相连
注意:连表可能会造成重复数据,注意去重!
更多推荐
所有评论(0)