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}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 MySQL 的所有关键字列表: - ADD - ALL - ALTER - ANALYZE - AND - AS - ASC - ASENSITIVE - BEFORE - BETWEEN - BIGINT - BINARY - BLOB - BOTH - BY - CALL - CASCADE - CASE - CHANGE - CHAR - CHARACTER - CHECK - COLLATE - COLUMN - CONDITION - CONSTRAINT - CONTINUE - CONVERT - CREATE - CROSS - CURRENT_DATE - CURRENT_TIME - CURRENT_TIMESTAMP - CURRENT_USER - CURSOR - DATABASE - DATABASES - DAY_HOUR - DAY_MICROSECOND - DAY_MINUTE - DAY_SECOND - DEC - DECIMAL - DECLARE - DEFAULT - DELAYED - DELETE - DESC - DESCRIBE - DETERMINISTIC - DISTINCT - DISTINCTROW - DIV - DOUBLE - DROP - DUAL - EACH - ELSE - ELSEIF - ENCLOSED - ESCAPED - EXISTS - EXIT - EXPLAIN - FALSE - FETCH - FLOAT - FLOAT4 - FLOAT8 - FOR - FORCE - FOREIGN - FROM - FULLTEXT - GENERATED - GET - GRANT - GROUP - HAVING - HIGH_PRIORITY - HOUR_MICROSECOND - HOUR_MINUTE - HOUR_SECOND - IF - IGNORE - IN - INDEX - INFILE - INNER - INOUT - INSENSITIVE - INSERT - INT - INT1 - INT2 - INT3 - INT4 - INT8 - INTEGER - INTERVAL - INTO - IO_AFTER_GTIDS - IO_BEFORE_GTIDS - IS - ITERATE - JOIN - KEY - KEYS - KILL - LEADING - LEAVE - LEFT - LIKE - LIMIT - LINEAR - LINES - LOAD - LOCALTIME - LOCALTIMESTAMP - LOCK - LONG - LONGBLOB - LONGTEXT - LOOP - LOW_PRIORITY - MASTER_BIND - MASTER_SSL_VERIFY_SERVER_CERT - MATCH - MAXVALUE - MEDIUMBLOB - MEDIUMINT - MEDIUMTEXT - MIDDLEINT - MINUTE_MICROSECOND - MINUTE_SECOND - MOD - MODIFIES - NATURAL - NOT - NO_WRITE_TO_BINLOG - NULL - NUMERIC - ON - OPTIMIZE - OPTION - OPTIONALLY - OR - ORDER - OUT - OUTER - OUTFILE - PARTITION - PERIOD_ADD - PERIOD_DIFF - PRIMARY - PROCEDURE - PURGE - RANGE - READ - READS - READ_WRITE - REAL - REFERENCES - REGEXP - RELEASE - RENAME - REPEAT - REPLACE - REQUIRE - RESIGNAL - RESTRICT - RETURN - REVOKE - RIGHT - RLIKE - ROW - ROWS - ROW_COUNT - SCHEMA - SCHEMAS - SECOND_MICROSECOND - SELECT - SENSITIVE - SEPARATOR - SET - SHOW - SIGNAL - SLOW - SMALLINT - SPATIAL - SPECIFIC - SQL - SQL_BIG_RESULT - SQL_CALC_FOUND_ROWS - SQL_SMALL_RESULT - SQLEXCEPTION - SQLSTATE - SQLWARNING - SSL - STARTING - STORED - STRAIGHT_JOIN - TABLE - TERMINATED - THEN - TINYBLOB - TINYINT - TINYTEXT - TO - TRAILING - TRIGGER - TRUE - UNDO - UNION - UNIQUE - UNLOCK - UNSIGNED - UPDATE - USAGE - USE - USING - UTC_DATE - UTC_TIME - UTC_TIMESTAMP - VALUES - VARBINARY - VARCHAR - VARCHARACTER - VARYING - WHEN - WHERE - WHILE - WITH - WRITE - XOR - YEAR_MONTH - ZEROFILL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值