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-01
과2023-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
출처: 인프런, “배워서 바로 쓰는 SQL 쿼리”, 배워서 바로 쓰는 SQL 쿼리