아이티윌_데이터 분석 55기/문제풀이_SQL

#11-2. 11일차 퀴즈에 대한 문제풀이

ecosso 2026. 3. 19. 17:11

1. MEMBER10 테이블에 아래와 같은 제약조건을 추가하여라
컬럼이름    /    데이터타입    / Key Type  / NN/Unique / FK Table / FK Column / 설명
USERID   / VARCHAR2(10) / PK        / NN,UK     /          /           / 사용자아이디
USERNAME / VARCHAR2(10) /           / NN        /          /           / 회원이름
PASSWD   / VARCHAR2(10) /           / NN        /          /           / 비밀번호
IDNUM    / VARCHAR2(13) /           / UK        /          /           / 주민등록번호
PHONE    / VARCHAR2(13) /           /           /          /           / 전화번호
ADDRESS  / VARCHAR2(20) /           /           /          /           / 주소
REGDATE  / DATE         /           /           /          /           / 가입일
INTEREST / VARCHAR2(15) /           /           /          /           / 관심분야

 

더보기

[내 답변]

 

select * from member10;
desc member10;

alter table member10 add primary key (userid);
alter table member10 modify (username varchar2(10) not null);
alter table member10 modify (passwd varchar2(10) not null); 
alter table member10 add unique (idnum);

 

[문제풀이]

 

-- 자식 테이블 먼저 삭제
drop table board;

-- 제약조건 확인하기
select c1.table_name,       -- 테이블명
       c1.constraint_name,  -- 제약조건명
       c2.column_name,      -- 컬럼명
       c1.constraint_type,  -- 제약조건타입(p:pk, u:uk, r:foreign key, c:check or not null)
       c1.search_condition, -- check 제약의 형태 또는 not null 여부
       c1.r_constraint_name -- 참조키(부모)의 제약조건명
  from user_constraints c1,
       user_cons_columns c2
 where c1.constraint_name = c2.constraint_name
   and c1.table_name in ('MEMBER10','BOARD','TEST11', 'EMP')
 order by c1.table_name;

-- 개인 실습 때 부여했던 제약조건 지워주기

alter table member10 drop constraint SYS_C0011169;
alter table member10 drop constraint SYS_C0011170;
alter table member10 drop constraint SYS_C0011171;
alter table member10 drop constraint SYS_C0011172;
alter table member10 drop constraint MEMBER10_IDNUM_NN;

alter table member10 add constraint member10_userid_pk primary key(userid);
alter table member10 modify (username constraint member10_username_nn not null);
alter table member10 modify (idnum constraint member10_idnum_nn not null);
alter table member10 modify (passwd constraint member10_passwd_nn not null);
alter table member10 add constraint member10_idnum_uk unique(idnum);

2. 다음 웹게시판(BOARD) 테이블 레이아웃을 참조하여 테이블과 무결성 제약조건을 생성하여라.
컬럼이름   / 데이터타입        / Key Type  / NN/Unique / FK Table  / FK Column / 설명
NO      / NUMBER(4)     / PK        / NN,UK     /           /           / 게시물 번호
SUBJECT / VARCHAR2(50)  /           / NN        /           /           / 제목
CONTENT / VARCHAR2(100) /           /           /           /           / 내용
RDATE   / DATE          /           /           /           /           / 작성일자
USERID  / VARCHAR2(10)  / FK        /           / MEMBER10   / USERID    / 글쓴이

더보기

[내 답변]

 

create table board (
no number(4) primary key,
subject varchar2(50) not null,
content varchar2(100),
rdate date,
userid varchar2(10));

select * from board;

alter table board add foreign key (USERID) references member10(USERID);

select * from member10;

 

[문제풀이]

 

create table board (
no          number(4)       constraint board_no_pk          primary key,
subject     varchar2(50)    constraint board_subjuect_nn    not null, 
content     varchar2(100),
rdate       date,
userid      varchar2(10)    constraint board_userid_fk references member10(userid));


3. MEMBER10 테이블에서 COUNTRY 컬럼 삭제

더보기

[내 답변]

 

alter table member10 drop column country;

select * from member10;

 

[문제풀이]

 

alter table member10 drop column country;

4. MEMBER10 테이블 데이터 모두 삭제 후 아래 데이터 입력

더보기

DELETE FROM member10;

SELECT * FROM MEMBER10;
INSERT INTO MEMBER10 VALUES ('user01', '김하늘', 'pw1001', '9001011234567', '01011112222', '서울', TO_DATE('2026-01-03','YYYY-MM-DD'), '영화');
INSERT INTO MEMBER10 VALUES ('user02', '이서준', 'pw1002', '9102021234567', '01011113333', '부산', TO_DATE('2026-01-05','YYYY-MM-DD'), '음악');
INSERT INTO MEMBER10 VALUES ('user03', '박지민', 'pw1003', '9203031234567', '01011114444', '대구', TO_DATE('2026-01-07','YYYY-MM-DD'), '독서');
INSERT INTO MEMBER10 VALUES ('user04', '최유진', 'pw1004', '9304041234567', '01011115555', '인천', TO_DATE('2026-01-10','YYYY-MM-DD'), '운동');
INSERT INTO MEMBER10 VALUES ('user05', '정민수', 'pw1005', '9405051234567', '01011116666', '광주', TO_DATE('2026-01-12','YYYY-MM-DD'), '게임');
INSERT INTO MEMBER10 VALUES ('user06', '한지우', 'pw1006', '9506061234567', '01011117777', '대전', TO_DATE('2026-01-15','YYYY-MM-DD'), '요리');
INSERT INTO MEMBER10 VALUES ('user07', '오세훈', 'pw1007', '9607071234567', '01011118888', '울산', TO_DATE('2026-01-18','YYYY-MM-DD'), '여행');
INSERT INTO MEMBER10 VALUES ('user08', '서은별', 'pw1008', '9708081234567', '01011119999', '수원', TO_DATE('2026-01-20','YYYY-MM-DD'), '패션');
INSERT INTO MEMBER10 VALUES ('user09', '강도윤', 'pw1009', '9809091234567', '01011121111', '창원', TO_DATE('2026-01-22','YYYY-MM-DD'), '사진');
INSERT INTO MEMBER10 VALUES ('user10', '윤아린', 'pw1010', '9910101234567', '01011122222', '제주', TO_DATE('2026-01-25','YYYY-MM-DD'), '공부');
COMMIT;

INSERT INTO BOARD VALUES (1 , '가입 인사',         '안녕하세요 반갑습니다.',         TO_DATE('2026-02-01','YYYY-MM-DD'), 'user01');
INSERT INTO BOARD VALUES (2 , '오라클 질문',       '기본키 설정이 궁금합니다.',       TO_DATE('2026-02-02','YYYY-MM-DD'), 'user01');
INSERT INTO BOARD VALUES (3 , '주말 계획',         '이번 주말에 영화 볼 예정입니다.', TO_DATE('2026-02-03','YYYY-MM-DD'), 'user01');
INSERT INTO BOARD VALUES (4 , '맛집 추천',         '서울 맛집 추천 부탁드려요.',      TO_DATE('2026-02-04','YYYY-MM-DD'), 'user01');
INSERT INTO BOARD VALUES (5 , '운동 시작',         '요즘 운동을 시작했습니다.',       TO_DATE('2026-02-05','YYYY-MM-DD'), 'user02');
INSERT INTO BOARD VALUES (6 , '음악 추천',         '잔잔한 노래 추천해주세요.',       TO_DATE('2026-02-06','YYYY-MM-DD'), 'user02');
INSERT INTO BOARD VALUES (7 , '책 후기',           '최근 읽은 책이 재미있었어요.',    TO_DATE('2026-02-07','YYYY-MM-DD'), 'user02');
INSERT INTO BOARD VALUES (8 , '자격증 공부',       'SQL 공부가 쉽지 않네요.',         TO_DATE('2026-02-08','YYYY-MM-DD'), 'user03');
INSERT INTO BOARD VALUES (9 , '게임 이야기',       '주말에 게임했어요.',             TO_DATE('2026-02-09','YYYY-MM-DD'), 'user05');
INSERT INTO BOARD VALUES (10, '여행 계획',         '봄에 여행 가고 싶어요.',         TO_DATE('2026-02-10','YYYY-MM-DD'), 'user05');
INSERT INTO BOARD VALUES (11, '요리 레시피',       '간단한 파스타 레시피 공유.',      TO_DATE('2026-02-11','YYYY-MM-DD'), 'user06');
INSERT INTO BOARD VALUES (12, '점심 메뉴',         '오늘 점심 뭐 드셨나요?',         TO_DATE('2026-02-12','YYYY-MM-DD'), 'user06');
INSERT INTO BOARD VALUES (13, '공부 자극',         '다들 열공합시다.',               TO_DATE('2026-02-13','YYYY-MM-DD'), 'user06');
INSERT INTO BOARD VALUES (14, '사진 찍기',         '야경 사진 찍는 법 알려주세요.',   TO_DATE('2026-02-14','YYYY-MM-DD'), 'user08');
INSERT INTO BOARD VALUES (15, '패션 팁',           '봄 코디 추천 부탁합니다.',        TO_DATE('2026-02-15','YYYY-MM-DD'), 'user08');
INSERT INTO BOARD VALUES (16, '오늘의 일상',       '오늘 날씨가 정말 좋네요.',        TO_DATE('2026-02-16','YYYY-MM-DD'), 'user08');
INSERT INTO BOARD VALUES (17, '카페 추천',         '조용한 카페 찾고 있어요.',        TO_DATE('2026-02-17','YYYY-MM-DD'), 'user08');
INSERT INTO BOARD VALUES (18, '드라마 후기',       '어제 본 드라마가 재밌었어요.',    TO_DATE('2026-02-18','YYYY-MM-DD'), 'user08');
INSERT INTO BOARD VALUES (19, '사진 보정',         '사진 보정 앱 추천해주세요.',      TO_DATE('2026-02-19','YYYY-MM-DD'), 'user09');
INSERT INTO BOARD VALUES (20, '주말 산책',         '주말에 공원 산책 다녀왔어요.',    TO_DATE('2026-02-20','YYYY-MM-DD'), 'user09');

COMMIT;

5. 게시글 작성을 한번도 하지 않는 유저의 유저아이디 출력

더보기

[내 답안]

 

select * 
  from member10;
  
select *
  from board;
 
select *
  from member10 m, board b
 where m.USERID = b.USERID(+); 

select m.userid
  from member10 m, board b
 where m.USERID = b.USERID(+) 
   and b.userid is null;

 

 

[문제풀이]

 

   SELECT USERID
  FROM MEMBER10
 WHERE USERID NOT IN (SELECT USERID
                        FROM BOARD);

6. 게시글을 3회 이상 작성한 유저의 유저아이디 출력

더보기

[내 답안]

 

select m.userid, count(b.USERID)
  from member10 m, board b
 where m.USERID = b.USERID(+)
 group by m.userid, b.USERID;
 
  
select *
  from (select m.userid, count(b.USERID) as 작성수
          from member10 m, board b
         where m.USERID = b.USERID(+)
         group by m.userid, b.USERID)
 where 작성수 >= 3;

 

 

[문제풀이]

 

SELECT USERID, USERNAME
  FROM MEMBER10
 WHERE USERID IN (SELECT USERID
                    FROM BOARD
                   GROUP BY USERID
                  HAVING COUNT(*) >= 3);