본문 바로가기

Data Engineering/Database

[SQL] DML/ DDL (JOIN, SUBQUERY ETC)

1. SQL 순서

  1. From/join
  2. where
  3. groupby
  4. having
  5. select
  6. order by

2. Data lake vs Data warehouse vs Data mart

  • Data lake : 정형, 비정형, 반정형 모든 raw data 집합
  • Data warehouse : Data를 저장 전 스키마가 적용되며, 특정 목적에 맞게 정리하고 구성된 데이터의 집합
  • Data mart : Lob 특성에 맞게 모아놓은 Data 집합

3. DML / DDL

  • DML : 데이터를 추가 조작하는데에 쓰이는 언어
  • INSERT, DELETE, UPDATE, SELECT
  • DDL : 테이블을 생성하거나 변경, 삭제할 때 쓰이는 언어
  • CREATE, ALTER, REPLACE, DROP

Create table

CREATE TABLE IF NOT EXISTS person
-- My sql

Insert table

insert into person
values (1,'이혜리','2021-10-04')
--모든 컬럼에 순서대로 값을 넣을 때는 컬럼명을 생략하고, 아래와 같이 쓸 수 있다.

Join

  • Inner join은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 컬럼의 데이터가 있어야 함
  • Outer join은 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나옴
  • 카테시안곱 조인은 조인조건 없이 각 테이블의 모든 행을 조합하여 결과반환, 즉 두 테이블간의 연관성이 없을때 사용
    • Left join은 왼쪽 테이블의 모든 값이 출력되며, 추가로 왼쪽 테이블에 데이터를 얹어서도 가능
    • Right join은 오른쪽 테이블의 모든 값이 출력되며, 추가로 오른쪽 테이블에 데이터를 얹어서도 가능
  • Cross join은 한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인하는 기능이다
  • Self join은 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다
--emp [id,number,name]
--dept [id,email,address]

Select *, dept_id
from emp left join dept
on emp_id = dept_id

-- 결과 : emp[id,number,name,dept_id]

4. With절

With **table_name** as (
select 'with절' as STR1
from dual
)

select * 
from **table_name**

-- 여러 번 반복되는 서브쿼리 또한 With절로 만들어서 사용하면 쿼리 성능 향상 시킬 수 있다

INLINE VIEW(FROM SUBQUERY)

SELECT *
FROM (SELECT * 
      FROM table 
      ORDER BY id DESC)
WHERE ROWNUM <= 5;

중첩 서브쿼리 (WHERE SUBQUERY)

중첩 서브쿼리 참고 링크

PERCENT_RANK ()
OVER (
[ PARTITION BY partition_expression ]
[ ORDER BY order_list A**sc|Desc** ]
)
DDL 참고

5. Data type

integer | null 처리불가, integer to int 하지 않을 시 산술연산 불가능

 

반응형