SELECT문

2023. 3. 9. 15:25SQL/SQL 전문가 가이드(2020 개정판)

1. SELECT

사용자가 입력한 데이터는 언제라도 조회할 수 있습니다. 입력한 자료들을 조회해 보는 SQL문은 다음과 같습니다.

SELECT [ALL/DISTINCT] 출력 대상 칼럼명, 출력 대상 칼럼명, ...
  FROM 출력 대상 칼럼들이 있는 테이블명;

- ALL: Default 옵션이므로 별도로 표시하지 않아도 됩니다. 중복된 데이터가 있어도 모두 출력합니다.

- DISTINCT: 중복된 데이터가 있을 경우 1건으로 처리해 출력합니다.

 

[예제] SELECT한 다음 조회하기를 원하는 칼럼명을 콤마 구분자(,)로 구분해 나열하고, FROM 다음에 해당 칼럼이 존재하는 테이블명을 입력해 실행합니다.

SELECT PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, HEIGHT, WEIGHT, BACK_NO
  FROM PLAYER;

■ DISTINCT 옵션

[예제] 선수 테이블의 포지션 정보를 ALL과 DISTINCT 옵션으로 확인해 봅니다.

SELECT ALL
	POSITION
  FROM PLAYER;

ALL은 생략 가능한 키워드이므로 아래 SQL 문장도 위 예제와 같은 결과를 출력합니다.

[예제]

SELECT POSITION
  FROM PLAYER;

[예제]

SELECT DISTINCT
	POSITION
  FROM PLAYER;

위의 실행 결과를 보면 480개 행 모두 출력된 것이 아니라, 포지션의 종류인 4개의 행과 포지션 데이터가 아직 미정인 NULL까지 5건의 데이터만 출력된 것을 확인할 수 있습니다.

 

■ 에스터리스크(*) 사용하기

입력한 정보들을 보기 위해 테이블에서 보고 싶은 정보들이 있는 칼럼들을 선택해 조회할 수 있습니다. 해당 테이블의 모든 칼럼 정보를 보고 싶은 경우에는 에스터리스크(*)를 사용해 조회합니다.

SELECT *
  FROM 테이블명;

 [예제] 사원 테이블의 정보를 모두 조회합니다.

SELECT *
  FROM EMP;

실행 결과 화면을 보면 칼럼 레이블(LABLE)이 맨 위에 보이고, 레이블 밑에 점선이 보입니다. 레이블은 기본적으로 대문자로 보이고, 첫 라인에 보이는 레이블의 정렬은 다음과 같습니다.

 

- 좌측 정렬: 문자 및 날짜 데이터

- 우측 정렬: 숫자 데이터

 

■ ALIAS 부여하기

조회된 결과에 일종의 별명(ALIAS, ALIASES)을 부여해 칼럼 레이블을 변경할 수 있습니다.

 

- 칼럼명 바로 뒤에 온다.

- 칼럼명과 ALIAS 사이에 AS, as 키워드를 사용할 수 있다(옵션).

- 이중 인용부호(Double quotation)는 ALIAS가 공백, 특수문자를 포함할 경우와 대소문자 구분이 필요할 때 사용한다.

 

[예제] 선수들의 정보를 칼럼 별명을 이용해 출력한다.

SELECT PLAYER_NAME AS 선수명, POSITION AS 위치, HEIGHT AS 키, WEIGHT AS 몸무게
  FROM PLAYER;

칼럼 별명에서 AS를 꼭 사용하지 않아도 되므로, 아래 SQL은 위 SQL과 같은 결과를 출력합니다.

 

[예제]

SELECT PLAYER_NAME 선수명, POSITION 위치, HEIGHT 키, WEIGHT 몸무게
  FROM PLAYER;

2. 산술 연산자와 합성 연산자

■ 산술 연산자

산술 연산자는 NUMBER와 DATE 자료형에 대해 적용되며, 일반적으로 수학의 4 사칙연산과 동일합니다. 그리고 우선순위를 위한 괄호 적용이 가능합니다. 일반적으로 산술 연산을 사용하거나 특정 함수를 적용하면 칼럼의 레이블의 길어지고, 기존의 칼럼에 대해 새로운 의미를 부여한 것이므로 적절한 ALIAS를 새롭게 부여하는 것이 좋습니다.

[예제] 선수들의 키에서 몸무게를 뺀 값을 알아본다.

 

[예제]

SELECT PLAYER_NAME AS 선수명, HEIGHT - WEIGHT AS "키-몸무게"
  FROM PLAYER;

[예제] 선수들의 키와 몸무게를 이용해서 BMI(Body Mass Index) 비만지수를 측정한다.

※ 예제에서 사용된 ROUND() 함수는 반올림을 위한 내장 함수로서 3절에서 학습한다.

 

[예제]

SELECT PLAYER_NAME AS 선수명, ROUND(WEIGHT / ((HEIGHT / 100) * (HEIGHT / 100)), 2)
  AS BMI비만지수
  FROM PLAYER;

■ 합성 연산자

문자와 문자를 연결하는 합성(CONCATENATION) 연산자를 사용하면 별도의 프로그램 도움 없이도 SQL 문장만으로도 유용한 리포트를 출력할 수 있습니다. 합성(CONCATENATION) 연산자의 특징은 다음과 같습니다.

 

- 문자와 문자를 연결하는 경우 2개의 수직 바(||)를 사용한다(Oracle)

- 문자와 문자를 연결하는 경우 + 표시를 사용한다(SQL Server).

- CONCAT(string1, string2) 함수를 사용할 수 있다(Oracle, SQL Server).

- 칼럼과 문자 또는 다른 칼럼과 연결한다.

- 문자 표현식의 결과에 의해 새로운 칼럼을 생성한다.

 

[예제] 다음과 같은 선수들의 출력 형태를 만들어 본다.

출력 형태) 선수명 선수, 키 cm, 몸무게 kg
           예) 박지성 선수, 176 cm, 70 kg

[예제] Oracle

SELECT PLAYER_NAME :: ' 선수, ' :: HEIGHT :: ' cm, ' :: WEIGHT :: ' kg' AS 체격정보
  FROM PLAYER;

[예제] SQL Server

SELECT PLAYER_NAME + ' 선수, ' + HEIGHT + ' cm, ' + WEIGHT + ' kg' AS 체격정보
  FROM PLAYER;