-
[Node.js] sequelize 쿼리Node.js 2022. 4. 19. 10:10
데이터 삽입 (INSERT 쿼리)
create
const jennie = await User.create({ name : "JENNIE", age: 25, married : false, comment: "Jennie comment" }); // INSERT INTO users(name, age, married, comment) VALUES("JENNIE", 25, false, "Jennie comment")
결과 값
console.log(jennie)
User { dataValues: { created_at: 2022-04-06T06:25:49.678Z, id: 1, name: 'JENNIE', age: 25, married: false, comment: 'Jennie comment' }, _previousDataValues: { name: 'JENNIE', age: 25, married: false, comment: 'Jennie comment', id: 1, created_at: 2022-04-06T06:25:49.678Z }, uniqno: 1, _changed: Set(0) {}, _options: { isNewRecord: true, _schema: null, _schemaDelimiter: '', attributes: undefined, include: undefined, raw: undefined, silent: undefined }, isNewRecord: false }
findOrCreate
데이터 조회 후 테이블에 없는 값이면 생성하고 있으면 그 값을 가져오는 메소드
const sandrara = await User.findOrCreate({ where: { name: "sandara" }, // 1. 조건에 해당하는 데이터가 있는지 찾아줌 defaults: { age: "23" }, // 2. 없다면 테이블에 없는 값이면 이 옵션에 넣어준 데이터도 함께 삽입 됨 });
데이터 조회 (SELECT 쿼리)
findAll
쿼리 결과를 배열 객체로 반환
const users = await User.findAll({}); // SELECT * FROM users
결과 값
[ User { dataValues: { id: 1, name: 'JENNIE', age: 25, married: false, comment: 'Jennie comment', created_at: 2022-04-06T06:25:49.000Z }, ... }, User { dataValues: { id: 2, name: 'lisa', age: 20, married: true, comment: 'Lisa comment', created_at: 2022-04-08T00:53:24.000Z }, ... ]
findOne
쿼리 결과를 객체로 반환
해당되는 결과값이 여러개 있어도 1개만 반환 된다
const users = await User.findOne({}); // SELECT `id`, `name`, `age`, `married`, `comment`, `created_at` FROM `users` AS `User` LIMIT 1;
결과 값
User { dataValues: { id: 1, name: 'JENNIE', age: 25, married: false, comment: 'Jennie comment', created_at: 2022-04-06T06:25:49.000Z }, ... }
조건 조회 (attributes, where)
attributes 옵션을 통해 원하는 컬럼만 가져 올 수 있다
where 옵션을 통해 조건을 걸어줄 수 있다.
const users = await User.findAll({ attributes: ["id", "name", "age", "comment"], where: { married: false, }, }); // SELECT id, name, age, comment FROM users WHERE married = 1
where에서는 AND가 디폴트이기 떼문에 다른 연산을 적용하고 싶다면 sequelize의 Op객체를 사용해야 한다
자주 쓰이는 Op 연산
Op.gt 초과 Op.gte 이상 Op.lt 미만 Op.lte 이하 Op.ne 같지 않음 Op.or 또는 Op.and 그리고 Op.in 배열 요소 중 하나 Op.notIn 배열 요소와 모두 다름 const { Op } = require("sequelize"); const users = await User.findAll({ where: { [Op.and]: [{ authorId: 12 }, { status: "active" }], // WHERE authorId=12 AND status='active' [Op.or]: [{ authorId: 12 }, { authorId: 13 }], // WHERE authorId=12 OR authorId=13 authorId: { [Op.or]: [12, 13] }, // WHERE authorId=12 OR authorId=13 [Op.eq]: 3, // =3 [Op.ne]: 20, // != 20 [Op.is]: null, // IS NULL [Op.not]: true, // IS NOT NULL [Op.or]: [5, 6], // =5 OR =6 [Op.col]: "user.organization_id", // = user.organization_id (user 테이블의 organization_id값과 같은지) [Op.gt]: 6, // > 6 [Op.gte]: 6, // >= 6 [Op.lt]: 10, // < 10 [Op.lte]: 10, // <= 10 [Op.between]: [6, 10], // BETWEEN 6 AND 10 [Op.notBetween]: [11, 15], // NOT BETWEEN 11 AND 15 [Op.in]: [1, 2], // [Op.in]:[1, 2] == [1, 2], IN [1, 2] [Op.notIn]: [1, 2], // NOT IN [1, 2] [Op.like]: "%hat", // LIKE '%hat' [Op.notLike]: "%hat", // NOT LIKE '%hat' [Op.startsWith]: "hat", // LIKE 'hat%' [Op.endsWith]: "hat", // LIKE '%hat' [Op.substring]: "hat", // LIKE '%hat%' }, });
정렬 (order)
User.findAll({ order: [ ['age', 'DESC'], ['name', 'ASC'] ] }); // SELECT id, name FROM users ORDER BY age DESC name ASC;
limit, offset
User.findAll({ attributes: ['name', 'age'], order: [['age', 'DESC']], limit: 10, offset: 5, }); // SELECT name, age FROM useres ORDER BY age DESC LIMIT 10 OFFSET 5
데이터 수정 (UPDATE 쿼리)
User.update({ comment: 'NEW Comment', // 수정할 내용 }, { where: {id:2}, // 조건 }); // UPDATE users SET comment='NEW Comment' WHERE id=2
데이터 삭제 (DELETE 쿼리)
User.destroy({ where: {id:2} }); // DELETE FROM users WHERE id=2 User.destroy({ where: {id: {[Op.in]: [1,3,5]} } }); // DELETE FROM users WHERE id in(1,3,5)
JOIN
await User.findOne({ include: [ { model: Comment, }, ], }); // SELECT * FROM users LEFT JOIN model ON users.id=comments.commenter
raw query 사용하기
const users = await sequelize.query("SELECT * FROM `users`", { type: QueryTypes.SELECT });
'Node.js' 카테고리의 다른 글
[Node.js] sequelize 관계 정의 (associations) (0) 2022.04.06 [Node.js] Sequelize 설치 (0) 2022.04.05 [Node.js] multer로 이미지 업로드 하고 sharp로 리사이징 해주기 (0) 2020.11.27 [Node.js] multer 모듈 이용해서 파일 업로드 하기 (0) 2020.11.26 [Node.js] socket.io 원리 (0) 2020.10.20