MySQL三表模糊查询实现方法(mysql三表模糊查询)
MySQL三表模糊查询实现方法
在实际开发过程中,多表联查是非常常见的操作。而在多表联查的基础上,往往还需要进行模糊查询操作。
本文将基于MySQL数据库,介绍如何实现三表联查,并且完成多个字段的模糊查询。
准备工作
在开始之前,需要准备好以下环境:
– 安装MySQL数据库。
– 创建三张表,并插入数据。
我们假设有三张表:users, departments和roles。它们的表结构和数据如下:
CREATE TABLE users (
id INT(11) PRIMARY KEY,
name VARCHAR(20),
department_id INT(11),
role_id INT(11)
);
CREATE TABLE departments (
id INT(11) PRIMARY KEY,
name VARCHAR(20)
);
CREATE TABLE roles (
id INT(11) PRIMARY KEY,
name VARCHAR(20)
);
INSERT INTO users VALUES
(1, ‘张三’, 1, 1),
(2, ‘李四’, 2, 2),
(3, ‘王五’, 1, 3);
INSERT INTO departments VALUES
(1, ‘技术部’),
(2, ‘市场部’);
INSERT INTO roles VALUES
(1, ‘程序员’),
(2, ‘销售员’),
(3, ‘测试员’);
三表联查
在MySQL中,我们可以使用JOIN关键字实现多张表的联查。而当我们需要连接三张或以上的表时,可以通过嵌套多个JOIN语句来实现,也可以使用MySQL中提供的JOIN语法简化操作。
我们假设要查询所有用户的姓名、部门名称和角色名称,并将结果按照部门名称升序排列。
SELECT
users.name,
departments.name,
roles.name
FROM
users
JOIN
departments
ON
users.department_id = departments.id
JOIN
roles
ON
users.role_id = roles.id
ORDER BY
departments.name ASC;
结果如下:
+——+——–+———-+
| name | name | name |
+——+——–+———-+
| 张三 | 技术部 | 程序员 |
| 王五 | 技术部 | 测试员 |
| 李四 | 市场部 | 销售员 |
+——+——–+———-+
模糊查询
在多表联查的基础上,往往还需要进行模糊查询操作。
我们假设要查询所有名字中包含“三”的用户的姓名、部门名称和角色名称,并将结果按照部门名称升序排列。
SELECT
users.name,
departments.name,
roles.name
FROM
users
JOIN
departments
ON
users.department_id = departments.id
JOIN
roles
ON
users.role_id = roles.id
WHERE
users.name LIKE ‘%三%’
ORDER BY
departments.name ASC;
结果如下:
+——+——–+———-+
| name | name | name |
+——+——–+———-+
| 张三 | 技术部 | 程序员 |
+——+——–+———-+
需要注意的是,由于我们在三个表中都有一个name字段,因此在SQL语句中需要指定具体的表名或者使用别名来避免歧义。
完整代码
下面是完整的代码:
CREATE TABLE users (
id INT(11) PRIMARY KEY,
name VARCHAR(20),
department_id INT(11),
role_id INT(11)
);
CREATE TABLE departments (
id INT(11) PRIMARY KEY,
name VARCHAR(20)
);
CREATE TABLE roles (
id INT(11) PRIMARY KEY,
name VARCHAR(20)
);
INSERT INTO users VALUES
(1, ‘张三’, 1, 1),
(2, ‘李四’, 2, 2),
(3, ‘王五’, 1, 3);
INSERT INTO departments VALUES
(1, ‘技术部’),
(2, ‘市场部’);
INSERT INTO roles VALUES
(1, ‘程序员’),
(2, ‘销售员’),
(3, ‘测试员’);
SELECT
users.name,
departments.name,
roles.name
FROM
users
JOIN
departments
ON
users.department_id = departments.id
JOIN
roles
ON
users.role_id = roles.id
ORDER BY
departments.name ASC;
SELECT
users.name,
departments.name,
roles.name
FROM
users
JOIN
departments
ON
users.department_id = departments.id
JOIN
roles
ON
users.role_id = roles.id
WHERE
users.name LIKE ‘%三%’
ORDER BY
departments.name ASC;
总结
通过本文的介绍,我们了解了MySQL中如何实现三张表的联查,并且完成多个字段的模糊查询操作。在实际开发过程中,多表联查和模糊查询是非常常见的操作,掌握这些技能对于提高开发效率和代码质量都有很大的帮助。