목록SQLD (11)
AYSTORY
WHERE NOT EXISTS는 서브쿼리 결과가 없을 때만 TRUE가 되는 조건이에요.즉, “해당 조건을 만족하는 행이 존재하지 않을 경우”에만 결과를 반환합니다. 📌 기본 문법SELECT 컬럼FROM 테이블 AWHERE NOT EXISTS ( SELECT 1 FROM 테이블 B WHERE A.키 = B.키);안쪽 서브쿼리: A.키와 매칭되는 B.키가 있는지 확인EXISTS → 매칭이 있으면 TRUENOT EXISTS → 매칭이 없으면 TRUE📌 예시EMP (사원)EMPNOENAMEDEPTNO7369SMITH207499ALLEN307521WARD30DEPT (부서)DEPTNODNAME10ACCOUNTING20RESEARCH30SALES40OPERATIONS 쿼리SELECT D.DEPT..
📌 기본 해석 순서FROM … LEFT OUTER JOIN … ON …→ 조인 조건(ON)대로 두 테이블을 붙임.→ 매칭 안 되면 오른쪽 테이블 컬럼이 NULL 채워짐.WHERE …→ 최종 결과에서 행(row)을 걸러냄.→ 이때 NULL도 비교 대상이 되므로, 조심하지 않으면 LEFT JOIN 효과가 사라지고 사실상 INNER JOIN처럼 동작할 수 있음.📌 예시 데이터 DEPTDEPTNODNAME10ACCOUNTING20RESEARCH30SALES40OPERATIONS EMPENAMEDEPTNOSMITH20ALLEN30 쿼리 1: LEFT OUTER JOIN만 사용SELECT D.DEPTNO, D.DNAME, E.ENAMEFROM DEPT D LEFT JOIN EMP E ON D.DEPTNO ..
사원이 없는 부서도 같이 출력하고 싶다 → 기준은 부서(DEPT) 이고, 사원이 없어도 행이 나오려면👉 LEFT OUTER JOIN을 써야 합니다. 📌 정답 SQLSELECT E.ENAME, D.DEPTNO, D.DNAMEFROM DEPT D LEFT OUTER JOIN EMP E ON D.DEPTNO = E.DEPTNO; 📌 결과 예시DEPT 테이블에 있는 모든 부서가 다 출력됩니다.EMP에 해당 부서 사원이 있으면 이름(ENAME)이 붙고,사원이 없으면 ENAME = NULL.ENAMEDEPTNODNAMESMITH20RESEARCHALLEN30SALES………NULL40OPERATIONS ✅ 정리INNER JOIN → 부서에 사원이 있어야만 출력LEFT OUTER JOIN →..
📌 쿼리 원문SELECT A.고객번호, A.고객명, B.단말기ID, B.단말기명, C.OSID, C.OS명FROM 고객 A LEFT OUTER JOIN 단말기 B ON (A.고객번호 IN (11000,12000) AND A.단말기ID = B.단말기ID) LEFT OUTER JOIN OS C ON (B.OSID = C.OSID)ORDER BY A.고객번호; 📌 쿼리 동작 단계기본 테이블고객 A 전체를 기준으로 가져옴.첫 번째 LEFT JOIN (단말기 B)조인 조건:A.고객번호 IN (11000,12000) → 고객번호가 11000 또는 12000인 경우만 단말기와 매칭 시도A.단말기ID = B.단말기ID → 고객이 보..
📌 JOIN … USING 구문SELECT *FROM A INNER JOIN BUSING (공통컬럼);USING(공통컬럼)은 두 테이블에 같은 이름의 컬럼이 있을 때만 사용 가능.결과셋에서는 그 공통 컬럼이 한 번만 출력됨 (중복 제거).📌 ALIAS 사용 규칙 1. 테이블 ALIAS는 가능 ✅SELECT A.이름, B.주소FROM 고객 A INNER JOIN 주문 BUSING (고객ID);👉 A, B 같은 테이블 별칭은 정상적으로 사용 가능. 2. USING에 나온 컬럼 앞에 테이블 ALIAS는 불가능 ❌SELECT A.고객ID -- 🚫 오류 발생FROM 고객 A INNER JOIN 주문 BUSING (고객ID);👉 고객ID는 공통 컬럼이라 하나로 합쳐져 버리기 때문에 A.고객ID / B...
UPDATE A SET VAL = 200 WHERE ID = '001';CREATE TABLE B ( ID CHAR(3) PRIMARY KEY );ROLLBACK; ORACLEDDL은 트랜잭션 경계입니다.CREATE TABLE 실행 직전/직후 자동 COMMIT이 발생합니다.결과UPDATE는 DDL 직전에 자동 커밋되어 확정.CREATE TABLE B도 바로 커밋되어 테이블 B가 생성된 채 유지.뒤의 ROLLBACK은 되돌릴 것이 없어 효과 없음.최종 상태: A의 값 변경 반영됨, B 존재. SQL Server (기본 설정: AUTOCOMMIT 모드)각 문장이 각자 트랜잭션으로 실행되어 끝날 때마다 자동 커밋됩니다.결과UPDATE는 실행 즉시 커밋.CREATE TABLE B도 실행 즉시 커밋.ROLLBAC..
