[혼공학습단 13기] 활동의 일환으로 한빛미디어의 < 혼자 공부하는 SQL >을 읽고 요약 정리한 글입니다.
SELECT 문
: 구축이 완료된 테이블에서 데이터를 추출하는 기능
실습용 예제 파일은 한빛미디어 사이트 자료실에서 다운로드 가능
파일을 살펴보면 데이터베이스를 만들 때 워크벤치 기능이 아니라 SQL로도 만들 수 있다는 사실을 알 수 있다.
: SELECT 문을 실행하려면 사용할 데이터베이스를 지정해야 한다.
USE 데이터베이스_이름;
워크벤치를 재시작하거나 쿼리 창을 새로 열면 다시 USE를 실행해야 한다.
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
열 이름에 *
을 입력하면 모든 열을 가져오며, 여러 개의 열을 가져오고 싶으면 콤마
로 구분한다.
테이블의 이름은 원칙적으로 데이터베이스_이름.테이블_이름
으로 표현하나 데이터베이스 이름을 생략하면 USE 문으로 지정한 데이터베이스가 자동으로 선택된다.
WHERE가 없으면 테이블의 모든 행이 출력되므로 SELECT 문을 사용할 때는 대부분 WHERE 절과 함께 사용한다.
조건식은 일반적으로 열_이름 = 값
의 형태를 가진다.
숫자로 표현된 데이터는 관계 연산자 (>, <, = 등)
를 이용해 범위를 지정할 수 있다.
2가지 이상의 조건을 만족하는 데이터는 논리 연산자 (AND)
를 이용해서 조회할 수 있다.
숫자의 범위를 조건식에서 사용할 때는 BETWEEN
을 사용하는 것이 편리하다.
문자 형태의 여러 조건을 만족하는 데이터를 조회하고 싶을 때에는 OR로 쓰는 방법이 있지만,
IN()
을 사용하면 더욱 간결한 코드가 만들어진다.
문자열의 일부 글자를 검색하는 방법으로 LIKE
를 사용한다.
%
는 무엇이든 허용한다는 의미이며, _
는 한 글자와 매치한다.
(Ex. '혼%' : 혼으로 시작하는 단어, '혼_ _' : 혼으로 시작하는 세 글자 단어)
※ 서브 쿼리
: SELECT 안에는 또 다른 SELECT가 들어갈 수 있다.
ORDER BY
절은 결과가 출력되는 순서를 조절한다. (값이나 개수에는 영향 없다.)
ASC
는 오름차순, DESC
는 내림차순을 의미하며, 생략 시 ASC로 인식한다.
정렬 기준은 여러 개의 열을 지정하는 것이 가능하다.
👉 첫 번째 지정 열로 정렬 후, 동일한 경우 다음 지정 열로 정렬한다.
LIMIT
는 출력하는 개수를 제한한다.
형식은 LIMIT 시작, 개수
이며 시작을 생략하면 처음부터 센다.
LIMIT 개수 OFFSET 시작
과 동일
DISTINCT
는 조회된 결과에서 중복된 데이터를 1개만 남기며 열 이름 앞에 쓴다.
GROUP BY
절은 그룹으로 묶어주는 역할을 한다.
집계 함수
는 주로 GROUP BY
절과 함께 쓰이며 데이터를 그룹화해주는 기능을 한다.
함수명 | 설명 |
---|---|
SUM() | 합계 구하기 |
AVG() | 평균 구하기 |
MIN() | 최소값 구하기 |
MAX() | 최대값 구하기 |
COUNT() | 행의 개수 세기 |
COUNT(DISTINCT) | 중복 제외 행의 개수 세기 |
집계 함수와 GROUP BY 절을 사용한 예시는 다음과 같다.
SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
FROM buy GROUP BY mem_id;
위 코드를 통해 회원 아이디 별로 총 구매한 개수를 추출할 수 있으며 별칭을 사용해 보기 좋게 만들 수 있다.
HAVING
은 WHERE처럼 조건을 제한하는 역할이지만, 집계 함수에 대해서 조건을 제한한다.
👉 HAVING 절은 꼭 GROUP BY 절 다음에 나와야 한다.
p. 138의 확인 문제 2번 풀고 인증하기
INSERT
는 테이블에 데이터를 삽입하는 명령으로 기본적인 형식은 다음과 같다.
INSERT INTO 테이블 [(열1, 열2, ···)] VALUES (값1, 값2, ···)
테이블 이름 다음에 나오는 열은 생략 가능하나, VALUES 다음에 나오는 값들의 순서, 개수는 테이블과 동일해야 한다.
AUTO_INCREMENT
는 열을 정의할 때 1부터 증가하는 값을 입력해준다.
단, AUTO_INCREMENT로 지정하는 열은 꼭 PRIMARY KEY
로 지정해줘야 한다.
자동으로 입력되므로 데이터를 입력할 때는 NULL로 지정하면 된다.
시작하는 값, 증가되는 값 변경도 가능하다.
INSERT INTO ~ SELECT
구문을 통해 다른 테이블에 이미 입력된 데이터를 가져와 한 번에 입력할 수 있다.
SELECT 문의 열 개수는 INSERT할 테이블의 열 개수와 같아야 한다.
UPDATE
는 기존 입력 값을 수정하는 명령으로 기본적인 형식은 다음과 같다.
UPDATE 테이블_이름
SET 열1=값1, 열2=값2, ···
WHERE 조건;
WHERE 절은 문법상 생략 가능하지만, 생략 시 테이블의 모든 행의 값이 변경된다.
DELETE
는 행 단위로 삭제하며, 형식은 다음과 같다.
DELETE FROM 테이블이름 WHERE 조건;
LIMIT와 함께 사용하면 상위 몇 건만 삭제할 수 있다.
※ 대용량 테이블 삭제
DROP
: 테이블 자체를 삭제함TRUNCATE
: 테이블 구조는 남기고 삭제데이터 입력, 삭제하는 기본 형식 작성하기