- 学习:知识的初次邂逅
- 复习:知识的温故知新
练习:知识的实践应用
目录
一,原题力扣链接
二,题干
患者信息表:
Patients
+--------------+---------+ | Column Name | Type | +--------------+---------+ | patient_id | int | | patient_name | varchar | | conditions | varchar | +--------------+---------+ 在 SQL 中,patient_id (患者 ID)是该表的主键。 'conditions' (疾病)包含 0 个或以上的疾病代码,以空格分隔。 这个表包含医院中患者的信息。查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀
DIAB1
。按 任意顺序 返回结果表。
查询结果格式如下示例所示。
示例 1:
输入: Patients表:
+------------+--------------+--------------+ | patient_id | patient_name | conditions | +------------+--------------+--------------+ | 1 | Daniel | YFEV COUGH | | 2 | Alice | | | 3 | Bob | DIAB100 MYOP | | 4 | George | ACNE DIAB100 | | 5 | Alain | DIAB201 | +------------+--------------+--------------+ 输出: +------------+--------------+--------------+ | patient_id | patient_name | conditions | +------------+--------------+--------------+ | 3 | Bob | DIAB100 MYOP | | 4 | George | ACNE DIAB100 | +------------+--------------+--------------+ 解释:Bob 和 George 都患有代码以 DIAB1 开头的疾病。
三,建表语句
Create table If Not Exists Patients (patient_id int, patient_name varchar(30), conditions varchar(100))
Truncate table Patients
insert into Patients (patient_id, patient_name, conditions) values ('1', 'Daniel', 'YFEV COUGH')
insert into Patients (patient_id, patient_name, conditions) values ('2', 'Alice', '')
insert into Patients (patient_id, patient_name, conditions) values ('3', 'Bob', 'DIAB100 MYOP')
insert into Patients (patient_id, patient_name, conditions) values ('4', 'George', 'ACNE DIAB100')
insert into Patients (patient_id, patient_name, conditions) values ('5', 'Alain', 'DIAB201')
四,分析
题解:
表:病人表
字段:病人id,病人名称,疾病详情;
要求:查询患有DIABI的患者信息。DIABI可能出现在开头,也可能出现在中间,但是他始终是以单词开头出现。
思路一:like模糊查询
模糊查询可解,
如果DIABI在开头,就%DIABI%
如果DIABI在中间,他有个特征就是有个空格 所以就可以% DIABI%
思路二, 正则匹配
\b 正则表达式中的
\b
表示单词边界。转义一下 \\b
匹配关键字
最后.是一个通配符,匹配的是除换行符之外的任何单个字符;
最后一个* 用来匹配后面的单词
所以完整的正则就是:
\\bDIAB1.*'
五,SQL解答
解法一,like模糊查询解法
select * from Patients where conditions like 'DIAB1%' or conditions like '% DIAB1%';
解法二,正则匹配解法
select * from Patients where conditions regexp '\\bDIAB1.*';
六,验证
七,知识点总结
模糊查询练习
正则查询练习
- 学习:知识的初次邂逅
- 复习:知识的温故知新
练习:知识的实践应用