Home 배워서 바로 쓰는 SQL 쿼리
Post
Cancel

배워서 바로 쓰는 SQL 쿼리

SQL 이란?

Structed Query Language: 컴퓨터에게 데이터를 가져오는 일을 할때 쓰는 구조화된 프로그래밍 언어

  • DML(Data Manipulation Language) - select, insert, update, delete
  • DDL(Data Definition Language) - Create, Alter
  • TCL(Transantion Control Language) - Commit, Rollback
  • DCL(Data Control Language) - Grant, Revoke

DB(DataBase)란?

데이터를 저장하는 공간, SQL은 데이터베이스에서 원하는 데이터를 가지고 오기 위한 것이기 때문에 DB에 대해서도 알아야 한다.

  • DB = 테이블 집합, 데이터를 통합해서 모아두는 공간.
  • 테이블 = 엑셀 파일 하나

  • 관계형 데이터베이스(Relational DataBase)
    • 서비스에서 많이 사용되는 DB 종류
    • 테이블들끼리 관계를 맺고 있는 체계적인 구조의 집합
      • 관계는 key값을 기준으로 이어져있으며 key값이 있어야 다른 테이블과 관계를 맺을 수 있다.
    • 무결성, 정합성들을 체크하고 저장한다.
      • NoSQL 대비 저장 속도는 느리지만 뽑아서 쓰는것에 있어서는 더 빠르다.
  • 비관계형 데이터베이스
    • 관계형이 아니면 다 비관계형으로 취급한다.
    • 클라이언트에서 발생한 데이터를 json 그 자체(날 것)로 저장한다.
      • 로그 데이터를 저장하는데 많이 쓰인다.
      • 데이터가 너무 많아져서 데이터 저장, 조회, 인덱스에 많은 리소스가 발생 → NoSQL 사용
    • 저장은 쉽지만 조회는 힘들다.

Select

데이터를 가지고 올때 컴퓨터에게 알려줘야 하는 최소한의 정보

  • 어떤 것? → SELECT
  • 어디에 ? → FROM

💡TIP💡 컬럼명을 확인하기 위해 select * from TABLE 전체조회 하는 건 위험하기때문에 limit 을 걸어서 컬럼명을 확인한 다음에 해당 컬럼을 select 에 넣어준다.

Where

가져올 데이터의 조건을 컴퓨터에게 알려주는 라인이며 한 개 이상의 조건을 작성할 수 있다. where 절에 String을 넣을때는 무조건 ‘’ 로 감싸줘야 한다.

  • in
    • ~안에 존재하는 경우
    • where country in (’Seoul’, ’Berlin’) : country가 Seoul 혹은 Berlin 인 조건
  • between .. and
    • 날짜 조건시 사이를 의미한다.
    • between ‘2023-01-01’ and ‘2023-02-02’ : 2023-01-012023-02-02 사이
  • like
    • 문자열 찾을때 사용하는 조건
    • where country like ‘S%’ : S로 시작하는 나라
    • where country not like ‘S%’ : S로 시작하지 않는 나라

Order By

순서대로 정렬해주는 명령어로 두 가지 이상의 컬럼에 조건을 줄 수 있다. (다중조건 가능)

  • 오름차순 asc(default)
  • 내림차순 dsc

컬럼명을 지정하지 않고 컬럼의 순서값을 넣어도 order by 정렬이 가능하다.

order by price desc == order by 6 desc (price가 6번째 컬럼)


Group By

select 구문의 연장선상으로 집계연산(sum, count)을 실행할때 기준을 알려주는 라인이며 2개 이상 작성이 가능하다.

count()를 사용할때 그냥 사용해도 되지만 혹시나 중복값을 제외하고 싶다면 distinct pk 를 넣어서 중복된 값들은 키값을 기준으로 제외하고 합산 할 수 있다.

count(distinct pk)

Having

group by가 있어야 같이 쓰인다. → group by로 집계한 데이터에서 조건을 넣고 싶을때 사용한다.
서브쿼리로 대체가 가능하다.

집계함수(Aggregate Function)

데이터를 집계하는 데 사용하며 select 뒤에서 사용하며 각 함수별로 사용법이 약간식 상이하다.

  • count( )
    • 개수, count(*) 로 하면 null값도 포함해서 카운트한다.
  • subStr( )
    • subStr(대상 컬럼, 글자수 시작, 글자수 끝) → 시작이 1이다.
    1
    2
    
    select subStr(BirthDate, 1,7)
    from employees
    
  • 조건별 분기 (if문을 사용할때 쓰는 명령어)
    • case when… then… end
  • ifnull(컬럼, null일때 넣고 싶은 값)
    • null 인 경우, 값 넣기
  • Max(컬럼), Min(컬럼)
    • 최대값, 최소값 하나를 반환한다.

#### 쿼리 성능 저하 우려로 가급적 select 절 내에서만 사용하는걸 지향합니다. #### 서브쿼리는 select 문을 써서 괄호로 묶어줘야지 실행된다.

1
2
3
4
select *
from products 
where price = (select max(price) from products)
;

Join

여러 테이블을 하나로 합쳐주는 역할을 하는 sql 기능으로 key를 기준으로 테이블을 합친다.

  • Cross Join: 전체 집합
  • Left Join : 왼쪽의 정보를 기준으로 값을 가지고 온다.
  • Rignt Join : 오른쪽 정보를 기준으로 값을 가지고 온다.
    • 거의 쓰지않는데 left 와의 차이는 순서 차이이기때문에 헷갈릴수있어서 되도록 left와 rignt 중 하나만 쓴다.
  • Inner Join: 교집합
1
select  From Table A join Table B on A.key = B.key

db_join

출처: 인프런, “배워서 바로 쓰는 SQL 쿼리”, 배워서 바로 쓰는 SQL 쿼리

This post is licensed under CC BY 4.0 by the author.

Transactional isolation(격리수준)

-