2019. 4. 2. 09:07ㆍDateBase
---------------------------SQL----------------------------------
--SQL 이란
--Staructured QUERY LANGUAGE(구조화된 질의언어)
--데이터베이스를 대상으로 질의를 수행할 수 있다.
--데이터의 조회, 데이터의 추가, 데이터의 변경, 데이터의 삭제
--데이터베이스 객체(테이블, 뷰, 인덱스, 시퀀스, 시노님, 프로시저, 함수)의 생성 및 삭제
--제약조건의 추가/삭제/활성화/비활성화
--사용자의 추가/삭제, 권한부여/권한제거
--트랜젝션 처리
--데이터베이스에서의 null의 의미는 아직 값이 결정되지 않았다.
--오라클의 키워드와 테이블이름, 컬럼이름은 대소문자를 구분하지 않는다.
(비교연산자에 사용되는 값은 대소문자 구별한다.)
--오라클에서 ""는 별칭(as)할때만 사용하는 것이고 문자열을 나타내는 것은 ''이다.
-- ; 은 맨 마지막에 한번만 쓴다
=============SQL의 종류================
--DML(데이터 조작 언어:Data Manipulation Language)
데이터의 추가(insert into), 변경(update), 삭제(delete), 조회(select)
--DDL(데이터 정의 언어:Data Definition Language)
데이터베이스 객체 생성(create), 삭제(drop), 변경(alter)
--DCL(데이터 제어 언어:Data Control Language)
트랜잭션의 실행(control), 취소(rollback)
=============Select 문 ===================
Select문이란
데이터베이스에서 정보를 조회(검색)한다.
※. select문의 구조
1. 테이블의 모든 데이터 조회
select *(all이란 뜻, 조건이 들어갈 수 있다.)
from 테이블명;
예시) 모든 부서 정보를 조회
select *
from DEPARTMENTS;
2. 테이블의 특정 열(컬럼)의 데이터 조회하기
select 컬럼명, 컬럼명, 컬럼명
from 테이블명;
예시) 부서정보중에서 부서번호와 부서이름을 조회하기
select DEPARTMENT_ID, DEPARTMENT_NAME
from DEPARTMENTS;
예시) 사원정보중에 사원아이디, 이름 급여를 조회하기
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, salary
FROM EMPLOYEES;
(from을 먼저써야 자동완성이 보이지만 최대한 외우자)
3. select절에서는 산술연산자(+, -, *, /)의 사용이 가능하다.
숫자 데이터 및 날짜 데이터에 대해서 사용가능하다. ( ||가 문자열 이어붙이기)
select 컬럼명 + 컬럼명, 컬럼명 - 숫자, 컬럼명 * 숫자, 컬럼명 / 숫자, 컬럼명 / 컬럼명
from 테이블명
예시) 사원 아이디, 이름, 급여, 연봉을 조회하기
select employee_id, First_name, last_name, salary*12
from employees;
예시) 사원아이디, 이름, 급여, 시급(원으로 환산한 값 : 1달러 1130원)
## as는 별칭으로 테이블의 컬럼이 바뀌는게 아니라 조회만 이렇게 하는것이다.
SELECT employee_id, first_name, last_name, salary/40*1130 as salary_per_hour
from EMPLOYEES;
※. 별칭 부여하기
1)별칭을 한글을 사용가능하다.
2)""로 감싸면 띄어쓰기가 가능하지만 절대 사용하지않는다.
3)select, as, data 등 같은 오라클의 예약어 및 특수문자는 사용 불가하지만 ""로 감싸면 가능하다.
1. as 사용
select 컬럼명 as 별칭, 컬럼명 as 별칭, 컬럼명 as 별칭
from 테이블명;
2. as 생략
select 컬럼명 별칭, 컬럼명 별칭, 컬럼명 별칭
from 테이블명;
※. 연결 연산자
연결 연산자란 두개의 컬럼을 이어붙이는것을 말한다. 자바 예시) "가가가"+"나나나 = 가가가나나나
연결 연산자는 ( || )를 사용하며 컬럼과 컬럼, 산술식과 컬럼, 산술식과 산술식을 연결해서 문자를 생성한다.
예시) 사원아이디, 이름, 급여를 조회하기
(단, 급여를 조회할 때 화폐간위를 같이 표현할 것)
select employee_id, first_name, last_name, salary || '달라'
from employees;
예시2) 사원아이디, 이름, 직종 조회하기
(단, first_name, last_name을 연결해서 조회하고, 별칭을 full_name으로 붙이기)
select employee_id, first_name || last_name full_name, job_id
from employees;
※. 중복제거(distinct)
중복된 값을 제거할때 사용되는 예약어가 distinct이다.
select distinct 컬럼
from 테이블명;
예시) 부서조회
select distinct job_id
from employees;
※. 선택되는 행을 제한하기(where [조건절])
where 절은 사용하면 조회되는 (선택되는) 행을 제한할 수 있다.
where 절은 from 절 다음에 위치한다.
1. 조건절의 조건식을 만족하는 행의 모든 컬럼을 조회한다. // /실행순서
select * / 3번 실행
from 테이블명 / 1번 실행
where 조건식; / 2번 실행
(조건식 -----------> where 컬럼이름 비교조건 값, where 컬럼이름 비교조건 다른컬럼)
오라클의 비교조건----------------
1) 같다 =
2) 같지 않다 != <>
3) 크다 >
4) 작다 <
5) 크거나 같다 >=
6) 작거나 같다 <=
--------------------------------------
2. 조건절의 조건식을 만족하는 행의 지정된 컬럼을 조회한다.
select 컬럼명, 컬럼명, 컬럼명
from 테이블병
where 조건식;
예시) 사원정보에서 60번 부서에 소속된 사원의 아이디, 이름, 직종을 조회하기
select employee_id, first_name, job_id, department_id
from employees
where department_id = 60;
※. where 절에서 사용가능한 기타 비교조건
where 컬럼명 between 값1 and 값2
지정된 컬럼의 값이 값1 이상 값2 이하인 행을 선택한다.
예시1) 급여가 10000 ~ 15000달러를 받는 사원의 아이디, 이름, 직종 급여를 조회하기
select employee_id, first_name, job_id, salary
from EMPLOYEES
where salary between 10000 and 15000;
where 컬럼명 in (값1, 값2, 값3) // 많이 사용한다.
지정된 컬럼의 값이 값1, 값2, 값3 중의 하나와 일치하는 행을 선택한다.
괄호안에 포함되는 값의 갯수는 제한이 없다.
예시2) 소속부서 아이디가 30, 60, 90인 사원의 아이디, 이름, 직종, 부서아이디를 조회하시오
select employee_id, first_name, job_id, department_id
from employees
where department_id in (30, 60, 90);
예시3) 직종 아이디가 'ST_MAN'이거나 'ST_CLERK'인 직종의 아이디, 제목, 최소급여, 최대급여 조회하기
select job_id, job_title, min_salary, max_salary
from JOBS
where job_id in ('ST_MAN', 'ST_CLERK');
where 컬럼명 like '문자패턴'
지정된 컬럼의 값이 문자패턴과 유사한 행을 선택한다.
오라클의 문자패턴 형식
where job_id like 'ST%' <---job_id가 'ST'로 시작하는 것 검색 : 'ST_MAN' 'ST_CLERK'
where job_id like '%ST' <---job_id가 'ST'로 끝나는 것 검색 : 'ST_MAN' 'SH_MAN' 'SR_MAN'
where first_name like '%e%' <---first_name가 'e'를 포함하는 것 검색 : 'elsa' 'gabliel' 'jane'
where name like '이__' <---이름이 '이**'인 사람을 검색 : '이순신' '이성계'
where name like '이_' <---이름이 '이*'인 사람을 검색 : '이황' '이이' '이산'
( _ 는 와일드카드 로 쓰인다.)
예시4) 이름에 'e'를 포함하고 있는 사원의 아이디, 이름을 조회하기
select employee_id, first_name
from EMPLOYEES
where first_name like '%e%';
where 컬럼명 is null
지정된 컬럼의 값이 null인 행을 선택한다.
컴럼의 값이 null인 행을 선택할 때 where컬럼명 = null과 같이 사용하지 않는다.
예시5) 부저정보에서 담당자가 지정되어 있지 않는 부서의 아이디, 부서이름을 조회하기
select department_id, department_name
from DEPARTMENTS
where manager_id is NULL;
where 컬럼명 in not null
지정된 컬럼의 값이 null이 아닌 행을 선택한다.
컴럼의 값이 null이 아닌 행을 선택할 때 where컬럼명 != null과 같이 사용하지 않는다.
예시6) 사원정보에서 커미션을 받는 사원의 아이디, 이름, 급여, 커미션을 조회하기
select employee_id, first_name, salary, commission_pct
from EMPLOYEES
where COMMISSION_PCT is not null;