SQL문
기본 SQL문
1. SELECT
데이터를 불러오는 쿼리문
SELECT 컬럼명 FROM 테이블명;
해당 테이블의 해당 컬럼의 데이터를 불러온다.
테이블의 전체 컬럼의 데이터를 불러오고 싶다면 컬럼명에 * 를 넣으면 된다.
SELECT * FROM Calendar;SELECT 컬럼명 FROM 테이블명 WHERE 조건;
WHERE 뒤의 조건이 참인 데이터만 불러온다.
조건은 [컬럼명 = 값] 으로 설정하여 컬럼명에 해당하는 값이 조건에 맞는 데이터만 불러오게 된다.
SELECT * FROM Calendar WHERE MONTH = 9;SELECT 컬럼명 FROM 테이블명 WHERE 조건 ORDER BY 컬럼명 ASC(or DESC);
ORDER BY 뒤의 컬럼명에 대해 오름차순(ASC) 혹은 내림차순(DESC)으로 정렬하여 불러온다.
기본값은 오름차순(ASC)으로 설정되어 있다.
SELECT * FROM Calendar WHERE MONTH = 9 ORDER BY MONTH ASC;SELECT 컬럼명 FROM 테이블명 WHERE 조건 ORDER BY 컬럼명 ASC(or DESC) LIMIT 개수;
위의 3번 데이터를 N개 불러온다.
LIMIT 3이라면 상위 3개 데이터만 불러오게 된다.
SELECT * FROM Calendar WHERE MONTH = 9 ORDER BY MONTH ASC LIMIT 3;
2. INSERT
데이터를 삽입하는 쿼리문
INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES (값1, 값2, ...);
테이블의 컬럼들에 값을 삽입한다.
컬럼명과 값의 순서와 개수는 동일해야 하며 문자열을 값으로 입력하는 경우 따옴표로 감싼다.
INSERT INTO Calendar(Calendar_id, MONTH, DAY, EVENT) VALUES(300, 9, 13, "정기회의");INSERT INTO 테이블명 VALUES (값1, 값2, ...);
테이블의 컬럼명을 입력하지 않은 경우, 모든 컬럼에 값을 입력하게 된다.
따라서, 모든 칼럼의 수와 순서에 맞게 데이터를 입력해야 한다.
ex) Calendar_id, MONTH, DAY, EVENT 컬럼이 존재하는 경우
INSERT INTO Calendar VALUES(300, 9, 13); ==> X
INSERT INTO Calendar VALUES(300, 9, 13, "정기회의"); ==> O
3. UPDATE
데이터를 수정하는 쿼리문
UPDATE 테이블명 SET 컬럼명 = 변경할 값;
테이블의 모든 데이터의 컬럼 값을 변경한다.
예를 들어, Calendar라는 테이블의 MONTH 컬럼에 해당하는 값을 모두 9월로 바꾸고 싶다면 다음과 같이 입력한다.
UPDATE Calendar SET MONTH = 9;UPDATE 테이블명 SET 컬럼명 = 변경할 값 WHERE 조건;
조건에 해당하는 데이터만 변경한다.
다음 예시는 MONTH값이 null인 데이터만 MONTH를 9로 변경하는 예시이다.
UPDATE Calendar SET MONTH = 9 WHERE MONTH is null;UPDATE 테이블명 SET 컬럼명1 = 변경할값 1, 컬럼명2 = 변경할값 2 , ... ;
변경할 컬럼이 여러개 일 때, 콤마를 사용하여 여러 개의 값을 모두 변경할 수 있다.
UPDATE Calendar SET MONTH = 9, DATE = 1;
4. DELETE
데이터를 삭제하는 쿼리문
DELETE FROM 테이블명;
테이블에 존재하는 모든 데이터를 삭제한다
DELETE FROM CalendarDELETE FROM 테이블명 WHERE 조건
WHERE 조건에 부합하는 데이터만 삭제한다.
다음 예시는 월의 값이 13인 데이터만 삭제하는 쿼리이다.
DELETE FROM Calendar WHERE MONTH = 13;
심화 SQL문
1. DISTINCT
중복을 제거하고자 하는 컬럼에 붙여 사용한다.
SELECT DISTINCT 컬럼명 FROM 테이블;
컬럼명에 해당하는 데이터의 중복을 제거하여 나타낸다.
다음과 같은 Calendar 테이블이 존재한다고 하자.
| MONTH | DATE | EVENT |
|---|---|---|
| 5 | 5 | 어린이날 |
| 5 | 8 | 어버이날 |
| 6 | 6 | 현충일 |
| 10 | 9 | 한글날 |
| 12 | 25 | 크리스마스 |
SELECT DISTINCT MONTH FROM Calendar;
이 쿼리를 실행할 경우 다음과 같은 결과가 나오게 된다.
MONTH = 5인 데이터가 두개 이기 때문에 중복을 제거하여 하나만을 나타낸다.
| MONTH |
|---|
| 5 |
| 6 |
| 10 |
| 12 |
또한, 이를 활용하여 중복을 제거한 데이터의 개수를 나타내는데 활용할 수 있다.
SELECT COUNT(DISTINCT MONTH) FROM Calendar
=> 4
만약, DISTINCT를 사용하지 않는다면
SELECT COUNT(MONTH) FROM Calendar
=> 5
마찬가지로, 다음과 같이 조건 또한 추가하여 나타낼 수 있다.
SELECT DISTINCT 컬럼명 FROM 테이블명 WHERE 컬럼명 = 조건
2. GROUP BY
테이블에서 특정 속성의 값이 같은 튜플을 모아 그룹을 만들고, 그룹별로 검색을 하기 위해 사용한다.
SELECT {컬럼명} FROM {테이블명} {조건절} GROUP BY {테이블명} 의 형태로 사용한다.
여기서, 집계함수 (sum, min, max 등등)를 사용하지 않으면 DISTINCT와 비슷한 경우가 있다.
예를 들어,
SELECT MONTH FROM Calendar GROUP BY MONTH; 라는 쿼리를 실행하면
SELECT DISTINCT MONTH FROM Calendar;를 실행했을 때와 마찬가지로
| MONTH |
|---|
| 5 |
| 6 |
| 10 |
| 12 |
라는 결과가 나타난다.
DISTINCT와 마찬가지로 중복이 제거된 결과가 나타난다.
하지만 GROUP BY는 그룹별로 정렬을 하여 나타내며 DISTINCT는 정렬을 하지 않는다.
따라서, 정렬이 필요한 경우와 필요하지 않은 경우를 생각하여 적절히 사용하면 될 것이다.
또, 집계함수를 사용하는 경우에는 GROUP BY 를 사용해야 할 것이다.
예를 들어, 각 월 별로 월에 해당하는 이벤트들이 있을 때
나는 각 월의 이벤트가 몇 개씩 존재하는지를 알고 싶다고 하자.
이 때는 다음과 같이 쿼리를 짜야 한다.
SELECT MONTH, COUNT(EVENT) FROM Calendar GROUP BY MONTH;
또한, 그룹별로 조건을 주어 조건을 만족한 그룹만을 가져오도록 할 수 있다.
이 때, 조건은 HAVING을 사용하여 나타낸다.
예를 들어, 월 별로 이벤트가 3개 이상인 월 만을 가져오고 싶다고 하자.
그럼 다음과 같은 쿼리를 작성할수 있다.
SELECT MONTH, COUNT(EVENT) AS cnt FROM Calendar GROUP BY MONTH HAVING cnt >= 3;
HAVING 절은 이렇게 GROUP BY와 함께 사용하며 그룹 별 조건을 나타낼 수 있다.
또, WHERE 절과 다르게 집계함수를 사용할 수 있다.
(WHERE절에서는 집계함수 사용이 불가능하다.)
이외의 추가적인 SQL문에 대해서는 다음 포스팅에 이어 나가려고 한다.
마무리
추가로 학습하면 좋을 자료
다음 포스팅에 이어서 추가적인 SQL문을 게시하겠지만, 그 전에 앞서 심화적인 내용들을 더 알고 싶다면
다음과 같은 키워드로 검색해보는 것을 추천한다.
- DML ( Data Manipulation Language )
- DDL ( Data Definition Language )
- DCL ( Data Control Language )
- SQL LIKE
기여자
HongEunho
📦