SlideShare a Scribd company logo
데이터베이스 베이직
서브쿼리, 뷰
NHN NEXT 정호영
나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.
오늘의 실습자료
셀프 조인
테이블이 자기 자신과 조인하는 걸 말합니다.
예) 사용자와 추천인의 이름을 보여주세요.
셀프 조인
사용자와 추천인의 이름을 보여주세요.
SELECT u.name, R.name
FROM user U
LEFT JOIN user R
ON U.CHOO = R.ID;
서브 쿼리(SUB QUERY)
쿼리 안에 다른 쿼리가 들어가는 형태
중첩 쿼리(nested query) 라고도 합니다.
서브 쿼리 예제 1
‘맥북’을 팔고 있는 유저의 정보를 출력하세요.
바깥쪽 쿼리 : OUTER QUERY
안쪽 쿼리 : INNER QUERY, SUB QUERY
SELECT * FROM user u
WHERE u.id =
( SELECT seller FROM trade t
WHERE item_name = '맥북'
);
서브 쿼리의 특징
SELECT, INSERT, UPDATE, DELETE 모두에 사용 가능
단, 안쪽 쿼리는 무조건 SELECT 쿼리입니다.
서브 쿼리의 특징
모든 단일 값(스칼라)이 올 수 있는 자리에 사용 가능
하나의 레코드가 올 수 있는 자리도 대치 가능
테이블(여러 레코드)이 올 수 있는 자리도 대치 가능
스칼라 값 대체 쿼리
GTA5를 팔고 있는 유저 1명의 정보를 출력하세요.
SELECT * FROM user u
WHERE u.id =
( SELECT seller FROM trade t
WHERE item_name = ‘GTA5‘ limit1
);
스칼라 값 대체 쿼리
2번 마켓에서 가장 많은 상품을 팔고 있는 사람의 정보를
출력하세요.
스칼라 값 대체할 때 주의사항
서브 쿼리의 결과값으로 두 개의 값이 오면 에러 발생
IN 과 NOT IN
IN과 NOT IN은 스칼라 집합에 대해 사용 가능
예)
아이폰을 팔고 있는 유저의 정보를 모두 출력하시오
SELECT * FROM user
WHERE iD = (
SELECT seller FROM trade
WHERE item_name like '아이폰%'
);
IN 과 NOT IN
IN과 NOT IN은 스칼라 집합에 대해 사용 가능
예)
아이폰을 팔고 있는 유저의 정보를 모두 출력하시오
SELECT * FROM user
WHERE id IN (
SELECT seller FROM trade
WHERE item_name like '아이폰%'
);
IN 과 NOT IN
2번 마켓에 파는 물건이 없는 유저의 정보를 검색하세요.
ANY
컬럼이름 비교연산자 ANY (쿼리)
결과값에 하나라도 만족하면 TRUE
적어도 하나의 상품을 구매가능한 유저의
정보를 출력하세요.
ANY
컬럼이름 비교연산자 ANY (쿼리)
결과값에 하나라도 만족하면 TRUE
적어도 하나의 상품을 구매가능한 유저의
정보를 출력하세요.
SELECT * FROM user
WHERE money >= any (
SELECT price FROM trade
);
ALL
컬럼이름 비교연산자 ALL (쿼리)
서브 쿼리의 모든 결과를 만족시키는 경우에만 참
마켓의 어떤 물건이라도 구매 가능한 유저의 정보를 출력하라.
상관 쿼리
상관 쿼리 :
바깥 쿼리 테이블의 속성이 안쪽 쿼리에 나오는 경우
SELECT * FROM T1
WHERE COL1 =
(SELECT COL3 FROM T2
WHERE t1.COL2 = T2.COL4);
비상관 쿼리의 동작 방식
안쪽 쿼리 실행 -> 스칼라 값 추출 -> 바깥쿼리 실행 ->최종 결과
안쪽 테이블
바깥쪽 테이블
안쪽 쿼리
수행 결과값
최종 결과
상관 쿼리의 동작 방식
바깥쪽 쿼리 실행 -> 레코드 하나의 각각의 값이 안쪽 쿼리를 만족
바깥쪽 테이블
최종 결과
안쪽 테이블
상관 쿼리
유저 자신의 판매 물품 가격의 총합이 그 유저의 재산보다
많은 유저의 정보를 출력하시오.
EXISTS와 NOT EXISTS
EXISTS(서브쿼리) : 쿼리가 하나 이상 나오면 참
NOT EXISTS(서브쿼리) : 결과가 하나라도 있으면 거짓
주로 상관 쿼리에 사용됩니다.
앞에 컬럼 이름이 나오지 않습니다.
EXISTS와 NOT EXISTS
2번 마켓에 판매 물품이 없는 유저를 검색하시오.
FROM 절의 서브쿼리
FROM 절에도 쿼리가 올 수 있습니다.
반드시 테이블에 별명을 붙여줘야 합니다.
SELECT m.name, m.item_name
FROM
(SELECT *
FROM user u LEFT JOIN
TRADE t ON u.id = t.seller) AS m;
VIEW
SELECT 쿼리를 이용해서 만든 가상 테이블
용량을 차지하지 않음
생성: CREATE VIEW 명령 사용
CREATE VIEW 뷰이름 as (SELECT…);
사용 : 일반적인 테이블과 동일
SELECT * FROM 뷰이름 ...;
삭제 : DROP VIEW 명령 사용
DROP VIEW my_view;
학습 정리
서브 쿼리에 대해 배웠습니다.
서브 쿼리를 사용하면 의미가 명확해 집니다.
중첩 상관 쿼리는 성능이 좋지 않을 수 있습니다.
데이터베이스에 따라 최적화에 의해 성능이 달라집니다.
THANK YOU!!!

More Related Content

PDF
제7장 서브 쿼리
PDF
MySQL 인덱스의 기초
PPTX
Db활용가이드
PPT
제6장조인과서브쿼리
PDF
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
PPTX
파이썬 sqlite 이해하기
PDF
제2장 데이터 조회하기
PDF
데이터베이스 시스템 chapter4_STG박하은
제7장 서브 쿼리
MySQL 인덱스의 기초
Db활용가이드
제6장조인과서브쿼리
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
파이썬 sqlite 이해하기
제2장 데이터 조회하기
데이터베이스 시스템 chapter4_STG박하은

Similar to mysql 서브쿼리 (20)

PDF
[제3회 스포카콘] SQL 쿼리 최적화 맛보기
PPTX
101102 endofdb select.1_rdbms
PDF
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
PDF
제6장 테이블 조인
PDF
[PHPFest 2013] Real mysql
PDF
암달의 법칙과 쿼리튜닝 기초
PDF
MySQL JOIN
PPTX
181215 MS SQL로 알아보는 데이터베이스
PPTX
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
PPTX
Sql study 20101113 유혜원
PDF
PostgreSQL로 배우는 SQL 기초
PPT
7.데이터수정
PPTX
MySQL과 PHP
PDF
성공적인웹프로그래밍
PDF
일주일만에 끝내는 MySQL
PDF
Hive 입문 발표 자료
PDF
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 2
PPTX
효율적인Sql작성방법 2주차
PDF
파이썬 데이터베이스 연결 2탄
[제3회 스포카콘] SQL 쿼리 최적화 맛보기
101102 endofdb select.1_rdbms
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
제6장 테이블 조인
[PHPFest 2013] Real mysql
암달의 법칙과 쿼리튜닝 기초
MySQL JOIN
181215 MS SQL로 알아보는 데이터베이스
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
Sql study 20101113 유혜원
PostgreSQL로 배우는 SQL 기초
7.데이터수정
MySQL과 PHP
성공적인웹프로그래밍
일주일만에 끝내는 MySQL
Hive 입문 발표 자료
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 2
효율적인Sql작성방법 2주차
파이썬 데이터베이스 연결 2탄
Ad

More from Hoyoung Jung (20)

PDF
철권 1단에서 벗어나기
PPTX
코딩 공부 시작하기
PPTX
내 질문에는 왜 답변이 달리지 않을까
PPTX
entry를 이용한 코딩 교육1
PDF
Github Markdown
PDF
stored procedure2 + jdbc
PDF
mysql stored procedure
PDF
GROUP BY, CASE WHEN
PDF
트랜잭션
PDF
데이터베이스 정규화
PDF
tomcat jdbc mysql 프로그래밍
PDF
데이터베이스 모델링
PDF
MySQL delete.update
PDF
MySQL Select (1)
PDF
4. 함수포인터
PDF
2. MySQL DataTye Basic
PDF
MySQL Create Table
PDF
Mymysql basic sql
PDF
데이터베이스 베이직 소개
PDF
Crontab 간단 사용법
철권 1단에서 벗어나기
코딩 공부 시작하기
내 질문에는 왜 답변이 달리지 않을까
entry를 이용한 코딩 교육1
Github Markdown
stored procedure2 + jdbc
mysql stored procedure
GROUP BY, CASE WHEN
트랜잭션
데이터베이스 정규화
tomcat jdbc mysql 프로그래밍
데이터베이스 모델링
MySQL delete.update
MySQL Select (1)
4. 함수포인터
2. MySQL DataTye Basic
MySQL Create Table
Mymysql basic sql
데이터베이스 베이직 소개
Crontab 간단 사용법
Ad

mysql 서브쿼리

  • 1. 데이터베이스 베이직 서브쿼리, 뷰 NHN NEXT 정호영 나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.
  • 3. 셀프 조인 테이블이 자기 자신과 조인하는 걸 말합니다. 예) 사용자와 추천인의 이름을 보여주세요.
  • 4. 셀프 조인 사용자와 추천인의 이름을 보여주세요. SELECT u.name, R.name FROM user U LEFT JOIN user R ON U.CHOO = R.ID;
  • 5. 서브 쿼리(SUB QUERY) 쿼리 안에 다른 쿼리가 들어가는 형태 중첩 쿼리(nested query) 라고도 합니다.
  • 6. 서브 쿼리 예제 1 ‘맥북’을 팔고 있는 유저의 정보를 출력하세요. 바깥쪽 쿼리 : OUTER QUERY 안쪽 쿼리 : INNER QUERY, SUB QUERY SELECT * FROM user u WHERE u.id = ( SELECT seller FROM trade t WHERE item_name = '맥북' );
  • 7. 서브 쿼리의 특징 SELECT, INSERT, UPDATE, DELETE 모두에 사용 가능 단, 안쪽 쿼리는 무조건 SELECT 쿼리입니다.
  • 8. 서브 쿼리의 특징 모든 단일 값(스칼라)이 올 수 있는 자리에 사용 가능 하나의 레코드가 올 수 있는 자리도 대치 가능 테이블(여러 레코드)이 올 수 있는 자리도 대치 가능
  • 9. 스칼라 값 대체 쿼리 GTA5를 팔고 있는 유저 1명의 정보를 출력하세요. SELECT * FROM user u WHERE u.id = ( SELECT seller FROM trade t WHERE item_name = ‘GTA5‘ limit1 );
  • 10. 스칼라 값 대체 쿼리 2번 마켓에서 가장 많은 상품을 팔고 있는 사람의 정보를 출력하세요.
  • 11. 스칼라 값 대체할 때 주의사항 서브 쿼리의 결과값으로 두 개의 값이 오면 에러 발생
  • 12. IN 과 NOT IN IN과 NOT IN은 스칼라 집합에 대해 사용 가능 예) 아이폰을 팔고 있는 유저의 정보를 모두 출력하시오 SELECT * FROM user WHERE iD = ( SELECT seller FROM trade WHERE item_name like '아이폰%' );
  • 13. IN 과 NOT IN IN과 NOT IN은 스칼라 집합에 대해 사용 가능 예) 아이폰을 팔고 있는 유저의 정보를 모두 출력하시오 SELECT * FROM user WHERE id IN ( SELECT seller FROM trade WHERE item_name like '아이폰%' );
  • 14. IN 과 NOT IN 2번 마켓에 파는 물건이 없는 유저의 정보를 검색하세요.
  • 15. ANY 컬럼이름 비교연산자 ANY (쿼리) 결과값에 하나라도 만족하면 TRUE 적어도 하나의 상품을 구매가능한 유저의 정보를 출력하세요.
  • 16. ANY 컬럼이름 비교연산자 ANY (쿼리) 결과값에 하나라도 만족하면 TRUE 적어도 하나의 상품을 구매가능한 유저의 정보를 출력하세요. SELECT * FROM user WHERE money >= any ( SELECT price FROM trade );
  • 17. ALL 컬럼이름 비교연산자 ALL (쿼리) 서브 쿼리의 모든 결과를 만족시키는 경우에만 참 마켓의 어떤 물건이라도 구매 가능한 유저의 정보를 출력하라.
  • 18. 상관 쿼리 상관 쿼리 : 바깥 쿼리 테이블의 속성이 안쪽 쿼리에 나오는 경우 SELECT * FROM T1 WHERE COL1 = (SELECT COL3 FROM T2 WHERE t1.COL2 = T2.COL4);
  • 19. 비상관 쿼리의 동작 방식 안쪽 쿼리 실행 -> 스칼라 값 추출 -> 바깥쿼리 실행 ->최종 결과 안쪽 테이블 바깥쪽 테이블 안쪽 쿼리 수행 결과값 최종 결과
  • 20. 상관 쿼리의 동작 방식 바깥쪽 쿼리 실행 -> 레코드 하나의 각각의 값이 안쪽 쿼리를 만족 바깥쪽 테이블 최종 결과 안쪽 테이블
  • 21. 상관 쿼리 유저 자신의 판매 물품 가격의 총합이 그 유저의 재산보다 많은 유저의 정보를 출력하시오.
  • 22. EXISTS와 NOT EXISTS EXISTS(서브쿼리) : 쿼리가 하나 이상 나오면 참 NOT EXISTS(서브쿼리) : 결과가 하나라도 있으면 거짓 주로 상관 쿼리에 사용됩니다. 앞에 컬럼 이름이 나오지 않습니다.
  • 23. EXISTS와 NOT EXISTS 2번 마켓에 판매 물품이 없는 유저를 검색하시오.
  • 24. FROM 절의 서브쿼리 FROM 절에도 쿼리가 올 수 있습니다. 반드시 테이블에 별명을 붙여줘야 합니다. SELECT m.name, m.item_name FROM (SELECT * FROM user u LEFT JOIN TRADE t ON u.id = t.seller) AS m;
  • 25. VIEW SELECT 쿼리를 이용해서 만든 가상 테이블 용량을 차지하지 않음 생성: CREATE VIEW 명령 사용 CREATE VIEW 뷰이름 as (SELECT…); 사용 : 일반적인 테이블과 동일 SELECT * FROM 뷰이름 ...; 삭제 : DROP VIEW 명령 사용 DROP VIEW my_view;
  • 26. 학습 정리 서브 쿼리에 대해 배웠습니다. 서브 쿼리를 사용하면 의미가 명확해 집니다. 중첩 상관 쿼리는 성능이 좋지 않을 수 있습니다. 데이터베이스에 따라 최적화에 의해 성능이 달라집니다.