erd = 테이블관계를 나타낸 도표
주 식별자 → 중복되는 값이 나오면 안 됨.
조인문 작성의 어려움
• 프로세스화된 조인문작성 과정을 구축하기 어려움.
- 조인문 작성과정
- Step 1 검색 대상과 조건을 추출
. SELECT, WHERE, ORDER BY절 구성 - Step 2 SELECT절과 FROM 절에서 검색 테이블 추출
- Step 3 테이블 간 관계 확인
.관계 확인을 통해 테이블이 추가될 수 있다. - Step 4 조인 조건 기술
- Step 5 문장을 완성한다.
.SELECT 절에 내용이 추가된다.
자기참조 조인과 외부조인
모든 관계는 부모자식관계다.
부모역할만 하는 애는 슈퍼 타입 엔티티
ㄴ 그 조직에서 반드시 있어야 하는 거.
메모리를 복사해서 조인을 처리한다.
자기 참조 조인(Self join) → 테이블 두 번 읽는다. 메모리에 복사하기 때문.
SELECT 별명1.컬럼1, ... 별명2.컬럼1, ...
FROM 테이블 별명1, 테이블 별명2, ...
WHERE 조인_조건 AND 일반_조건;
‐ 동일 테이블을 자기 참조에 의해 조인한다.
‐ 별명1과 별명2는 동일 테이블에 대한 별명이지만 각 각 별도의 테이블처럼 사용한다.
‐ 하나의 테이블에 별명을 다르게 해서 마치 여러 개의 테이블 간 조인하는 것처럼 문장을 구현한다.
• 각 사원과 이를 관리하는 사원의 정보를 검색한다.
SQL> SELECT e1.eno, e1.ename, e1.mgr, e2.eno, e2.ename
2 FROM emp e1, emp e2
3 WHERE e1.mgr = e2.eno;
e1, e2 테이블 간 등가조인
‐ e1 : 사원 테이블, e2 : 관리자 테이블
외부(Outer) 조인
SELECT 컬럼, 컬럼, ...
FROM 테이블1, 테이블2, ...
WHERE 조인_조건(+)
AND 일반_조건
조인조건에 일치하는 않는 데이터를 출력해 준다.
‐ 조인 결과물을 해석할 때 오해를 방지하기 위한 방법이다.
. 결과의 무결성을 보장한다.
‐ '+' 기호는 데이터가 부족한쪽에 기술한다.
• 각 부서별로 사원의 명단을 검색한다.
SQL> SELECT d.dno 부서번호, dname 부서명, ename 사원명
2 FROM dept d, emp e
3 WHERE d.dno = e.dno
4 ORDER BY 1;
SQL> SELECT d.dno 부서번호, dname 부서명, ename 사원명
2 FROM dept d, emp e
3 WHERE d.dno = e.dno(+)
4 ORDER BY 1;
단일 행 서브쿼리
서브쿼리
•SQL 문에 완전한 SELECT문이 포함됨
‐ 원래 SQL문: 메인 쿼리
‐ 내부 SELECT문: 서브 쿼리
• 서브쿼리의 종류
‐ 단일행 서브쿼리
. 서브쿼리가 하나의 컬럼에서 하나의 행 만 검색한다.
. 즉 데이터 하나를 검색한다.
‐ 다중행 서브쿼리
. 서브쿼리가 하나의 컬럼에서 여러 개의 행을 검색한다.
‐ 다중열 서브쿼리
. 서브쿼리가 여러 컬럼에서 행을 검색한다.
• 서브쿼리는 응용프로그램으로 대치가능하지만 성능이나 비용면에서 월등하다.
단일 열 단일 행 서브 쿼리
단일 열 다중 행 서브 쿼리
다중 열
단일행 서브쿼리
SELECT 컬럼 ...
FROM 테이블
WHERE 컬럼 단일_행_연산자 (SELECT 문장 : Sub query문) ......;
‐ 단일 행 연산자가 사용됨으로 반드시 서브쿼리의 결과 값은 한 개만 검색 돼야 한다.
‐ 서브쿼리는 반드시 괄호로 묶는다.
‐ 서브쿼리는 메인쿼리실행 전에 실행된다.
‐ 서브쿼리의 검색된 결괏값은 메인쿼리에 사용된다.
‐ 단일행 연산자오른쪽에 기술한다. →단일 행 연산자는 값이 하나만 와야 한다.
.=, <, >, <=, >=, !=
‐ WHERE절에 기술된 열의숫자와 타입은 SELECT절과 1:1 대응관계가 되어야 한다.
• 남궁연호 보다 급여를 많이 받는 사원을 검색한다.
• 문시현과부서가 다르고 동일한 업무를 하는 사원의 정보를 검색한다.
SQL> SELECT eno 사번, ename 이름
2 FROM emp
3 WHERE sal > (SELECT sal 4 FROM emp 5 WHERE ename = '남궁연호');
SQL> SELECT eno 사번, ename 이름, dno 부서번호, job 업무
2 FROM emp
3 WHERE dno != (SELECT dno FROM emp WHERE ename = '문시현')
4 AND job = (SELECT job FROM emp WHERE ename = '문시현');
단일행 서브쿼리의 문제
• 김선유보다 급여를 많이 받는 사원을 검색한다. → 지문이 잘못됨
SQL> SELECT eno 사번, ename 이름
2 FROM emp
3 WHERE sal > (SELECT sal 4 FROM emp 5 WHERE ename = '김선유');
RA-01427: 단일 행 하위 질의에 2개 이상의~'
‐ 서브쿼리에서 2개 이상의 행이 검색된 경우
• 예측이 어려운 단일행 서브쿼리수정방법
‐ '=' 연산자는 'IN' 연산자로 바꾼다.
‐ 부등호('<', '>', '<=', '>=')는 any, all 다중 행 연산자를 추가한다.
‐ Max(), Min()과 같은 그룹 함수를 사용한다.
'kh교육' 카테고리의 다른 글
(20250911050)sql, icmp (0) | 2025.09.11 |
---|---|
(20250910049) 데이터베이스 , 패킷, 해킹 툴 (0) | 2025.09.10 |
(20250909048)데이터베이스, 패킷 이해 (0) | 2025.09.09 |
(20250908047)데이터베이스, 와이어샤크 (0) | 2025.09.08 |
(20250905046) kali리눅스 (0) | 2025.09.05 |