JOIN 구문 익히기
이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 강의 사이트와 유투브 채널을
오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
● 잔재미코딩 유투브 오픈
[구독해보기]
8. JOIN 구문 익히기¶
- join은 두개 이상의 테이블로부터 필요한 데이터를 연결해 하나의 포괄적인 구조로 결합시키는 연산
- INNER JOIN
- OUTER JOIN
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
실습 환경 맞추기¶
- Mysql Workbench (도커 환경이 아닌 분들은 다음 SQL로 customer 데이터베이스를 만들고, 데이터를 넣어야 합니다.)
- File -> Open SQL Script -> 03_data/customer/customer_join.sql
In [30]:
db.close() # 이전에 연결된 데이터베이스 끊어주세요 (에러나면 이미 끊어진 것임)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [72]:
host_name = "0.0.0.0"
username = "root"
password = "korea123"
database_name = "customer" # 데이터베이스 이름을 sakila 로 바꿔줘야 합니다.
In [73]:
db = pymysql.connect(
host=host_name, # DATABASE_HOST
port=3306,
user=username, # DATABASE_USERNAME
passwd=password, # DATABASE_PASSWORD
db=database_name, # DATABASE_NAME
charset='utf8'
)
8.1 INNER JOIN¶
- INNER JOIN은 조인하는 테이블의 ON 절의 조건이 일치하는 결과만 출력
In [74]:
df = pd.read_sql("SHOW TABLES;", db)
In [75]:
df
Out[75]:
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
In [76]:
df = pd.read_sql("SELECT * FROM customer_table", db)
In [77]:
df
Out[77]:
In [78]:
df = pd.read_sql("SELECT * FROM order_table", db)
In [79]:
df
Out[79]:
- 테이블 이름 다음에 한칸 띄고 새로운 이름을 쓰면, SQL구문 안에서 해당 이름으로 해당 테이블을 가리킬 수 있음 (AS 용법과 동일함)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
- 위 구문에서 C는 customer_table, O는 order_table 이 됨
- C.customer_id = O.customer_id 와 같이 SQL 구문 안에서 특정 테이블의 컬럼을 가리키기 위해 사용됨
- 다음과 같이 써도 MySQL은 동작 (HIVE SQL등 몇몇 DB는 미지원, 내부적으로는 동일한 JOIN 오퍼레이션, 단, JOIN을 쓰는 것이 가독성이 높음)
In [80]:
df = pd.read_sql("SELECT * FROM customer_table C INNER JOIN order_table O ON C.customer_id = O.customer_id", db)
In [81]:
df
Out[81]:
In [82]:
df = pd.read_sql("SELECT * FROM customer_table, order_table WHERE customer_table.customer_id = order_table.customer_id", db)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
In [83]:
df
Out[83]:
In [84]:
df = pd.read_sql("SELECT C.customer_name FROM customer_table C INNER JOIN order_table O ON C.customer_id = O.customer_id", db)
In [85]:
df
Out[85]:
- JOIN은 INNER JOIN을 의미함
In [86]:
df = pd.read_sql("SELECT * FROM customer_table C JOIN order_table O ON C.customer_id = O.customer_id", db)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [87]:
df
Out[87]:
8.2 OUTER JOIN¶
- OUTER JOIN은 조인하는 테이블의 ON 절의 조건 중 한쪽의 데이터를 모두 가져옴
- OUTER JOIN은 LEFT OUTER JOIN, RIGHT OUTER JOIN 이 있음
8.2.1 LEFT OUTER JOIN¶
In [88]:
df = pd.read_sql("SELECT * FROM customer_table C LEFT OUTER JOIN order_table O ON C.customer_id = O.customer_id", db)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
In [89]:
df
Out[89]:
In [92]:
SQL = """
SELECT *
FROM customer_table C
LEFT OUTER JOIN order_table O ON C.customer_id = O.customer_id
WHERE O.order_id IS NULL
"""
In [93]:
df = pd.read_sql(SQL, db)
In [94]:
df
Out[94]:
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [95]:
SQL = """
SELECT * FROM order_table O
LEFT OUTER JOIN customer_table C
ON C.customer_id = O.customer_id
"""
df = pd.read_sql(SQL, db)
In [96]:
df
Out[96]:
8.2.2 RIGHT OUTER JOIN¶
In [49]:
df = pd.read_sql("SELECT * FROM customer_table C RIGHT OUTER JOIN order_table O ON C.customer_id = O.customer_id", db)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
In [50]:
df
Out[50]:
- RIGHT JOIN 은 RIGHT OUTER JOIN을 의미
In [51]:
df = pd.read_sql("SELECT * FROM customer_table C RIGHT JOIN order_table O ON C.customer_id = O.customer_id", db)
In [52]:
df
Out[52]: