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);
'아이티윌_데이터 분석 55기 > 문제풀이_SQL' 카테고리의 다른 글
| #15-2. 15일차 퀴즈에 대한 문제풀이 (0) | 2026.03.25 |
|---|---|
| #14-2. 14일차 퀴즈에 대한 문제풀이 (0) | 2026.03.24 |
| #13-2. 13일차 퀴즈에 대한 문제풀이 (0) | 2026.03.23 |
| #12-2. 12일차 퀴즈에 대한 문제풀이 (0) | 2026.03.20 |
| #10-2. 10일차 퀴즈에 대한 문제풀이 (0) | 2026.03.18 |