본문 바로가기

하루 30분 SQL 공부하기

[SQL/DML] SELECT 검색문의 SELECT 절 기초 쿼리 알아보기

SELECT 문

일반 형식

SELECT [ALL|DISTINCT] {COLUM_name [[AS] COLUM_alias],}+  | *}
FORM TABLE_LIST
[WHERE 투플_조건식]
[GROUP BY 컬럼명 [HAVING 그룹 조건식]]
[ORDER BY {컬럼명| 컬럼_별칭| 컬럼_위치 [ASC|DESC],}+]
[LIMIT [offset,] row_count];
  • 투플 조건식 : 컬러명, 비교연산자, SQL연산자, 숫자/문자/표현식 컬럼명
  • []은 생략 가능하다는 의미.
  • + : 1회 이상 반복이라는 의미 

 

1) SELECT문의 실행순서

SELECT문의 실행순서는 다음과 같다 

  1. FROM : 실행 대상 테이블을 참조한다. 
  2. WHERE : 조건에 맞는 투플만 선택한다. 
  3. GROUP BY : 기준 컬럼의 값에 따라, 투플들을 그룹화 한다. 
  4. HAVING : 각 그룹별로, 조건에 맞는 그룹만 선택한다. 
  5. SELECT : 선택된 투플에서, 기술된 컬럼/표현식만 출력/계산한다. 
  6. ORDER BY : 투플을 정렬한다. 
  7. LIMIT : 정해진 번위의 투플만 출력한다. 

 

2) SELECT 문의 SELECT 절

SELECT [ALL|DISTINCT] {COLUM_name [[AS] COLUM_alias],}+  | *}
FORM 테이블_리스트;

ALL과  DISTINCT는 생략 가능하다. 

ALL은 디폴트 값으로 중복된 투플을 모두 포함한다는 뜻이고 DISTINCT는 중복된 투플은 하나만 남겨두고 모두 제거한다는 의미이다. 

컬럼 별칭(colum alias)을 사용해서 컬럼명에 별칭을 정의할 수 있다. 컬럼명 대신 컬럼표현식을 사용할 때, 매우 유용하게 사용한다. 

 

기본 예제) 

SELECT PLAYER_ID, PLAYER_NAME, BACK_NO, TEAM_ID
FROM PLAYER

 

 

DISTINCT 사용) 

SELECT DISTINCT TEAM_ID
FROM PLAYER;

DISTINCT를 사용하면  중복이 없이 값이 출력되는 것을 알 수 있다. 해당 colum에 어떤값들이 들어가 있는지 살펴볼 때 사용하면 좋을 것 같다. 

 

컬럼별칭 사용 )

SELECT PLAYER_NAME AS '선수 이름', NATION AS 국가, BIRTH_DATE AS 생일, HEIGHT 키 , WEIGHT 몸무게
FROM PLAYER;

AS는 생략 가능, 별칭에 공백이 들어갈 때는 ' ' 를 사용해야 한다. 

 

♦️ SQL에서는 컬럼별칭은 테이블에 영향을 주지 않고 오직 출력 용도로만 사용한다. 그래서 테이블에 직접 검색하는 WHERE절과  GROUP BY에서는 사용할 수 없다. 반면 SELECT 절과 ORDER BY절,  HAVING절 에서는 사용할 수 있다. 

 

잘못 사용한 예시)

SELECT PLAYER_NAME AS '선수 이름', NATION AS 국가, BIRTH_DATE AS 생일, HEIGHT 키 , WEIGHT 몸무게
FROM PLAYER
WHERE 키 >= 170;   /*에러*/

WEHER절에서 별칭을 사용하면 Unkown column이라는 에러메시지가 나오는 것을 알 수 있다. 

 

3) 합성 연산자 CONCAT

컬럼과 컬럼, 혹은 컬럼과 문자열을 연결하여, 새로운 컬럼을 생성한다. 

SELECT CONCAT(PLAYER_NAME, '선수, ', HEIGHT, 'cm, ', WEIGHT, 'kg')
FROM PLAYER;

CONCAT을 사용하면 이런식으로 값을 뽑아서 새로운 컬럼을 생성할 수 있다.