在前端开发过程中,我们经常需要使用到 SQL 数据库,而 Sequelize 是一个能够支持多种 SQL 数据库的 ORM 框架,它提供了非常方便的方式来进行数据库的操作。本文将详细介绍 Sequelize 中的 Where、Group 与 Order,以及如何在实践中使用它们。
Where 语句
在 Sequelize 中,我们可以使用 where 方法来生成一个 WHERE 语句。where 方法可以接受一个 plain object、Op 枚举值或多个对象的数组。
plain object
我们可以传入一个 plain object 来生成 WHERE 语句,其中 key 表示列名,value 表示条件。
const result = await User.findAll({ where: { age: 18 } })
上述代码生成的 SQL 语句如下:
SELECT * FROM users WHERE age = 18;
Op 枚举值
我们可以使用 Op 枚举值来比较列的值。以下是一些常用的 Op 枚举值:
- Op.eq:等于
- Op.ne:不等于
- Op.gt:大于
- Op.gte:大于等于
- Op.lt:小于
- Op.lte:小于等于
- Op.between:在某个范围内
- Op.notBetween:不在某个范围内
- Op.in:在某个集合内
- Op.notIn:不在某个集合内
- Op.like:模糊匹配
- Op.notLike:模糊不匹配
- Op.startsWith:以某个字符串开头
- Op.endsWith:以某个字符串结尾
- Op.substring:包含某个字符串
const result = await User.findAll({ where: { age: { [Op.gt]: 18 } } })
上述代码生成的 SQL 语句如下:
SELECT * FROM users WHERE age > 18;
多个对象的数组
我们可以传入多个对象的数组来生成 WHERE 语句。
-- -------------------- ---- ------- ----- ------ - ----- -------------- ------ - - ---- - -------- -- - -- - ----- - ---------- ----- - - -- -- ------ --------- --- -- --- ----- -- ------ - -------- -- ---- - -------- -- - -- - ----- - ---------- ----- - -- - --
上述代码生成的 SQL 语句如下:
SELECT * FROM users WHERE age > 18 AND name LIKE '%s%';
Group 语句
在 Sequelize 中,我们可以使用 group 方法来生成一个 GROUP BY 语句。
const result = await User.findAll({ attributes: ['gender', [sequelize.fn('COUNT', sequelize.col('id')), 'count']], group: 'gender' })
上述代码生成的 SQL 语句如下:
SELECT gender, COUNT(id) AS count FROM users GROUP BY gender;
Order 语句
在 Sequelize 中,我们可以使用 order 方法来生成一个 ORDER BY 语句。order 方法可以接受一个 plain object、二维数组或字符串。
plain object
我们可以传入一个 plain object 来生成 ORDER BY 语句,其中 key 表示列名,value 表示排序方式。
const result = await User.findAll({ order: { age: 'DESC' } })
上述代码生成的 SQL 语句如下:
SELECT * FROM users ORDER BY age DESC;
二维数组
我们可以使用二维数组来生成 ORDER BY 语句。
const result = await User.findAll({ order: [['age', 'DESC'], ['name', 'ASC']] })
上述代码生成的 SQL 语句如下:
SELECT * FROM users ORDER BY age DESC, name ASC;
字符串
我们可以传入一个字符串来生成 ORDER BY 语句。但是这种方式不太安全,容易受到 SQL 注入攻击。
const result = await User.findAll({ order: 'age DESC' })
上述代码生成的 SQL 语句如下:
SELECT * FROM users ORDER BY age DESC;
实践
在实际应用中,我们可能会用到多个 where、group 和 order 语句。
-- -------------------- ---- ------- ----- ------ - ----- -------------- ------ - ---- - -------- -- -- ------- - -------- -------- --------- - -- ----------- - --------- ---------------------- --------------------- --------- -------------------- ---------------------- --------- -- ------ --------- ------ ---------- -------- ---------- ------- --
上述代码生成的 SQL 语句如下:
SELECT gender, COUNT(id) AS count, AVG(age) AS avgAge FROM users WHERE age > 18 AND gender IN ('male', 'female') GROUP BY gender ORDER BY count DESC, avgAge ASC;
这将返回年龄大于 18 的男性和女性人数以及平均年龄,并按照人数从高到低、平均年龄从低到高排序。
总结
本文介绍了 Sequelize 中的 Where、Group 与 Order 语句,以及如何在实践中使用它们。通过灵活运用这些语句,我们可以更方便地操作数据库,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d48cdab5eee0b525c1a36e