SQL 활용

박정호·2024년 10월 15일

DBMS

목록 보기
2/6

1. dual

  • oracle에서 기본으로 제공하는 dummy table
  • oracle 자체에서 제공되는 테이블
  • 간단하게 함수를 이용해서 계산 결과값을 확인 할 때 사용하는 테이블
  • dual 테이블은 사용자가 함수를 실행할 때 임시로 사용하는데 적합하다.
  • 함수에 대한 쓰임을 알고 싶을 때 특정 테이블을 생성할 필요없이 dual 테이블을 이용하여 함수의 값을 리턴 받을 수 있다.

2. 큰따옴표("") vs 작은따옴표('')

2-1. 큰따옴표

  • 용도: 식별자(Identifiers) 또는 컬럼명, 테이블명 등 객체의 이름을 감싸는 데 사용됩니다. 주로 SQL 표준에서 예약어로 지정된 단어를 테이블명이나 컬럼명으로 사용할 때 필요합니다.
    SELECT "user", "age" FROM "users";

2-2. 작은따옴표

  • 용도: 문자열 리터럴을 감싸는 데 사용됩니다.
    SELECT * FROM users WHERE name = 'John Doe';

3. select

  • SELECT ~ : 대상을 가져오기
  • FROM ~ : 해당 DB에서 부터
  • WHERE ~ : 조건에 해당하는 데이터를
    -> and, or 사용가능
SELECT 	EMPLOYEE_ID, FIRST_NAME , LAST_NAME , JOB_ID
FROM 	EMPLOYEES e 
WHERE 	FIRST_NAME = 'Guy';
  • SELECT ~ AS "ID" : 대상을 가져오되 "ID"라는 별칭을 붙임.
    (" "만 가능)
  • SELECT DISTINCT ~ : 대상을 중복없이 가져오기.

1. join(조인)

1-1. join이란

  • 두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법으로, 두 개의 테이블을 마치 하나의 테이블인 것처럼 보여주는 것이다.

1-2. join의 기본 사용 방법

  • 두 개의 테이블에 하나라도 같은 컬럼이 있어야 한다.
  • 두 컬럼의 값은 공유 되어야 한다.
  • 보통 join을 위해 기본키(Primary Kdy)와 외래키(Foreign Key)를 활용한다.

2. inner join

  • 각 테이블에서 join 조건에 일치되는 데이터만 가져온다.
  • inner join은 교집합이라고 말한다.
  • select * from A inner join B on ...

3. outer join

  • join 조건에 일치하는 데이터 및 일치하지 않는 데이터를 모두 select한다.
  • join 조건에 일치하는 데이터가 없다면 null로 가져온다.
  • outer join은 inner join과는 다르게 주(main)테이블이 어떤 테이블인지가 중요하다. 그래서 어떤 테이블이 중심이 되느냐에 따라 다시 left outer join, right outer join, full outer join으로 세분화 할 수 있다.
  • left outer join은 왼쪽에 있는 테이블이 메인, right outer join은 오른쪽에 있는 테이블이 메인, full outer join은 양쪽 테이블 모두가 메인이라는 뜻

3-1. left outer join

  • 왼쪽 테이블이 기준이 된다.
  • join 조건에 부합하는 데이터가 join 당하는 테이블에 있으면 해당 데이터를, 없으면 null로 select한다.
  • select * from A left outer join B on ...
SELECT 	e.EMPLOYEE_ID , e.FIRST_NAME ,
		d.DEPARTMENT_ID , d.DEPARTMENT_NAME
FROM 	DEPARTMENTS d 
LEFT OUTER JOIN EMPLOYEES e ON d.DEPARTMENT_ID = e.DEPARTMENT_ID 
;

3-2. right outer join

  • 오른쪽 테이블이 기준이 된다.
  • join 조건에 부합하는 데이터가 join 당하는 테이블에 있으면 해당 데이터를, 없으면 null로 select한다.
  • select * from A right outer join B on ...
SELECT 	e.EMPLOYEE_ID , e.FIRST_NAME ,	
		d.DEPARTMENT_ID , d.DEPARTMENT_NAME
FROM 	EMPLOYEES e 
RIGHT OUTER JOIN DEPARTMENTS d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID 
ORDER BY e.EMPLOYEE_ID
;

3-3. full outer join

  • 양쪽 테이블 모두가 기준이 된다.
  • join 조건에 부합하는 데이터가 join 당하는 테이블에 있으면 해당 데이터를, 없으면 null로 select한다.
  • 쉽게 말해서 벤다이어 그램 ⓐⓑ에서 inner join(A∩B), left outer join(A), right outer join(B), full outer join(A∪B) 를 뜻함.

4. ANSI join vs Oracle join

  • SQL은 데이터베이스를 관리하기 위해 만들어진 프로그래밍 언어이며, 데이터베이스를 관리해주는 대부부느이 Management System(DBMS : Oracle, Mysql, ...)들은 SQL을 사용한다. 물론 DBMS 자체의 특수성 때문에 SQL의 사용법이 조금씩 다르기도 하지만, 큰 틀에서 보면 나름대로의 보편성을 가지고 있다.
  • 이를 위해 미국 국립 표준 협회(American National Standards Institute, ANSI)에서도 SQL에 대한 보편적인 문법을 제시하고 있는데, 그것이 바로 ANSI Query이다.
  • Join도 마찬가지로 ANSI문법을 사용하는 경우가 대부분이긴 하지만, 편의에 따라 DBMS만의 자체 문법을 사용하기도 한다.
  • 대표적으로 Oracle 에서 사용하는 Oracle Join이 있다.

5. 서브쿼리(sub query)

5-1. 서브쿼리란?

  • Main Query에 반대되는 개념으로 이름을 붙인 것
  • 메인쿼리를 구성하는 소단위 쿼리
  • select, insert, delete, update 절에서 모두 사용 가능
  • 서브쿼리의 결과 집합을 메인 쿼리가 중간 결과값으로 사용
  • 서브쿼리 자체는 일반 쿼리와 다를 바가 없다.
-- 월급이 가장 적은 사람
SELECT  EMPLOYEE_ID , FIRST_NAME , LAST_NAME , SALARY 
FROM 	EMPLOYEES e
WHERE 	SALARY = (	SELECT 	MIN(SALARY) 
					FROM 	EMPLOYEES )
;

0개의 댓글