SQL是用于访问和处理数据库的标准的计算机语言,语法有很多,学习成本比较大。但是针对MIMIC数据库,只要掌握一些基本的、常用的语句,即可以完成数据的提取。

很多小伙伴和我们反馈安装好数据库之后不知道如何提取数据,我们打算做一个系列教程,通过一些常用的案例,介绍一下如何提取MIMIC数据库数据。小伙伴们若不理解文中代码,可运行一下查看效果,然后再根据自己的需要依葫芦画瓢,进行数据提取。

今天主要介绍几个基本的语句,后面会陆续推出一些常见的数据提取场景。

目录

1. 如何查询某个指定表格中的全部或部分字段

2. 如何根据特定条件查询数据

3. 如何根据英文描述查询对应编码

4. 如何在查询条件中限制多个值

5. 如何使SQL可读性更强

6. 如何将多个表进行连接


1. 如何查询某个指定表格中的全部或部分字段

所有查询表的语句,都要使用select,比如我们要查询patients表中的所有字段

select * from mimic_core.patients

其中 * 表示查询所有字段,mimic_coreschema名称,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_timet是别名)

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') 

 查询结果如下,我们可以看到已经将两个表相连

图片

注意:连表可能会造成重复数据,注意去重! 


 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐