mysql in 02_mysql--LIKE关键字与IN关键字组合查询02

在观看本篇博客前,如果sql编写能力弱的网友,可以先可以看我的另一片博客:  mysql--LIKE关键字与IN关键字组合查询     ,其可以帮助读者理解 LIKE关键字 与 IN关键字 组合使用。

根据在工作开发过程中遇到的场景,我通过 student表、student_detail表 来进行讲解我所写的一条sql语句。LIKE关键字、IN关键字、子查询、Mybatis框架相互结合运用的案例。

student表

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for student

-- ----------------------------

DROP TABLE IF EXISTS `student`;

CREATE TABLE `student` (

`student_id` varchar(20) NOT NULL COMMENT '主键--学生证号',

`name` varchar(32) DEFAULT NULL COMMENT '姓名',

`age` int(3) DEFAULT NULL COMMENT '年龄',

`sex` int(1) DEFAULT '0' COMMENT '性别,0--男,1--女',

`create_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',

PRIMARY KEY (`student_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of student

-- ----------------------------

INSERT INTO `student` VALUES ('st-011', '李辉', '12', '0', '2016-11-07 01:33:31');

INSERT INTO `student` VALUES ('st-012', '李俊云', '13', '0', '2015-06-13 10:18:50');

INSERT INTO `student` VALUES ('st-013', '李红', '12', '1', '2017-07-02 11:04:27');

INSERT INTO `student` VALUES ('st-024', '燕双玉', '12', '1', '2010-09-29 18:12:58');

INSERT INTO `student` VALUES ('st-025', '刘彩霞', '12', '1', '2013-04-04 15:39:01');

INSERT INTO `student` VALUES ('st-026', '王道清', '12', '0', '2018-08-22 19:05:05');

student_detail表

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for student_detail

-- ----------------------------

DROP TABLE IF EXISTS `student_detail`;

CREATE TABLE `student_detail` (

`key_id` varchar(20) NOT NULL COMMENT '主键id',

`student_id` varchar(20) DEFAULT NULL COMMENT '外键--学生证号',

`clazz_code` varchar(12) DEFAULT NULL COMMENT '班级编号',

`address` varchar(255) DEFAULT NULL COMMENT '地址',

`id_card` varchar(18) DEFAULT NULL COMMENT '身份证号',

`type` int(1) DEFAULT NULL COMMENT '是否住校, 0-住校,1-不住校',

`remark` varchar(255) DEFAULT NULL COMMENT '说明',

`create_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',

PRIMARY KEY (`key_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of student_detail

-- ----------------------------

INSERT INTO `student_detail` VALUES ('te-001', 'st-011', 'clazz-01', '浙江省-杭州市-江干区--九堡-P学校', '230227197603306919', '0', '测试数据01', '2018-06-21 20:54:26');

INSERT INTO `student_detail` VALUES ('te-002', 'st-011', 'clazz-05', '黑龙江省-齐齐哈尔市-富裕县-A学校', '230227197603306919', '1', '测试数据02', '2018-06-21 20:54:27');

INSERT INTO `student_detail` VALUES ('te-003', 'st-011', 'clazz-02', '海南省-海口市-市辖区-B学校', '230227197603306919', '0', '测试数据03', '2018-06-21 20:54:28');

INSERT INTO `student_detail` VALUES ('te-004', 'st-012', 'clazz-03', '河北省-保定市-望都县-H学校', '460101198404240179', '0', '测试数据04', '2018-06-21 20:54:29');

INSERT INTO `student_detail` VALUES ('te-005', 'st-012', 'clazz-02', '浙江省-杭州市-江干区--九堡-G学校', '460101198404240179', '1', '测试数据05', '2018-06-21 20:54:30');

INSERT INTO `student_detail` VALUES ('te-006', 'st-013', 'clazz-04', '四川省-德阳市-绵竹市-M学校', '210904198302251924', '0', '测试数据06', '2018-06-21 20:54:31');

INSERT INTO `student_detail` VALUES ('te-007', 'st-024', 'clazz-05', '辽宁省-阜新市-太平区-T学校', '510683198606051145', '1', '测试数据07', '2018-06-21 20:54:32');

INSERT INTO `student_detail` VALUES ('te-008', 'st-025', 'clazz-03', '湖北省-恩施土家族苗族自治州-建始县-J校区', '422822197910045167', '1', '测试数据08', '2018-06-21 20:54:33');

INSERT INTO `student_detail` VALUES ('te-009', 'st-025', 'clazz-01', '云南省-大理白族自治州-大理市-D校区', '422822197910045167', '0', '测试数据09', '2018-06-21 20:54:34');

INSERT INTO `student_detail` VALUES ('te-010', 'st-026', 'clazz-03', '广东省-潮州市-饶平县-R校', '320981198701232137', '0', '测试数据10', '2018-06-21 20:54:35');

INSERT INTO `student_detail` VALUES ('te-011', 'st-026', 'clazz-04', '江苏省-盐城市-东台市-T校', '320981198701232137', '1', '测试数据11', '2018-06-21 20:54:37');

student表是主表, student_detail表是明细表。 student表中的主键 student_id字段 与 student_detai表中的 student_id字段相关联。即 student表中的 student_id字段 是 student_detail表的外键。

d49caa38515e162b4ec532d61c67e008.png

d080714f2b60370a45b2b6a95ad5ca22.png

现在,根据 学生证号(student_id)、姓名(name)、年龄(age)、创建时间(create_time)、是否住校(type),来模糊查询 student表中的学生信息。 学生证号、姓名、年龄、创建时间在 student表中存在, 而“是否住校”是 student_detail表中字段。

根据以上的查询条件,我的思想是:根据 "是否住校" 字段 在 student_detail表中查询出 student_id字段的一系列值。 把这些值放在 IN()函数中, 在 student表中,根据 student_id 模糊查询。模糊查询使用的 LIKE关键字与 IN关键字组合使用。

sql语句如下:

SELECT student_id, name, age, sex, create_time

FROM student

WHERE

student_id LIKE'%st_01%'

AND student_id IN(

SELECT student_id FROM student_detail

WHERE type = 0

)

AND name LIKE '%李%'

AND age > 10

AND create_time BETWEEN '2015-06-01' AND '2017-06-01'

运行结果:

a865d4f3c76ed43649642f9183dcd830.png

与Mybatis框架中动态sql结合使用,代码如下:

SELECT student_id, name, age, sex, create_time

FROM student

AND student_id LIKE CONCAT('%', #{student_id}, '%')

AND student_id IN (

SELECT student_id FROM student_detail

AND type != 0

AND type = 0

)

AND name LIKE CONCAT('%', #{name}, '%')

AND age = #{age}

AND create_time BETWEEN #{create_time_start, jdbcType =TIMESTAMP} AND #{create_time_end, jdbcType=TIMESTAMP}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值