오라클 SQL / 7
- 먼저 실행되길 원할때 > 서브쿼리 사용
- 서브쿼리 안에 서브쿼리를 넣을 수도 있다
- SELECT * FROM (SELECT ROWNUM NUM, M.* FROM (SELECT * FROM MEMBER ORDER BY REGDATE DESC)M) WHERE NUM BETWEEN 1 AND 5; ▶ 별칭 붙이기
< 나이대별 회원수 구하기 20대,30대별.... >
SELECT
FLOOR(AGE/10)*10 AGE,
COUNT(ID) COUNT
FROM MEMBER
GROUP BY FLOOR(AGE/10)*10
ORDER BY AGE;
- GROUP BY에서는 별칭을 못쓴다
< 인서트 복습 >
- INSERT INTO NOTICE(TITLE,CONTENT,MEMBER_ID) VALUES('여름','수박',0525);
COMMIT;
<다른 테이블(NOTICE)에서 다른 테이블(MEMBER)의 정보를 가져오는 쿼리>
- 별칭을 안쓴버전
SELECT
MEMBER_ID,
(SELECT NAME FROM MEMBER WHERE ID=MEMBER_ID) MEMBER_NAME,--컬럼명--
(SELECT EMAIL FROM MEMBER WHERE ID=MEMBER_ID) MEMBER_EMAIL,--WHERE : 이 조건에 해당하는게 어딘지?--
COUNT(ID) COUNT
FROM NOTICE
GROUP BY MEMBER_ID;
- 별칭을 쓴 버전(별칭을 붙여주면 어디 테이블의 무슨값을 가져오는지 알수 있기 때문에 별칭을 붙여주는게 좋다)
SELECT
N.MEMBER_ID,
(SELECT NAME FROM MEMBER WHERE ID=N.MEMBER_ID) MEMBER_NAME,--컬럼명--
(SELECT EMAIL FROM MEMBER WHERE ID=N.MEMBER_ID) MEMBER_EMAIL,--WHERE : 이 조건에 해당하는게 어딘지?--
COUNT(N.ID) COUNT
FROM NOTICE N ▶ NOTICE 테이블의 별칭
GROUP BY N.MEMBER_ID;
//바깥쪽 셀렉문의 FROM이 어디인지 알면 제일 큰틀의 테이블을 어디로 쓰는지 알수있다
- WHERE절 쓰는 이유 : 하나의 값만 나오게 하려고
- 서브쿼리는 무조건 써야한다!!
< JOIN : 합치기 >
- 참조된 테이블을 부모테이블 이라고 한다 (참조테이블을 갖고있으면 자식테이블)
- 왼쪽이 행위자(먼저 태어난 부모) 삼발이 하나만 갖고 있는 쪽이 부모
- 조인을 할때는 무조건 (참조하고 있는 키를 갖고있는)자식을 위주로 조인한다
- 자식을 갖고 있지 않은 부모는 빠지게 되는데 이걸 아우터(OUTER JOIN)라고 하고, 자식을 갖고 있는 부모는 합쳐지는데 이걸 이너(INNER 조인) 라고 한다
- 부모에 드래곤이 없기 때문에 이 관계 또한 아우터이다
- SELECT * FROM MEMBER JOIN NOTICE ON MEMBER.ID = NOTICE.MEMBER_ID; JOIN 예시
- SELECT * FROM MEMBER INNER JOIN NOTICE ON MEMBER.ID = NOTICE.MEMBER_ID; INNER JOIN예시
- 하지만 실질적으로 사용하는건 OUTER JOIN을 많이 쓴다
- 회원의 모든 OUTER를 껴주고 싶다고 하면(JOIN) LEFT,RIGHT 하면 된다 > FULL 이라고함
- 조인했을때 없는건 NULL로 채워진다