6장. SQL문 기본 - SELECT 문의 이해 (1)
- SQL은 주로 DBMS에 저장된 테이블을 조작하기 위해 사용
- 데이터베이스가 여러개 존재할 수 있기 때문에 테이블을 보기 위해서는 데이터베이스를 선택해야 함
- 데이터베이스 목록 보기
mysql> show databases;
- 데이터베이스 사용하기
mysql> use DB명;
- 테이블 목록 보기
mysql> show tables;
SQL 기술 규칙
- SQL문의 마지막에 딜리미터(Delimiter. 문장의 단락을 의미하는 기호)를 붙임
- 키워드(SELECT, FROM 등)의 대소문자는 구별하지 않음
select
, SELECT
, Select
모두 가능
- 정수는 기존 그대로 사용, 문자열이나 날짜 시각은 작은 따옴표(
''
)로 감싸기
- 단어(word)는 반각 스페이스나 개행으로 구별. 전각 스페이스 사용 X
SELECT : 테이블 조회
SELECT 컬럼명
FROM 테이블명
[WHERE 조건]
[GROUP BY 컬럼1 [, 컬럼2, ...]
[HAVING 그룹 값에 대한 조건]]
[ORDER BY 컬럼1 [, 컬럼2, ...] [DESC/ASC]];
- 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- 컬럼명
*
사용 시 모든 컬럼 지정 가능
- 임의의 열을
,
로 구분하여 복수 지정 가능
- 테이블명
- 표 자체의 이름 사용 가능
- 암묵적으로 디폴트 데이터베이스의 테이블 지정 가능
- 데이터베이스명.테이블명
형태로 지정 가능
WHERE
SELECT 컬럼명 FROM 테이블명 WHERE 조건;
- 행 수를 제한하기 위해 사용
- 테이블의 각 행을 살피고 일치하는 행만
SELECT
AND
와 OR
을 사용해 여러 조건 사용 가능
비교 연산자
연산자 종류 | 의미 |
---|
= | 같다 |
<> | 같지않다 |
>= | 같거나 크다 |
> | 보다 크다 |
<= | 같거나 작다 |
< | 보다 작다 |
<=>
: =
와 같으나 NULL
에 대한 비교까지 수행
연산자 우선순위
연산자 |
---|
INTERVAL |
BINARY, COLLATE |
-(단항 감산), ~(단항 비트 반전) |
^ |
*, /, DIV, %, MOD |
-, + |
<<, >> |
& |
| |
=(비교 등호), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN |
BETWEEN, CASE, WHEN, THEN, ELSE |
NOT |
&&, AND |
XOR |
||, OR |
=(대입 등호), := |
DISTINCT
- 선택한 행에서 중복을 없애고 싶은 경우
DISTINCT
키워드 사용
SELECT DISTINCT 컬럼명 FROM 테이블명;
ORDER BY
- 검색 결과 정렬 방법
- 컬럼의 순서는
SELECT 컬럼1, 컬럼2, ...
로 지정
- 레코드의 순서는
ORDER BY
로 지정
SELECT ~ ORDER BY 컬럼1 [, 컬럼2, ...] [DESC / ASC]
DESC/ASC
: 내림차순/오름차순 정렬. 미지정시 오름차순
- 정렬키 :
ORDER BY
에 사용한 열명
- 정렬키가 Unique하지 않으면 같은 값 내에서 정렬 결과는 매번 다를 수 있음
집계 함수
- 복수의 행(이나 행의 값)에 대해 집계를 수행하는 함수
- 집계함수는 기본적으로
NULL
을 제외하고 집계
COUNT
는 COUNT(*)
으로 NULL
포함 집계 가능
COUNT
: 테이블의 행수를 알려주는 함수
SUM
: 테이블의 수치 데이터를 합계하는 함수
AVG
: 테이블의 수치 데이터 평균을 구하는 함수
MIN
: 테이블의 임의열 데이터 중 최소값을 구하는 함수
MAX
: 테이블의 임의열 데이터 중 최대값을 구하는 함수
GROUP_CONCAT
: 문자열을 한 줄로 집약
- 집계함수 내에
DISTINCT
를 사용하여 중복 제거 가능
- ex)
GROUP_CONCAT(DISTINCT 컬럼명)
GROUP BY, HAVING
- 데이터를 몇 개의 그룹으로 나누어 집계 함수를 적용할 수 있음
SELECT ~ FROM 테이블명 GROUP BY 컬럼1 [, 컬럼2, ...]
- HAVING을 통해 집약한 결과에 조건을 적용할 수 있음
SELECT ~ FROM 테이블명 GROUP BY ~ HAVING 그룹의 값에 대한 조건