Sql 문법

YEONGHUN KO·2024년 9월 13일
0

BACKEND - DATABASE

목록 보기
6/8
post-thumbnail

select

-> 표시될 column을 선택할 수 있다

SELECT (points * 10 + 20) AS discount_factor FROM customers
=> point 컬럼을 계산한뒤 discount_factor라는 이름으로 변경한다는 뜻

inner joins => (default)

다른 테이블의 컴럼들사이에 조건을 걸고 select하는 쿼리 문

outer joins(left, right 두가지 종류가 있음)

Join On 뒤에 오는 조건이 들어맞든 안맞든 결과값에 포함됨

using clause

SELECT * FROM customers c LEFT JOIN orders o
ON c.customer_id = o.customer_id 
 AND c.product_id = o.product_id

customer_id가 중복된다. 이때 using 키워드 comes in handy

SELECT * FROM customers c
LEFT JOIN orders o
using(customer_id,product_id)

참고로 AND 키워드를 ON이 끝나는 뒤에 붙여서 조건을 추가 할 수 도 있음

self joins

—> 같은테이블안에서도 조건을 걸어 선택가능함

functions including get data, sum, count

Select count(*) from user => 총 row의 갯수가 나옴
Select sum(age) from user => 모든 row의 age 컬럼을 더한 값이 나옴

group by

nested queries

a라는 테이블에서 특정 조건을 부여후 row를 뽑는다.

그리고 b라는 테이블에서 a1라는 컬럼이 뽑아낸 row에 속하는지 체크하고 속하면 리턴하고 싶을때 neste를 사용함. In 안에 full query가 담겨있어도 됨.

select pr.place_no, pr.content
from budify.place_review pr
where pr.place_no IN (
SELECT p.place_no
FROM budify.place p
where p.town > 200
);

아니면

where pr.place_no = (
SELECT p.place_no
FROM budify.place p
where p.town > 200
);

triggers

어떤 조건이 만족되었을때마다 실행되는 쿼리를 정의할 수 있다. 자동화 가능함.

insert

insertHashtag: (hashtag) => {
    let query = `insert INTO hashtag (name) VALUES('` + hashtag + `') on duplicate key update refer=refer+1`;
    return query;
}

insert INTO hashtag (name): hashtag 테이블에 새로운 해시태그를 추가해. 이때 추가할 해시태그의 이름은 함수의 인자로 전달된 hashtag 값을 사용해.
VALUES(' + hashtag + '): hashtag라는 변수에 저장된 값을 name 컬럼에 삽입해.
on duplicate key update refer=refer+1:

  • 만약 name 컬럼이 이미 존재하는 경우(중복 키 발생 시), 새로운 레코드를 삽입하지 않고 대신 refer라는 다른 컬럼의 값을 1 증가시켜.
  • 이 구문은 보통 name 컬럼에 대해 UNIQUE 제약조건이나 PRIMARY KEY가 걸려 있을 때 사용돼. 즉, 동일한 해시태그가 있을 때 삽입 대신 참조 횟수(refer)만 증가시키는 방식이야.

유저가 업로드한 장소 수를 구하는 방법:

SELECT COUNT(*) AS upload_count FROM place WHERE user_id = '특정 유저 ID';

이미 있으면 업데이트 없으면 새로 추가

INSERT INTO budify_new.carriage_total (date, total, terminal) VALUES ('2024-09-04', 22, 2) ON DUPLICATE KEY UPDATE total = VALUES(total),terminal = VALUES(terminal);

date 칼럼이 2024-09-04에 해당하는 row를 찾고 있으면 total,terminal을 업데이트. 없으면 새로 추가

복사

-- column만 복사
CREATE TABLE budify_new_staging.reservation
LIKE budify_new.reservation;

-- column + data까지 복사
CREATE TABLE budify_new_staging.carriage_total
LIKE budify_new.carriage_total;

INSERT INTO budify_new_staging.carriage_total
SELECT * FROM budify_new.carriage_total;

꿀팁.

MySqlWorkBench를 이용하여 GUI로 db를 열람/수정 가능하며, 쿼리문 까지 바로 작성 가능함

profile
'과연 이게 최선일까?' 끊임없이 생각하기

0개의 댓글