
안녕하세요 성조입니다.
이번 포스팅은 개인 학습을 위해서 작성된 포스팅입니다.
정리용 언어로 작성됐습니다.
대체적으로 공식 문서를 참조하였습니다.
목차
SELECT의 단어적 의미
Databse에서의 SELECT란?
SELECT의 구문 형태
SELECT ~ FROM 절
WHERE 절 사용법
ORDER BY 절 사용법
LIMIT 절 사용법
SELECT의 단어적 의미
먼저 사전적 의미 또는 번역 상의 내용을 구글과 네이버에서 한번 알아본다.
구글에서는 다음과 같이 번역됐다.
| 고르다 |
네이버의 영어사전은 다음과 같은 뜻을 같고 있었다.

위와 같이 무엇을 고르거나 선택하는 경우에 Select라는 단어가 쓰인다.
대부분의 프로그래밍에서는 명령어에 사용되는 영어 단어의 의미를 그대로 사용한다.
다시 본 포스팅의 주 목적인 Database에서의 사용법으로 돌아간다.
Database에서의 SELECT란?
Database에서는 SELECT라는 단어는 FROM과 하나로 묶여서 원하는 데이터를 갖고올 때 기본적으로 사용되며, 가장 많이 사용되는 문법이다.
| 학번 | 이름 | 주소 |
| 123456 | 김아무개 | 서울 |
| 789456 | 이아무개 | 부산 |
다음과 같은 테이블이 있을 때 테이블의 이름이 학생 정보이며, 조회하고 싶은 데이터는 이름일 때
대소문자 구분 없이 SELECT 이름 FROM 학생 정보;를 작성하면 학생 정보 테이블에 존재하는 이름 정보들을 모두 조회할 수 있다.
데이터가 커지는 경우 모든 데이터를 조회하면 문제가 발생할 수 있으므로 원하는 조건 또는 개수 만큼 데이터를 조회할 때도 사용된다. 삽입/삭제/갱신 등 모든 처리를 진행할 때 사용되며, Database에서 원하는 데이터를 갖고 올 때 가장 기본적으로 사용되는 이유이다.
SELECT의 구문 형태
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr] ...
[into_option]
[FROM table_references
[PARTITION partition_list]]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
[HAVING where_condition]
[WINDOW window_name AS (window_spec)
[, window_name AS (window_spec)] ...]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[into_option]
[FOR {UPDATE | SHARE}
[OF tbl_name [, tbl_name] ...]
[NOWAIT | SKIP LOCKED]
| LOCK IN SHARE MODE]
[into_option]
into_option: {
INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name] ...
}
|
cs |
위 내용은 MYSQL 8.0 공식 문서에서 발췌한 내용이다.
기본적인 설명을 진행하면 다음과 같다.
SELCET와 FROM 사이에 들어가 있는 값들은 무조건 SELCET와 FROM사이에 값이 존재해야 된다.
|
1
2
3
4
5
6
7
8
9
10
|
SELECT
[FROM table_references
[PARTITION partition_list]]
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr] ...
[into_option]
|
cs |
즉, 위와 같은 문장의 형태로 작성하면 문법에 대한 오류가 발생한다.
이번 포스팅에서는 SELCET, FROM, WHERE, ORDER BY, LIMIT에 대한 설명을 진행한다.
소개하고자 한 구문 정리의 내용을 정리하면 다음과 같다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr] ...
[into_option]
[FROM table_references
[PARTITION partition_list]]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
[HAVING where_condition]
[WINDOW window_name AS (window_spec)
[, window_name AS (window_spec)] ...]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
|
cs |
SELECT ~ FROM 절
"어디서(FROM), 무엇을(SELECT) 가져올 것인가"를 다루는 절이다.
조회할 테이블과 컬럼(열)을 지정하면 된다.
사용법은 'SELECT [컬럼명] FROM [테이블명];'으로 사용된다.
모든 컬럼을 가져오려면 *(애스터리스크)를 사용하는데 실무에서 이렇게 쓰면 정말 곤란하다.(트래픽도 매우 폭발적으로 늘어나는 문제도 있기 때문)
여러 컬럼을 가져오로면 쉼표(,)로 구분하면 된다.
[EX]
SELECT name, age FROM users; -> 'users' 테이블에서 이름과 나이만 조회하는 것이다.
SELECT * FROM users; -> 해당 테이블의 모든 데이터를 조회한다.
WHERE 절 사용법
'어떤 조건의 데이터만 추려낼 것인가?'를 다루는 영역이다.
'WHERE [조건식]'의 방식으로 사용하게 된다.
비교 연산자(=, >, <, <=, >=, !=)와 논리 연산자(AND, OR, NOT)을 활용하는 구조이다.
문자열 필터링시에는 LIKE 연산자도 자주 사용되는데 "WHERE name LIKE ['무엇%' or '%무엇']"이런 형식으로 활용하게 된다.
ORDER BY 절 사용법
'결과를 어떤 순서로 정렬해서 세울 것인가'라고 볼 수 있다.
조회된 데이터를 특정 컬럼 기준으로 정렬하게 되는 것이다.
ORDER BY [컬럼명] [정렬방식]
- ASC (오름차순): 작은 것부터 큰 순서이고, 생략시 이 오름차순이 기본 값이된다.
- DESC (내림차순): 큰 것부터 작은 순서
여러 컬럼을 기준으로 정렬할 수 있는 점이 있다. 나이가 크거나 작고, ㄱ,ㄴ,ㄷ,ㄹ 이런 형식이된다.
LIMIT 절 사용법
"촤종 결과 중 몇 개만 잘라서 볼 것인가"를 담당한다.
사용법은 LIMIT [출력할 개수] OR LIMIT [시작 위치], [출력할 개수]
핵심 팁은 시작 위치(Offset)는 0부터 시작한다는 점이 있다.
포스팅을 진행하면서 SELECT에 관련된 내용이 생각보다 많아져서 존대를 기반으로한 설명 초점이 아닌 내용 요약에 초점을 잡은 글로 포스팅을 정리했습니다.
오타 또는 잘못된 지식 정보가 있다면 문의 댓글 부탁드리겠습니다!
다음 포스팅 때 뵙겠습니다.
- 참조 -
https://dev.mysql.com/doc/refman/8.0/en/select.html
MySQL :: MySQL 8.0 Reference Manual :: 13.2.10 SELECT Statement
13.2.10 SELECT Statement SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr] ... [into_option] [FROM table_referenc
dev.mysql.com
'Database' 카테고리의 다른 글
| [Database] DML(Data Manipulation Language)이란? (Lightly) (0) | 2022.04.26 |
|---|---|
| [Database] SQL vs NoSQL (0) | 2022.04.11 |
| [Database] 함수적 종속성 FD (Funcional Dependency) (2) | 2022.04.04 |
| [Project]pet and pet, Database[MySQL], schema (0) | 2022.03.05 |
| [파이널 프로젝트] pet and pet erd (2) | 2022.02.26 |