Computer Science/DataBase

[MySQL] SELECT

by Donghwan 2021. 8. 10.

SELECT문은 가장 많이 사용하는 구문입니다. 한마디로 데이터베이스 테이블에서 원하는 정보를 추출하는 명령입니다.

//예시 테이블//
CREATE TABLE person (
    name VARCHAR(5) NOT NULL,     -- ex) 홍길동
    height INT NOT NULL,                  -- ex) 178
    address VARCHAR(2) NOT NULL   -- ex) 서울, 경기, 강원, 경남, 경북, 전남, 전북, 충청
);
테이블 전체 출력
SELECT * FROM [테이블 이름]
-> SELECT * FROM person

특정 열만 보이도록 출력
SELECT [열 이름1, 열 이름2] FROM [테이블 이름]
-> SELECT name, height FROM person

조건에 부합하게 출력
SELECT [열 이름] FROM [테이블 이름] WHERE [조건]
-> SELECT * FROM person WHERE height > 180

조건에서 AND와 OR 활용하여 출력
SELECT * FROM [테이블 이름] WHERE [조건1] AND [조건2]
-> SELECT * FROM person WHERE height > 180 AND address='경기'
SELECT * FROM [테이블 이름] WHERE [조건1] OR [조건2]
-> SELECT * FROM person WHERE height > 180 OR address='경기'

조건에서 BETWEEN-AND을 사용하여 출력
BETWEEN은 키(height)와 같이 연속적인 값인 경우에 사이에 있는 결과들을 구해줍니다.

SELECT * FROM [테이블 이름] WHERE [열 이름] BETWEEN [값1] AND [값2]
-> SELECT * FROM person WHERE height BETWEEN 170 AND 180

조건에서 IN을 사용하여 출력
IN은 괄호안과 일치하는 결과를 출력합니다.
SELECT * FROM [테이블 이름] WHERE [열 이름] IN (조건1, 조건2)
-> SELECT * FROM person WHERE address IN ('서울','경기')

조건에서 LIKE를 사용하여 출력
'_'는 한 글자와 매치, '%'는 무엇이든 허용입니다.'
SELECT * FROM [테이블 이름] WHERE [열 이름] LIKE [조건]
-> SELECT * FROM person WHERE name LIKE '_길_'
-> SELECT * FROM person WHERE name LIKE '%길%'
-> SELECT * FROM person WHERE name LIKE '_길%'

서브쿼리 활용하여 출력
SELECT * FROM [테이블 이름] WHERE [열이름] [등식] [쿼리]
-> SELECT * FROM person WHERE height >= (SELECT name FROM person WHERE name = '홍길동')

ANY 활용하여 출력
서브 쿼리의 조건이 2개 이상이 나올 때, ANY를 활용하면 조건을 하나라도 만족하면 결과에 포함시킵니다.
'=ANY'는 IN과 동일한 의미입니다.

SELECT * FROM [테이블 이름] WHERE [열 이름] [등식] ANY [쿼리]
-> SELECT * FROM person WHERE height >= (SELECT name FROM person WHERE name IN ('김동환,'홍길동')
-> SELECT * FROM person WHERE height = (SELECT name FROM person WHERE name IN ('김동환,'홍길동')

ALL 활용하여 출력
ANY가 OR라면 ALL은 AND로 결과를 출력합니다.
SELECT * FROM [테이블 이름] WHERE [열 이름] [등식] ALL [쿼리]
-> SELECT * FROM person WHERE height >= (SELECT name FROM person WHERE name IN ('김동환,'홍길동')

ORDER BY로 정렬하여 출력
ASC 오름차순, DESC 내림차순, DEFAULT는 ASC라서 생략 가능합니다.
SELECT * FROM [테이블 이름] ORDER BY [열 이름] [오름차순/내림차순]
-> SELECT * FROM person ORDER BY name DESC
-> SELECT * FROM person ORDER BY name DESC, height DESC

DISTINCT로 중복을 제거하여 출력
SELECT DISTINCT [열 이름] FROM [테이블 이름]
-> SELECT DISTINCT name FROM person

LIMIT로 출력갯수를 제한하여 출력
OFFSET은 몇번째부터 시작인지를 의미합니다.
SELECT * FROM [테이블 이름] LIMIT [제한갯수]
->SELECT * FROM person LIMIT 5
SELECT * FROM [테이블 이름] LIMIT [제한갯수] OFFSET [시작숫자]
-> SELECT * FROM person LIMIT 5 OFFSET 0
SELECT * FROM [테이블 이름] LIMIT [OFFSET 시작숫자, LIMIT 제한갯수]
->SELECT * FROM person LIMIT 0, 5

GROUP BY를 활용하여 출력
GROUP BY 특정 컬럼을 그룹화합니다. 주로 집계 함수와 함께 쓰입니다.
집계 함수는 평균을 구하는 AVG(), 최소값을 구하는 MIN(), 최대값을 구하는 MAX(), 행의 갯수를 세는 COUNT(), 중복을 없앤 뒤 행의 갯수를 세는 COUNT(DISTINCT), 표준편차를 구하는 STDEV(), 분산을 구하는 VAR_SMAP()
->SELECT name, AVG(height) FROM person GROUP BY name
->SELECT address, AVG(height) FROM person WHERE address IN ('서울','경기') GROUP BY address

GROUP BY로 그룹화 된 결과에 HAVING으로 조건을 걸어 출력
-> SELECT name, AVG(height) FROM person GROUP BY name HAVING AVG(height) > 180

출처

  • 이것이 MySQL이다
728x90
반응형

'Computer Science > DataBase' 카테고리의 다른 글

[DataBase] 무결성  (0) 2021.10.28
[DataBase] 데이터베이스란?  (0) 2021.09.04
[MySQL] DELETE  (0) 2021.08.10
[MySQL] UPDATE  (0) 2021.08.10
[MySQL] INSERT  (0) 2021.08.10

댓글