조인은? 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. 오늘은 그 중 나 자신을 조인하는 self join과 한 테이블에만 데이터가 있을 때 결과를 조회하는 outer join을 학습하였다.
데이터베이스 모델링이란? 주어진 개념으로부터 데이터 모델을 구성하는 작업(테이블 설계, 컬럼, 타입, 관계 정의 등)
[select문]
SELECT 컬럼명 ...함수명(컬럼명)
FROM 집합...(SELECT 문-인라인뷰)
WHERE 컬럼명 = 값(상수,SELECT 문-서브쿼리)->조건검색&조인도 한다.
NOT 컬럼명=값
AND 컬럼명=값 (SELECT 문/교집합->경우의 수, 일 양 감소)
*[OR 컬럼명=값(합집합 -> 경우의 수, 일 양 증가->사용 지양)]
GROUP BY 컬럼명(단-그룹함수)
[[HAVING]]
ORDER BY
*데이터타입에서 고정형 char타입(hello___) 대신 varchar2(hello) 사용을 많이하는 이유와 동일(일의 양)
--부서, 직책별 그룹
SELECT deptno AS "부서", JOB, count(JOB) AS "부서|직책 인원", sum(sal) AS "급여 합계"
FROM emp
GROUP BY deptno, JOB
ORDER BY deptno;
[오라클 tip]
sqlplus id/비번@ip:1521/orcl11
[토드 tip]
[프로시저]
CREATE OR REPLACE PROCEDURE 프로시저 이름
( 매개변수명1 [ IN or OUT or INOUT ] 데이터타입,
매개변수명2 [ IN or OUT or INOUT ] 데이터타입 ... )
IS or AS
변수, 상수 등 선언 ( 선언부 )
BEGIN
실행 문장 ( 실행부 )
EXCEPTION 문장 //필수아님
END ;
CREATE OR REPLACE PROCEDURE proc_gugudan(dan IN number)
IS
n_i number(2);
BEGIN
n_i :=0;
dbms_output.put_line(dan||'단을 출력합니다.');
FOR n_i IN 1..9 LOOP
dbms_output.put_line(dan||'*'||n_i||'='||(dan*n_i));
END LOOP;
END;
//in : 들을 때, out : 내보낼 때, inout : 받고, 보낼 때
//:= 초기화
//좌중괄호 우중괄호 대신 end문을 쓴다.
프로시저 테스트
toad로 테스트
BEGIN
proc_gugudan(3);
END;
--3단을 출력합니다.
--3*1=3
--3*2=6
--3*3=9
--3*4=12
--3*5=15
--3*6=18
--3*7=21
--3*8=24
--3*9=27
cmd로 테스트 : 변수 선언, 프로시저 실행 가능
--프로시저 토드에서 생성 후
variable msg varchar2(100); //변수 선언
💡프로시저랑 함수는 같은가??
프로시저 | 함수 |
---|---|
특정 작업을 수행 | 특정 계산을 수행 |
리턴값 가질수도, 안가질수도 있음 | 리턴값 반드시 가짐 |
리턴값 여러개 가짐 | 리턴값 하나만 가짐 |
단독으로 문장 구성 가능(멀티는 cursor사용 필요) | 단독으로 문장 구성 불가 |
[JOIN]
1:1
1:n
n:n → 업무에 대한 정의가 덜 된 경우로, 조인된 경우 카타시안의 곱이 됨.
(※ 주의 : ERD를 확인하고 볼 줄 알아야 함. 왜?? 데이터 설계 확인하여 적합한 조인이 가능)
[join의 종류]
[join 실습]
--예전에 작성하던 방식
SELECT
b.emp_id AS "사번"
,b.emp_name AS "성명"
,b.salary AS "연봉"
,A.from_sal AS "하한"
,A.to_sal AS "상한"
,b.lev AS "직급"
FROM emp_level A, temp b
WHERE A.lev(+) = b.lev;
outer join
self join
작업 중 시간이 짧은 순으로 순위를 주어 조회하기(rank 사용 x)
[데이터베이스 모델링]