SQL/ORACLE

[SQL/ORACLE] SELECT 문

Codey 2022. 12. 28. 13:28

■ SQL 문장 작성법

  • SQL 문은 대소문자 구분 X
  • SQL 문은 하나 이상의 줄에 입력할 수 있으며 종료문자(;)를 입력
  • 키워드는 다음 줄에 나눠 쓰거나 약어로 쓸 수 없다.
  • 절은 읽기 쉽고 편집하기 쉽도록 서로 다른 줄에 쓰는 것이 좋다.
  • 좀 더 읽기 쉬운 SQL 문을 작성하기 위해 들여쓰기 사용
  • 키워드는 대문자로 입력, 테이블 이름, 열 등은 소문자로 입력하는 것이 좋다.

■ SQL 기능

명칭 설명
프로젝션(Projection) SELECT 절에 열 이름을 지정
선택(Selection) 조건문을 사용하여 표시할 행을 제한
조인(Join) 둘 이상의 테이블을 연결하고 하나의 결과로 조합하여 출력


SELECT 문
데이터베이스에 저장된 데이터를 사용자가 원하는 형태로 검색하기 위한 언어

■ 구문

SELECT *|{[DISTINCT] column|표현식 [별칭],...}
FROM table;

■ * 모든 열 선택

명칭 설명
* SELECT 뒤에 *를 사용하여 테이블에 있는 데이터의 모든 열을 표시
-- Y_DEPT 테이블의 모든 열에 모든 행을 표시
SELECT *
FROM y_dept;


■ 특정 열의 선택

  • SELECT 문을 사용할 때 열 이름을 쉼표로 구분하여 지정하면 테이블의 특정 열을 표시
-- Y_DEPT 테이블의 모든 부서 번호와 위치 번호 표시
SELECT dept_id, loc_id 
FROM y_dept;


■ DISTINCT 중복 행의 제거

명칭 설명
DISTINCT 중복을 제거하고 표시
-- Y_EMP 테이블에서 모든 사원의 부서번호를 중복을 제거하고 표시
SELECT DISTINCT dept_id
FROM y_emp;

-- Y_EMP 테이블에서 부서번호와 직급의 중복을 제거하고 표시
SELECT DISTINCT dept_id, position
FROM y_emp;


■ 산술식의 사용

명칭 설명
* 곱하기
/ 나누기
+ 더하기
- 빼기
-- 사원의 이름, 급여 및 연간 총수입을 표시한다.
-- 월급에 12를 곱한 후 $300의 상여금을 더하여 계산한다.
SELECT emp_name, salary, 12*salary+300
FROM y_emp;

  • 괄호()를 사용하여 연산자의 실행 순서를 지정
-- 괄호를 사용하여 연산자의 실행 순서를 지정 가능
SELECT emp_name, salary, 12*(salary+300)
FROM y_emp;


■ 날짜 데이터의 연산

-- 사원의 입사일과 입사일로부터 30일 후의 날짜를 사원번호와 함께 표시
SELECT emp_id, hiredate, hiredate+30
FROM y_emp;

명칭 설명
SYSDATE 현재의 날짜를 표시
SESSION 세션 내에서 날짜 표현 형식을 변경
-- 내장 함수 SYSDATE를 사용하여 현재의 날짜 표시
SELECT SYSDATE 
FROM dual;

-- 세션 내에서 날짜 표현 형식을 변경
ALTER SESSION SET nls_date_format='yyyy/mm/dd hh24:mi:ss';
SELECT sysdate FROM dual;

  • 날짜에 정수를 더하거나 빼는 것은 일 수에 해당되므로 시간 이하의 단위계산은 하루 24시간으로 환산하여 계산
-- 현재로부터 3시간 후와 40분 후의 시간 구하기
SELECT sysdate, sysdate+3/24, sysdate+40/(24*60)
FROM dual;


■ NULL 값의 사용과 산술식

  • NULL이 포함되는 계산식의 결과에서 주의할 사항이 있다.
  • 산술식에서 사용되는 열에서 특정 값이 NULL이면 결과 또한 NULL이 적용된다.
-- NULL을 포함한 계산식
SELECT emp_id, salary, comm, (salary*12)+(salary*comm)
FROM y_emp;

NULL이 포함되어 NULL이 나오는 모습


■ 열 머리글과 열 별칭(Column Alias)

-- emp_name은 "Name", comm은 "commission", salary*12는 "Annual Salary"로 표현
-- " "를 사용한 열은 열 머리글이 지정한 형식(대소문자, 공백 등)으로 출력
-- comm과 같이 큰 따옴표를 사용하지 않은 열은 별칭이 대문자로 출력
SELECT emp_name "Name", comm AS commission, salary*12 "Annual Salary"
FROM y_emp;


■ 연결연산자(||)와 Q연산자

명칭 설명
|| 다른 열, 산술식 또는 상수 값에 연결하면 좌우에 있는 열이 결합되어 하나의 열로 출력
q 연산자 [], {}, () 또는 <> 문자 쌍 중에서 사용하기 편한 구분자를 임의로 선택하여 사용
-- Y_EMP 테이블에서 이름과 직급을 Employee's Position으로 출력
SELECT emp_name || position AS "Employee's Position"
FROM y_emp;

-- 리터럴을 사용해서 이름과 직급사이에 공백을 추가
SELECT emp_name || ' ' || position AS "Employee's Position"
FROM y_emp;

-- 영문보고서 작성 시 인용부호를 하나만 사용하는 경우 에러 발생
SELECT emp_name || ''s Salary : ' || salary AS "Employee's Position"
FROM y_emp;

-- 이 문제 해결을 위해 인용부호를 짝수로 써서 해결 가능
SELECT emp_name || '''s Salary : ' || salary AS "Employee's Position"
FROM y_emp;

-- 오라클 10G 이상의 경우에는 Q연산자로 가능
SELECT emp_name || q'['s Salary : ]' || salary AS "Employee's Position"
FROM y_emp;