Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[SQL] SELECT 문 본문
SQL 문 작성의 규칙과 지침
1. SQL 문은 대소문자를 구분하지 않음
키워드는 대문자로 입력하고 테이블 이름, 열 등은 소문자로 입력하는 것이 일반적
2. SQL 문은 하나 이상의 줄에 입력할 수 있으며 종료문자(;)를 입력하여 명령문을 완료하고 실행
3. 키워드는 줄간 나눠 쓰거나 약어로 쓸 수 없음
4. 절은 읽기 쉽고 편집하기 쉽도록 서로 다른 줄에 쓰도록 권장
5. 좀 더 읽기 쉬운 SQL 문을 작성하기 위해 들여쓰기를 사용
SELECT
- 표시할 열을 지정하기 위한 SELECT 절
- 데이터가 저장된 테이블을 지정하는 FROM 절
- 모든 열 선택
- SELECT 뒤에 *을 사용하여 테이블에 있는 데이터의 모든 열을 표시
- 특정 열의 선택
- 열 이름을 쉼표로 구분하여 지정
- SELECT 절에 출력 결과로 표시할 순서대로 열을 지정
- y_dept 테이블의 모든 열에 모든 행을 표시
SELECT *
FROM y_dept;
- 특정 열의 선택 (열 이름을 쉼표로 구분하여 지정)
SELECT dept_id, dept_name
FROM y_dept;
DISTINCT
- 중복행의 제거
- SELECT의 결과는 기본적으로 중복 행을 제거하지 않은 상태로 결과를 표시한다.
- 결과에서 중복 행을 제거하려면 SELECT 절에 DISTINCT 키워드를 사용
- DISTINCT는 SELECT 절에 한 번만 사용 가능
- DISTINCT 다음에 여러 열을 지정하면 결과에는 열 조합 값에 대해 중복을 제거하고 표시
- 모든 사원의 부서번호를 중복을 제거하고 표시
SELECT DISTINCT dept_id
FROM y_emp;
- 모든 사원의 부서번호와 직급에 대하여 중복을 제거하고 표시
SELECT DISTINCT dept_id, position
FROM y_emp;
산술식
- 산술연산자를 사용하여 숫자 및 날짜 데이터에 대한 표현식을 작성
- FROM 절을 제외한 SQL 문의 모든 절에서 산술 연산자 사용 가능
- 산술연산자의 종류 : +, -, *, /
- 산술식 안에 여러 연산자가 있을 경우
- 곱셈과 나눗셈 우선
- 우선순위가 동일한 연산자는 왼쪽에서 오른쪽으로 계산
- 괄호를 사용하여 우선순위가 조정
- 급여 및 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;
날짜 데이터의 연산
- 날짜 데이터에 산술 연산자를 사용하여 정수를 더하거나 빼기 가능
- 한 날짜에서 다른 날짜 빼서 날짜 간의 일 수 계산
- 계산 과정 또는 결과의 정수는 일 수에 해당
- 시간 이하의 단위계산은 하루를 24시간으로 환산하여 계산
- SYSDATE 함수
- 현재 날짜를 결과로 반환하는 오라클 제공의 내장함수
- DUAL 테이블
- 오라클에서 제공하는 DUMMY 테이블
- 단일 열과 단일 행으로 구성
- 주로 함수의 결과나 산술연산, 날짜연산의 결과를 표시하기 위하여 사용
- 사원의 입사일과 입사일로부터 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 값의 사용과 산술식
- 알 수 없는 값, 사용할 수 없는 값, 할당할 수 없는 값, 적용할 수 없는 값을 의미
- 0이나 공백과 구분
- 0은 숫자이고 공백은 하나의 문자
- 산술식 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;
열 머리글과 열 별칭
- SELECT문의 결과에서 열의 머리글
- 기본적으로 대문자로 표시
- 표현식에 의해 생성된 열은 표현식 자체가 열의 이름으로 사용
- 열 별칭
- SELECT 절에서 열 이름이나 표현식 대신 사용
- 출력 결과를 이해하기 쉽도록하기 위해 열의 이름이나 표현식을 다른 이름으로 변경
- 사용법
- SELECT 목록에서 열 이름 또는 표현식과 별칭 사이에 공백 또는 AS를 넣어 지정
- 대문자 표시가 기본
- 별칭이 공백 또는 특수문자를 포함하는 경우와 대소문자를 구분할 경우 별칭을 큰 따옴표로 묶음
- 사원의 이름과 커미션 비율, 연봉(SALARY*12)를 별칭을 사용하여 표시
SELECT emp_name "Name", comm AS commission, salary * 12 "Annual Salary"
FROM y_emp;
연결 연산자와 Q연산자
- 하나 이상의 열 또는 표현식을 결합하여 결과에 하나의 열로 표시
- 연산자의 종류
- 연결 연산자 : ||
- Q연산자
- 임의의 리터럴과 함께 사용하여 의미있는 출력결과 생성
- 이름과 직급을 연결하여 출력, 리터럴을 사용해 이름과 직급 사이에 공백을 추가
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