나의 개발일지

[SQL] SELECT 문 본문

Oracle SQL

[SQL] SELECT 문

YoonJuHan 2023. 4. 4. 17:19
SQL 문 작성의 규칙과 지침
1. SQL 문은 대소문자를 구분하지 않음
     키워드는 대문자로 입력하고 테이블 이름, 열 등은 소문자로 입력하는 것이 일반적
2. SQL 문은 하나 이상의 줄에 입력할 수 있으며 종료문자(;)를 입력하여 명령문을 완료하고 실행
3. 키워드는 줄간 나눠 쓰거나 약어로 쓸 수 없음
4. 절은 읽기 쉽고 편집하기 쉽도록 서로 다른 줄에 쓰도록 권장
5. 좀 더 읽기 쉬운 SQL 문을 작성하기 위해 들여쓰기를 사용

 

SELECT

  1. 표시할 열을 지정하기 위한 SELECT 절
  2. 데이터가 저장된 테이블을 지정하는 FROM 절
  3. 모든 열 선택
    1. SELECT 뒤에 *을 사용하여 테이블에 있는 데이터의 모든 열을 표시
  4. 특정 열의 선택
    1. 열 이름을 쉼표로 구분하여 지정
    2. SELECT 절에 출력 결과로 표시할 순서대로 열을 지정
  • y_dept 테이블의 모든 열에 모든 행을 표시
SELECT * 
FROM y_dept;

 

  • 특정 열의 선택 (열 이름을 쉼표로 구분하여 지정)
SELECT dept_id, dept_name
FROM y_dept;

 

DISTINCT

  1. 중복행의 제거
  2. SELECT의 결과는 기본적으로 중복 행을 제거하지 않은 상태로 결과를 표시한다.
  3. 결과에서 중복 행을 제거하려면 SELECT 절에 DISTINCT 키워드를 사용
  4. DISTINCT는 SELECT 절에 한 번만 사용 가능
  5. DISTINCT 다음에 여러 열을 지정하면 결과에는 열 조합 값에 대해 중복을 제거하고 표시
  • 모든 사원의 부서번호를 중복을 제거하고 표시
SELECT DISTINCT dept_id
FROM y_emp;

 

  • 모든 사원의 부서번호와 직급에 대하여 중복을 제거하고 표시
SELECT DISTINCT dept_id, position
FROM y_emp;

 

산술식

  1. 산술연산자를 사용하여 숫자 및 날짜 데이터에 대한 표현식을 작성
    1. FROM 절을 제외한 SQL 문의 모든 절에서 산술 연산자 사용 가능
    2. 산술연산자의 종류 : +, -, *, /
  2. 산술식 안에 여러 연산자가 있을 경우
    1. 곱셈과 나눗셈 우선
    2. 우선순위가 동일한 연산자는 왼쪽에서 오른쪽으로 계산
    3. 괄호를 사용하여 우선순위가 조정

 

  • 급여 및 300 인상된 급여를 SALARY + 300으로 표시한다.
SELECT emp_id, emp_name, salary, salary+300
FROM y_emp;

 

  • 사원의 이름, 급여 및 연간 총수입을 표시한다. (월급에 12를 곱한 후 300의 상여금을 더함)
SELECT emp_name, salary, 12*salary+300
FROM y_emp;

 

날짜 데이터의 연산

  1. 날짜 데이터에 산술 연산자를 사용하여 정수를 더하거나 빼기 가능
    1. 한 날짜에서 다른 날짜 빼서 날짜 간의 일 수 계산
    2. 계산 과정 또는 결과의 정수는 일 수에 해당
  2. 시간 이하의 단위계산은 하루를 24시간으로 환산하여 계산
  3. SYSDATE 함수
    1. 현재 날짜를 결과로 반환하는 오라클 제공의 내장함수
  4. DUAL 테이블
    1. 오라클에서 제공하는 DUMMY 테이블
    2. 단일 열과 단일 행으로 구성
    3. 주로 함수의 결과나 산술연산, 날짜연산의 결과를 표시하기 위하여 사용

 

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

 

  • 내장 함수인 SYSDATE를 사용하여 현재의 날짜를 DUAL테이블에 표시한다.
SELECT SYSDATE FROM dual;

 

  • 세션에서 날짜 형식을 변경한 후 현재로부터 3시간 후와 40분 후의 시간 구하기
ALTER SESSION SET NLS_DATE_FORMAT='yyyy/mm/dd/ hh24:mi:ss';
SELECT sysdate, sysdate+3/24, sysdate+40/(24*60)
FROM dual;

 

NULL 값의 사용과 산술식

  1. 알 수 없는 값, 사용할 수 없는 값, 할당할 수 없는 값, 적용할 수 없는 값을 의미
  2. 0이나 공백과 구분
    1. 0은 숫자이고 공백은 하나의 문자
  3. 산술식 NULL값이 사용되면 산술식의 결과 또한 NULL

 

  • COMM 열은 커미션을 받는 일부 사원을 제외한 대부분의 사원이 NULL 값을 저장하고 있다.
SELECT emp_id, emp_name, comm
FROM y_emp;

 

  • 연봉 계산을 위해 COMM의 값을 같이 계산하면 커미션이 NULL인 사원은 연봉이 NULL이 된다.
SELECT emp_id, salary, comm, (salary*12) + (salary*comm)
FROM y_emp;

 

열 머리글과 열 별칭

  1. SELECT문의 결과에서 열의 머리글
    1. 기본적으로 대문자로 표시
    2. 표현식에 의해 생성된 열은 표현식 자체가 열의 이름으로 사용
  2. 열 별칭
    1. SELECT 절에서 열 이름이나 표현식 대신 사용
    2. 출력 결과를 이해하기 쉽도록하기 위해 열의 이름이나 표현식을 다른 이름으로 변경
  3. 사용법
    1. SELECT 목록에서 열 이름 또는 표현식과 별칭 사이에 공백 또는 AS를 넣어 지정
    2. 대문자 표시가 기본
    3. 별칭이 공백 또는 특수문자를 포함하는 경우와 대소문자를 구분할 경우 별칭을 큰 따옴표로 묶음

 

  • 사원의 이름과 커미션 비율, 연봉(SALARY*12)를 별칭을 사용하여 표시
SELECT emp_name "Name", comm AS commission, salary * 12 "Annual Salary"
FROM y_emp;

 

연결 연산자와 Q연산자

  1. 하나 이상의 열 또는 표현식을 결합하여 결과에 하나의 열로 표시
  2. 연산자의 종류
    1. 연결 연산자 : ||
    2. Q연산자
  3. 임의의 리터럴과 함께 사용하여 의미있는 출력결과 생성

 

  • 이름과 직급을 연결하여 출력, 리터럴을 사용해 이름과 직급 사이에 공백을 추가
SELECT emp_name || ' ' || position AS "Employee's Position"
FROM y_emp;

 

  • 인용부호를 짝수로 써야한다. || '''s Salary :  ' ||          (홀수로 쓰면 에러)
SELECT emp_name || '''s Salary :  ' || position AS "Employee's Position"
FROM y_emp;

 

  • Oracle 10g 이상의 경우에는 Q연산자를 사용할 수 있다. (q, Q 대소문자 상관 없음)
SELECT emp_name || q'['s Salary : ]' || salary AS  "Employee's Position"
FROM y_emp;

 

'Oracle SQL' 카테고리의 다른 글

[SQL] 날짜 함수 (단일 행 함수 3)  (0) 2023.04.09
[SQL] 숫자 함수 (단일 행 함수 2)  (0) 2023.04.09
[SQL] 문자 함수 (단일 행 함수 1)  (0) 2023.04.07
[SQL] ORDER BY (데이터의 정렬)  (0) 2023.04.07
[SQL] WHERE 절  (0) 2023.04.05
Comments