본 포스트는 개인 스터디에 대한 정리 및 기록의 용도로써, 오개념이 존재 할 수 있습니다. 글은 상시 수정되며, 지적사항에 대해서 검토 후 수정하겠습니다.
본 포스트는 한국데이터진흥원 발간, SQL 전문가 가이드 2013Edition을 참고하였습니다.
국민대학교 김혁만 교수님의 일부 강의 자료를 참고했습니다
SELECT문을 정리하는 포스트가 몇까지 갈까 궁금하다. 양도 많고 주된 내용이기 때문에 차근차근 잘 정리해보겠다. 이거 외에도 프로그래머스에서 MySQL 문제들도 병행하면서 풀어보고 간혹 어떻게 문제에서 활용되는지도 정리하는게 목표다. SELECT문은 혼자 쓰이기보다는 다양한 방식으로 병합되서 쓰이기 때문에 최대한 이해가 쉽게 순서대로 정리해보겠지만 쉽지 않을거 같다. 지금까지는 Kleague DB에서 PLAYER 테이블에는 튜플들이 너무 많아서 몇개만 빼서 사용했는데 이번에는 모든 PLAYER 튜플들을 넣은상태로 시작하겠다. 약 480개 정도의 튜플이 있는 상태이다. 부득이하게 조건식을 설명없이 먼저 사용하지만, 보다보면 이해가 될거다.
-SELECT문
- 쉽게 말해 '조회', 말 그대로 '선택' 이라고 표현할까 싶다.
먼저 기본적인 SELECT의 구조를 보고, 여러 조건과 구절과 결합되서 사용했을때 읽는 순서를 보여주겠다.
내가 조회하고 싶은 열들을 SELECT에 써준다. 그리고 어떤 테이블에서 뽑아올건지 FROM에 대답한다. 그냥 일반적인 영어 어문이라 공부하면서 이해가 편했다.
SELECT PLAYER_ID, PLAYER_NAME, BACK_NO, TEAM_ID
FROM PLAYER;
이렇게 보고자하는 열들을 뽑아봤다. 여기서 하나하나 조건들을 늘려가면서 체계적이게 내가 원하는 정보들만 뽑을 수 있다. 이번에는 WHERE을 추가해보겠다. WHERE는 '어디'라는 말보다는 '조건'이라는 말로 이해하는게 나는 편했다.
SELECT PLAYER_ID, PLAYER_NAME, BACK_NO, TEAM_ID
FROM PLAYER
WHERE TEAM_ID = 'k07';
-- 아마 MySQL은 대소문자 구별이 없는거 같다. 'K07'해도 동일한 결과가 나온다
- ALL , DISTINCT 옵션
SELECT에서 이 두가지 옵션이 존재하는데 기본값은 ALL이다. 위에서는 옵션을 추가하지 않았기 때문에 ALL로 실행 됐다. 그렇다면 DISTINCT옵션은 뭘까? 간단하다. 유일한 값만 보여주는거다. ALL은 중복값에 대해서 모두 표현하지만 DISTINCT는 한개만 보여준다 위 TEAM_ID와 POSITION 대해서 DISTINCT를 적용해보겠다. 미리 예측해보고 답을 봤으면 좋겠다.
SELECT DISTINCT TEAM_ID
FROM PLAYER;
SELECT DISTINCT POSITION
FROM PLAYER;
한가지 짚고 넘어가야할 점은, NULL 도 하나의 형식으로 보고 추가한다는 점이다.
- SELECT 문의 실행 순서
대충 돌아가는 느낌을 알았으니까, SELECT문의 실행 순서를 살펴 보겠다. 뒤로 가서는 효율성도 결정 짓는 단계를 볼 수 있으니까 꼭 잘 봐두자.
1. FROM -> 2. WHERE -> 3. GROUP BY -> 4. HAVING -> 5. SELECT-> 6. ORDER BY 순으로 실행된다. |
- FROM : 어떤 테이블을 참조할 것인지 정한다.
- WHERE : 해당 테이블에서 이 조건에 맞는 투플들만으로 한정시킨다.
- GROUP BY : 주어진 Colum이름으로 튜플들을 그룹화 시킨다.
- HAVING : 그 그룹들 별로, 조건에 맞는 그룹만 선택한다.
- SELECT : 선택된 튜플들중, 기술된 컬럼 / 표현식만을 출력 및 계산한다.
- ORDER BY : 선택된 튜플들을 정렬시킨다.
이 순서도를 잘 기억하고 있으면 나중에 편하다. GROUP BY, HAVING, ORDER BY는 이번 포스트 에서는 다루지 않을 예정이다.
- Colum 별명 부여(alias)
SELECT 한 열에게 별명을 부여하여 그 별명으로 표기되게 하는 방법이다.
-- 별명 부여 X
SELECT PLAYER_NAME, POSITION, HEIGHT , WEIGHT
FROM PLAYER;
-- 별명 부여
SELECT PLAYER_NAME AS 선수명, POSITION AS 위치, HEIGHT AS 키, WEIGHT AS 몸무게
FROM PLAYER;
-- as 생략 가능, 공백 문자 있을시 ' ' 로 묶어줌
SELECT PLAYER_NAME 선수명, POSITION 위치, HEIGHT 키, WEIGHT '몸무게 kg'
FROM PLAYER;
- 산술연산자를 사용할때 응용 가능하다.
-- 별명 사용 X
SELECT PLAYER_NAME 이름, round(weight/((height/100)*(height/100)),2)
FROM PLAYER;
-- 별명 사용
SELECT PLAYER_NAME 이름, round(weight/((height/100)*(height/100)),2) 'BMI 비만지수'
FROM PLAYER;
- 합성 연산자(concatenation)
산술연사자로 얻은 값들은 계산되어 값이 나타났다. 각 열들의 값들을 합쳐서 새로운 문자열들의 집합으로 새로운 컬럼을 형성 시키고 싶을 때 사용한다.
ex) [선수명] 선수, [선수 키] cm, [선수 몸무게] kg를 가진 열을 만들고 싶다.
SELECT CONCAT(PLAYER_NAME, '선수,', HEIGHT, 'cm,', WEIGHT, 'kg') 체격정보
FROM PLAYER;
이번 포스트에서는 SELECT문을 사용해서 열의 이름을 새로 부여(별명)하기도하고, 문자열의 합으로 새로운 열들을 만들어 봤다. 다음 포스트에서는 WHERE 조건식을 정리해보는 시간을 가지도록 하겠다. 이번 포스트에서 SELECT의 실행순서를 설명할때 국민대학교 김혁만 교수님의 강의자료를 인용하여 자료를 만들었다.
'• 데이터베이스(DB) > __SQL__' 카테고리의 다른 글
#6 [DML] MySQL에서 내장함수 중 단일행 함수 사용하기, CASE절이란? (0) | 2021.05.29 |
---|---|
#5 [DML] MySQL에서 WHERE 조건식 사용해보기 IN,LIKE,IS NULL,BETWEEN (0) | 2021.05.25 |
#3[DML] MySQL 에서 INSERT, DELETE, UPDATE 문을 사용해보기, sql_Safe_Updates모드 (0) | 2021.05.25 |
#2[DDL]_ MySQL 을 이용하여 제약조건 사용 및 DROP TABLE, ALTER TABLE 정리 (0) | 2021.05.20 |
#1[DDL]_ MySQL 테이블 개념과 CREATE TABLE (0) | 2021.05.18 |