Data Base/Oracle SQL

23.10.05. Oracle SQL ① SELECT문

잇꼬 2023. 10. 5. 18:54
728x90
반응형
SMALL

1. SELECT 문
데이터베이스에서 정보(데이터)를 조회하는 문

SELECT 컬럼이름, 컬럼이름, ...-- 절
FROM 테이블명, 뷰명 -- 절


- SELECT 기능 
1) PROJECTION : 열 단위 추출

SELECT employee_id
    FROM hr.employees;


2) SELECTION : 행 단위 추출

SELECT *
    FROM hr.employees
    WHERE employee_id = 100 ;

SELECT *
    FROM hr.departments
    WHERE department_id = 90 ;

     
3) JOIN : 서로 다른 테이블에 있는 데이터를 추출

SELECT e.*, d.*
    FROM hr.employees e, hr.departments d 
    WHERE e.department_id = d.department_id
    AND e.employee_id = 100 ;


SQL 문 작성시 주의사항
1) SQL문 은 대소문자를 구분하지 않습니다.

(단, 튜닝에서는 대소문자를 구분한다. 컬럼명, 테이블명등은 소문자로 작성해야 하고, cup에서 차이가 난다.)

SELECT * FROM hr.employees WHERE employee_id = 100 ; 
select * from hr.employees where employee_id = 100 ;

 

- 단, 성능으로 보면 SQL 문의 대소문자를 규칙적으로 개발해야 좋다.

2) 공백문자 구분한다.

SELECT last_name,  first_name FROM hr.employees WHERE employee_id = 100 ;
SELECT last_name, first_name FROM hr.employees WHERE employee_id = 100 ;


3) tap key와 enter key 구분한다.
절들은 서로 다른 줄로 구분하는 것이 좋다.(enter key 구분)

SELECT last_name,   first_name FROM hr.employees WHERE employee_id = 100 ;

SELECT last_name, first_name 
FROM hr.employees 
WHERE employee_id = 100 ;


4) hint(힌트, 실행계획을 제어하는 기능) 

SELECT *
FROM hr.employees 
WHERE employee_id = 100 ;

SELECT /*+ full(e) */ * 
FROM hr.employees e
WHERE employee_id = 100

;

5) 주석 처리 기능

-- 단일행 주석 처리
/* 
여러행 주석 처리
*/

SELECT 
    employee_id, -- 사원번호
    last_name -- 성
FROM hr.employees ;

 

테이블 구조 

desc employees

 

■ 산술연산자 *, /, +, - 
1) NUMBER : *, /, +, -  사칙연산 가능

SELECT salary, salary * 12 , salary / 12, salary + 1000, salary - 1000
FROM hr.employees ;


2) DATE : +, - 가능

SELECT hire_date, hire_date + 300, hire_date - 300
FROM hr.employees ;

 

3) VARCHAR2(가변길이), CHAR(고정길이) : 사칙연산 불가능.

사칙연산 우선 순위 
1. *, / , +, -  순으로 

SELECT 1+2
FROM dual ; -- dual : 가상테이블


-- 여러개의 연산자를 같이 사용할 때는 괄호를 표현하면 가독성이 좋아진다.

SELECT ((((a * b) / c) + d) - e) 
FROM dual ;

 

-- 연산자 우선순위를 제어하는 방법은 괄호를 이용하면 된다.

SELECT (((a * b) /c) + (d - e))
FROM dual ;

■ null 
- null 사용할 수 없거나 할당되지 않았거나 알 수 없거나 적용할 수 없는 값. 결측값
- null : 0, 공백이 아니다. 

SELECT employee_id, salary, commission_pct, ((salary * 12) + (salary * 12 * commission_pct)) 
FROM hr.employees;

SELECT employee_id, salary, commission_pct, ((salary * 12) + (salary * 12 * nvl(commission_pct,0))) 
FROM hr.employees;


■ nvl() : null 값을 실제값으로 대처하는 함수

SELECT commission_pct, nvl(commission_pct, 0)
FROM hr.employees ;


-- PL/SQL 문법 구조
IF commission_pct IS NULL THEN
    return 0 
ELSE
    return commission_pct
END IF;


■ 열 별칭
- 열 이름을 다른 이름으로 출력한다. 
- 열이름 바로 뒤에 한칸 띄어쓰기 한 후 입력하면 된다.
- 열 이름과 별칭 사이에는 as 키워드를 사용할 수 있다. (선택사항) 
- 열 별칭에 공백, 특수문자(_, $, # 제외), 대소문자 구분하려면 큰 따옴표를 묶어야 한다.
- 열 별칭에 숫자가 먼저 나오면 큰 따옴표를 묶어야 한다. 

SELECT employee_id 사번, salary 급여, commission_pct, ((salary * 12) + (salary * 12 * nvl(commission_pct,0))) as "annual salary"
FROM hr.employees;

SELECT employee_id 사번, salary 급여, commission_pct, ((salary * 12) + (salary * 12 * nvl(commission_pct,0))) as "1000annual_salary"
FROM hr.employees;


■ 연결 연산자
- 열이나 문자열을 다른 열에 연결한다.
- 두 개의 세로선(||)으로 표현한다.
- 결과 열은 문자열로 생성된다.

SELECT last_name, first_name, last_name||first_name
FROM hr.employees;

SELECT last_name, first_name, last_name||salary -- salary 숫자 타입이기 때문에 암시적(내부적)으로 to_char(salary) 문자형으로 변환된다.
FROM hr.employees;

SELECT last_name, first_name, last_name||to_char(salary) -- 명시적으로 사용하는 습관을 갖자.
FROM hr.employees;

SELECT '오늘 하루도 행복하자!!' || null -- 문자 || null : 문자 출력한다.
FROM dual;


■ 리터럴 문자열 
- 숫자, 날짜, 문자는 작은 따움표로 묶어야 한다.

SELECT '사원번호 '||employee_id||' 입니다'
FROM hr.employees ;

SELECT '0000'||salary
FROM hr.employees ;
728x90
반응형
LIST