BackEnd/DataBase
[ DB /Oracle ] DML | SELECT
jimin-log
2023. 2. 22. 14:38
SQL ( Structured Query Language )
- 대소문자를 구분하지 않는다.
- ' ; ' 모든 마지막은 세미콜롬으로 끝나게 된다.
- ' * ' 전체를 의미한다.
- ' -- ' 하이픈 두개는 주석이다.
DML ( Data Manipulation Language )
- 데이터 조작어로 검색 및 수정하기 위한 수단제공
- SELECT / INSERT / UPDATE / DELETE
SELECT 테이블
1. SELECT 절
select 절 (보고자 하는 컬럼명 나열) form 절 (보고자 하는 테이블명 나열)
1) 테이블의 모든 컬럼
select * from employees;
2) 컬럼 여러개 선택
원하는 컬럼명 선택, 해당 컬럼만 나열가능
SELECT e.EMPLOYEE_ID , e.FIRST_NAME ,e.EMAIL
FROM EMPLOYEES e;
3) 컬럼 별명 사용하기
- 컬럼 이름을 변경하여 출력 (원 컬럼이름은 변경되지 않으며 임시로 보여주는 형태)
- 컬럼명 뒤에 공백을 주고 별명을 쓰는 방식à대문자로 표기됨
- 컬럼명 뒤에 as 키워드 사용 후 별명을 쓰는 방식 à대문자로 표기됨
- 별명에 대소문자 구분, 공백, 특수문자 등이 필요한 경우 “ “(쌍 따옴표)로 감싸줌
select employee_id as empNO,
first_name "E-name",
salary "연 봉"
from employees;
4) 연결 연산자(Concatenation)로 컬럼들 붙이기
|| 를 사용하여 컬럼명을 연결 할 수 있다.
select first_name || last_name
from employees;
''(작은따옴표)를 사용하여 문자열을 추가하여 출력할 수 있다.
select first_name || ' hire date is ' || hire_date
from employees;
5) 산술연산자 사용하기
+, -, *, / 을 사용할 수 있음
select first_name, salary, salary*12, (salary+300)*12
from employees;
6) nvl (값이 null일때 바꿔줄 값)
nvl2 (e,null이아닐때, null일때)
SELECT e.FIRST_NAME,
e.SALARY,
nvl(e.COMMISSION_PCT,0)
FROM EMPLOYEES e
WHERE e.SALARY < 14000 AND e.SALARY > 10000
ORDER BY e.SALARY DESC;
2. WHERE 절
select 절 (컬럼명 나열) form 절 (테이블명 나열) WHERE 절 (비교 하려는 내용)
1) 비교 연산자
- =, !=, >, <, >=, <= 연산자 사용
( EX : ID가 10인 사람의 성 )
select first_name
from employees
where department_id = 10;
2) 조건이 2개 이상일때 한번에 조회
select first_name
from employees
where salary >= 14000
and salary <= 17000;
3) BETWEEN 연산자로 특정구간 값 출력하기
- 작은 값을 앞에, 큰 값을 뒤에
- 두 값을 모두 포함하는 결과를 출력(경계 값을 포함하지 않는 경우 사용하면 안됨)
- 느린 연산자에 속함
SELECT e.FIRST_NAME "이름",
e.HIRE_DATE "입사일"
FROM EMPLOYEES e
WHERE e.HIRE_DATE BETWEEN '04/01/01' and '05/12/31';
4) IN 연산자로 여러 조건을 검사하기
select first_name, last_name, salary
from employees
where first_name in ('Neena', 'Lex', 'John');
5) Like 연산자로 비슷한 것들 모두 찾기
- % : 임의의 길이의 문자열(공백 문자 가능)
- _ : 한글자 길이
SELECT e.FIRST_NAME "이름",
e.SALARY "급여"
FROM EMPLOYEES e
WHERE e.FIRST_NAME LIKE '%am%'; --문자열이 어디에 들어 있을지 모르기 때문에 앞뒤로 붙힘
6) IS (포함하는것)
※ NULL
아무런 값도 정해지지 않았음을 의미 (0이 아님)
어떠한 데이터타입에도 사용가능 not null 이나 primary key (중복되지 X , NULL X ) 속성에는 사용할 수 없음
null을 포함한 산술식은 반드시 null 이 되기 때문에 체크가 필요함. (IS)
select first_name, salary, commission_pct, salary*commission_pct
from employees
where COMMISSION_PCT IS NULL;
7) IS NOT (포함하지 않는것)
select first_name, salary, commission_pct, salary*commission_pct
from employees
where COMMISSION_PCT IS NOT NULL;
3. ORDER BY 절
select 절 (컬럼명 나열) form 절 (테이블명 나열) ORDER BY절 (정렬하려는 기준) (정렬 순서)
- 정렬을 정해주는 절
- 오름차순 → ASC (안적어도 default값 )
- 내림차순 →DESC
select first_name, salary
from employees
order by salary asc;
1) 정렬 필터 선택
(EX : 2번째 SALARY를 기준으로 오름차순 정렬 )
SELECT e.FIRST_NAME ,e.SALARY
FROM EMPLOYEES e
ORDER BY 2; // 첫번째 필터인지 두번째 필터인지.
2) 정렬을 2번
( MANAGER_ID 로 먼저 오름차순 정렬하고 그 후 SALARY를 내림차순)
SELECT e.MANAGER_ID, e.SALARY
FROM EMPLOYEES e
ORDER BY MANAGER_ID ASC, SALARY DESC;