DAY 9

NA YE SOM·2023년 7월 10일
0
post-custom-banner

종합문제

1. 연락처1이 없는 사용자의 사용자번호, 아이디, 연락처1, 연락처2를 조회하시오.

SELECT USER_NO, USER_ID, USER_MOBILE1, USER_MOBILE2
FROM USER_T
WHERE USER_MOBILE1 IS NULL;

2.연락처2가 '5'로 시작하는 사용자의 사용자번호, 아이디, 연락처1, 연락처2를 조회하시오.

SELECT USER_NO, USER_ID, USER_MOBILE1, USER_MOBILE2
FROM USER_T
WEHRE USER_MOBILE2 LIEK "5%";

시작, 포함 등 -> 'LIKE' 연산자
만능문자(와일드카드) -> '%'

3. 2010년 이후에 가입한 사용자의 사용자번호, 아이디, 가입일을 조회하시오.

SELECT USER_NO, USER_ID, USER_REGDATE
FROM USER_T
WHERE EXTRACT(YEAR FROM

EXTRACT

EXTRACT(YEAR FROM)

>=(이상) 2010년 이후

4. 사용자번호와 연락처1, 연락처2를 연결하여 조회하시오. 연락처가 없는 경우 NULL 대신 'None'으로 조회하시오.

CONCAT(연결함수)


첫번째 인수로 처리 -> 빨간줄이 null이면 -> none으로 처리하세요

5. 지역별 사용자수를 조회하시오.

grouping 문제(★Grouping해서 지정한 칼럼한 select해서 조회할수 있다)



->
지역별 = 주소별

6.'서울','경기'를 제외한 지역별 사용자수를 조회하시오.(★ not in 선호!)

grouping 이전 처리가능한지? WHERE , 이후 처리가능한지? HAVING


-> '서울', '경기' 그냥 제외하면 됨 (꼭 GROUPING 한 후 뺄 필요 없음)


★ NOT IN 선호!

7.구매내역이 없는 사용자를 조회하시오.


USER_NO 없는 번호 찾으면 됨 = 구매한 적 없는 사람

다중테이블 처리 방식(조인, 서브쿼리) : 서브쿼리가 간단함


-> 구매테이블에서 사용자 번호를 가지고 옴
-> NOT IN 일치하지 않는다

8. 카테고리별 구매횟수를 조회하시오.(제품 - 구매)

(조인)

구매테이블의 기본키로 갯수를 샘
테이블 2개 필요
제품 : 구매테이블 = 1:M(하나의 제품을 여러번 팔 수 있음)

9. (사용자 - 구매)

10.(고객이름, 구매이력이 없는 테이블)

모든 사용자를 USER 조회하는 것이 목적(BUY테이블에 없더라도 USER테이블에 있다면 모두 조회하기)(구매내역이 없더라도 나올 수 있게)


-> 2개가 다 들어가있어야 조회가능

11.모든 제품의 제품명과 판매횟수를 조회하시오.

판매내역도 있어야 조회됨 (내부조인 쓰려면)
-> 벨트 DATA 조회되지 않음


(동등 조인 조건)

운동화, 청바지 , 모니터 2번 팔림(= 같은 제품 이름으로 모았음)



(-> 코드와 이름이 모두 동일해야 하나의 데이터로 보는 것)
(동일한 이름은 나타날 수 있다 -> 안전장치를 검)
(CODE가 없을때 문제 발생 : 이름이 같으면 같은 이름으로 봄, CODE는 기본키로 되어있으니 코드까지 같을 수가 없다)
(GROUP BY P.PROD_CODE, P.PROD_NAME)

*GROUP BY에 명시한 것만 SELECT로 보내면 된다
(보내기 싫으면 보내지 않아도 됨, PROD_CODE GROUP BY에 넣어도 됨)

12.카테고리가 '전자'인 제품을 구매한 고객의 구매내역을 조회하시오.

3개를 조인해야함


제품코드 1을 2개 샀음

구매액 = 단가(하나당 가격) * 갯수

FROM 에 나타나는 테이블 순서는 크게신경 안써도 된다(성능의 문제_)

-> USER와 JOIN이 합쳐졌다

-> 조인 조건까지 하나의 테이블로 보기

13.

3개를 조인해야함

-> INNER JOIN



★ 쿼리 많이 풀기 위해서는 자격증 준비!
★ 어려운 문제도 풀어봐야 실력이 는다.

14.

구매횟수 -> grouping
grouping 이후 -> having절 필요

동일한 이름을 가진 다른 사용자는 같은 사람이 됨


-> ★ 사용자를 식별할 수 있는 데이터 하나 더 들어감(U.USER_NO) , 번호는 같아도 이름이 다르면 다른 사용자 됨

15.

외부 조인, 고객- 제품 관계가 없음 -> BUY 테이블 필수

사용자는 무조건 출력 목적

-> USER와 연결가능


-> USER가 왼쪽에 있음


-> ASC 생략가능

16.(DML)제품 테이블에서 제품명이 '책'인 제품의 카테고리를 '서적'으로 수정하시오.

★COMMIT있어야 함

17.

18.

INSERT, UPDATE, DELETE도 SUBQUERY 사용가능함!


구매번호는 시퀀스가 만들고 있어서

-> 10번 시퀀스 만들어짐
구매 시퀀스가 어디까지 생성하였음도 알 수 있음

-> CURRENT 현재값

★CURRENT VALUE를 쓸려면 반드시 전에 NEXTVAL를 썼던 기록이 있어야함!

INSERT가 다른 칼럼에 의해서 실패했을 경우)(번호표를 뽑았는데 업무를 못봄)
-> 해당 시퀀스는 버려짐
-> 언제나 일치 하지 않음 -> 권장하지는 않음
-> 서비스 측면) 중간에 버려지는 번호가 있을뿐이다

19.


-> 기본키가 삭제되면 언제나 외래키도 삭제됨

PK 삭제되면) 무조건 '참조 무결성 위배'됨

(1) 애초에 못지우게 막음 - 오류
(2) 지울때 같이 지움 - CASCADE
(3) ON DELETE SET NULL - NULL (1번 지워지면 1번 정보 NULL로 바꾸기)

20.

사용자 와의 관계 - 삭제 옵션이 없음 -> 삭제 자체가 안됨


-> 외래키 값이 발견되었다.


(구매내역을 먼저 삭제해야함)

★ 게시판 만들기
누가 이미 댓글을 달면) 댓글 달린 게시물은 지워지지 않음 = 자식 레코드가 발견되었습니다.

게시글 1 : 댓글 M
댓글이 존재 -> 외래키 값 존재

-> 댓글을 DB상에서 다 지우고 이후에 지우기
-> 이거 지우면 댓글 다 지워져 실제로 할꺼야?
-> ON DELETE CASCADE 달아놓고 하면 함께 지워짐

*ROLLBACK : 이전 COMMMIT으로 돌아가겠음

-> 둘다 성공해야

★ 트랜잭션

자바의 ANONATION(어노테이션) 형태로 들어갈것임

-> 작업이 하나면 COMMIT도 하나임

★ 여러사람과 프로젝트한 협업 과정이 있는가?

-화요일(7/11) SQL 활용
-수요일(7/12) 자바 수업
-다음주 월(7/17) SQL 평가있음

profile
개발자 velog
post-custom-banner

0개의 댓글