본문 바로가기
프로그래밍/database

시퀄라이즈 쿼리 정리

by 한코코 2022. 11. 16.

시퀄라이즈 쿼리

 

가로 : row (로우 = 레코드 = 튜플)

세로 : column (컬럼 = 속성 = attribute)

시퀄라이즈는 자바스크립트 객체를 쿼리를 생성한다.

 

 

 

로우 생성 쿼리 (create)

사용할 모델을 불러오고 그 안에 데이터를 넣어주면 된다.

const {User} = require('./users')

User.create({
    id:'user_id',
    pw:'1234',
    fruit:'kiwi'
})

mysql 쿼리로는 다음과 같다.

INSERT INTO users(id,pw,fruit) VALUES('user_id','1234','kiwi');

 

 

 

 

 

 

로우 조회 쿼리

전체를 조회한 후에 상위 데이터 1개만 가져오기(findOne)

// 시퀄라이즈
User.findOne({});
// mysql
SELECT * FROM users Limit 1;

 

전체를 조회한 후에 모든 데이터를 가져오기(findAll)

// 시퀄라이즈
User.findAll({});
// mysql
SELECT * FROM users;

 

전체를 조회한 후에 원하는 컬럼만(attributes), 조건에 맞는 데이터만(where)

findOne과 findAll과 조합해서 사용한다.

// 시퀄라이즈
User.findAll({
    attirbutes:['id','fruit'],
    where:{
        fruit:'kiwi',
        id:'doggy'
    }
});
// mysql
SELECT id,fruite FROM users WHERE fruit='kiwi' AND id='doggy';

 

자주 쓰이는 비교구문들

Op.gt (greater than, 초과)
Op.gte (greater than or equal to, 이상)
Op.lt (less than, 미만)
Op.lte (less than or equal to, 이하)
Op.ne (not equal, 같지 않음)
Op.or (or, 또는)
Op.in (in, 배열 요소 중 하나)
Op.notIn (not in, 배열 요소와 모두 다름)

 

더 많은 비교문들은 시퀄라이즈 사이트에서 찾으면 편하다.

( https://sequelize.org/docs/v6/core-concepts/model-querying-basics/ )

// 시퀄라이즈
const { TestScore } = require('./testScores');
const { Op } = require('sequelize');
TestScore.findAll({
    attirbutes:['class','score'],
    where:{
        class:'D',
        score:[Op.gt]:60
    }
})

// mysql
SELECT class,score FROM users WHERE class='D' AND score>60;

 

 

 

 

 

로우 업데이트 쿼리 (update)

// 시퀄라이즈
User.update({
    pw:'newPassword'
    where:{ id:'doggy' }
});
// mysql
UPDATE users SET pw:'newPassword' WHERE id:'doggy'

 

 

 

 

 

로우 삭제 쿼리 (destroy)

// 시퀄라이즈
User.destroy({
    where:{ id:'doggy' }
});
// mysql
DELETE users WHERE id:'doggy'

 

 

 

 

로우 upsert 쿼리

update와 insert 두개의 기능을 합친 기능이라고 한다.

조회 후에 없는 값이면 생성하고, 있는 값이면 그 값을 가져오는 형태.

findOrCreate()와 같은 기능을 가지고 있다.

const [city, created] = await City.upsert({
  cityName: "York",
  population: 20000,
});

// mysql
INSERT INTO Cities (cityName, population)
VALUES (?, ?)
ON DUPLICATE KEY
  UPDATE
    `cityName` = VALUES (`cityName`),
    `population` = VALUES (`population`);

 

 

 

 

시퀄라이즈 쿼리가 헷갈린다면...

아직 익숙하지 않거나 도저히 사용방법을 모르겠을때는 sql문을 사용해도 작동한다.

const [id, pw] = await sequelize.query('SELECT * FROM users');

 

 

 

댓글