데이터베이스 - 설치
오라클 11g - Run SQL Command Line로 진행
데이터베이스 - 관리자 명령
-- 관리자 계정(SYSTEM)을 이용하여 다음 계정 작업 수행
-- 1. student / student 계정 생성
create user student identified by student;
CREATE USER student IDENTIFIED BY student;
-- 2. master / master 계정 생성
create user master identified by master;
-- 3. 위에서 만든 계정 비밀번호를 1234로 변경
alter user student identified by 1234;
alter user master identified by 1234;
-- 4. 계정 정보 조회
select * from dba_users;
select username from dba_users;
-- 5. master 계정 삭제
drop user master;
-- 6. student 계정 로그인
conn student/1234;
--7. 현재 로그인 계정 조회
show user;
데이터베이스 - 관리자 권한 설정
-- student라는 사용자에게 로그인 권한(create session)을 부여(grant)
grant create session to student;
-- student라는 사용자에게 로그인 권한을 회수(revoke)
revoke create session from student;
-- student라는 사용자에게 connect, resource 권한객체를 부여
grant connect, resource to student;
-- 12c 이상에서의 기본 권한 부여
grant connect, resource, unlimited tablespace to student;
데이터베이스 - 테이블 생성 예시
-- 포켓몬스터 정보를 저장하기 위한 테이블을 생성
CREATE TABLE monster(
monster_no number(3),
monster_name varchar2(24),
monster_type varchar2(9)
);
-- 만든 테이블을 삭제
DROP TABLE monster;
Q. 다음 요구사항에 맞는 테이블을 생성
<메뉴(Menu) 정보>
- 메뉴이름은 한글 10글자 이내로 작성된다.
- 메뉴가격은 가장 비싼게 100만원이다.
- 메뉴종류는 식사/안주/음료/디저트 중 하나가 저장된다.
create table menu(
menu_name varchar2(30),
menu_price number(7),
menu_type varchar2(9)
);
---> 데이터 추가와 커밋, 롤백
insert into menu(menu_name, menu_price, menu_type)
values('아메리카노', 3000, '음료');
insert into menu(menu_name, menu_price, menu_type)
values('카페라떼', 3500, '음료');
insert into menu(menu_name, menu_price, menu_type)
values('카푸치노', 3500, '음료');
insert into menu(menu_name, menu_price, menu_type)
values('카페모카', 4000, '음료');
insert into menu(menu_name, menu_price, menu_type)
values('바닐라라떼', 4000, '음료');
insert into menu(menu_name, menu_price, menu_type)
values('헤이즐넛라떼', 4000, '음료');
commit;
-- 데이터베이스는 "다수의 사용자가 데이터를 관리"할 수 있도록 구성된 저장소
-- 각자의 사용자가 동시에 접근해서 데이터를 추가, 조회, 수정, 삭제할 수 있다.
-- 이 중에서 추가(C), 수정(U), 삭제(D)는 문제의 소지가 있다.
-- 이런 상황을 방지하기 위해서 DBMS에서는 "2단계 저장구조"를 가진다
-- 1차적으로 작업한 내용을 트랜잭션(Transaction)이라고 부르고, 작업을 마치면 트랜잭션을 저장/취소할 수 있다.
-- 최종 저장 : commit , 최종 취소 : rollback
Q. 다음 요구사항에 맞게 주어진 데이터를 저장할 수 있도록 SQL 명령을 작성하세요
[요구사항]
- 테이블 이름은 EPL로 한다
- 순위(EPL_RANK)는 1위부터 20위까지 존재한다
- 이름(CLUB_NAME)은 한글 12글자까지 저장할 수 있다
- 경기수(GAME_TOTAL)는 최대 36경기이다
- 승리(GAME_VICTORY)와 무승부(GAME_DRAW), 패배(GAME_DEFEAT)는 경기수를 넘을 수 없다
- 승점(VICTORY_POINT)은 최대 108점까지 획득할 수 있다
[데이터]
- 순위 : 1 , 이름 : 첼시 , 경기수 : 5 , 승리 : 4 , 무승부 : 1 , 패배 : 0 , 승점 : 13
- 순위 : 2 , 이름 : 리버풀 , 경기수 : 5 , 승리 : 4 , 무승부 : 1 , 패배 : 0 , 승점 : 13
- 순위 : 3 , 이름 : 맨유 , 경기수 : 5 , 승리 : 4 , 무승부 : 1 , 패배 : 0 , 승점 : 13
- 순위 : 4 , 이름 : 브라이턴 , 경기수 : 5 , 승리 : 4 , 무승부 : 0 , 패배 : 1 , 승점 : 12
- 순위 : 5 , 이름 : 맨시티 , 경기수 : 5 , 승리 : 3 , 무승부 : 1 , 패배 : 1 , 승점 : 10
-- 테이블 생성 구문
create table epl(
club_name varchar2(36),
epl_rank number(2),
game_total number(2),
game_victory number(2),
game_draw number(2),
game_defeat number(2),
victory_point number(3)
);
-- 데이터 추가 구문
insert into epl(epl_rank, club_name, game_total, game_victory, game_draw, game_defeat, victory_point)
values(1, '첼시', 5, 4, 1, 0, 13);
insert into epl(epl_rank, club_name, game_total, game_victory, game_draw, game_defeat, victory_point)
values(2, '리버풀', 5, 4, 1, 0, 13);
insert into epl(epl_rank, club_name, game_total, game_victory, game_draw, game_defeat, victory_point)
values(3, '맨유', 5, 4, 1, 0, 13);
insert into epl(epl_rank, club_name, game_total, game_victory, game_draw, game_defeat, victory_point)
values(4, '브라이턴', 5, 4, 0, 1, 12);
insert into epl(epl_rank, club_name, game_total, game_victory, game_draw, game_defeat, victory_point)
values(5, '맨시티', 5, 3, 1, 1, 10);
commit;
******************************
-- 커맨드 정렬이 잘 안보일 경우 컬럼의 표시 크기를 변경(SQL 커맨드라인 켤때마다)
column epl_rank format 00;
column club_name format a10;
column game_total format 00;
column game_victory format 00;
column game_draw format 00;
column game_defeat format 00;
column victory_point format 000;
******************************
Q. 멜론 음원차트를 데이터베이스 테이블로 구현
- 테이블이름 : chart
- 항목 : 음원고유번호, 순위, 제목, 가수이름, 앨범이름, 좋아요
- 요구사항 : 음원고유번호는 sequence를 사용하여 부여(chart_seq)
1위부터 10위까지의 정보를 저장한 뒤 출력하도록 구현
create table chart(
melon_no number(2),
melon_rank number(2),
melon_title varchar(100),
melon_singer_name varchar(100),
melon_album_name varchar(100),
melon_likes number(6)
);
create sequence chart_seq
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 1, 'STAY', 'The Kid LAROI, Justin Bieber', 'Stay', 149477);
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 2, '신호등', '이무진', '신호등', 213673 );
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 3, 'Permission to Dance', '방탄소년단', 'Butter / Permission to Dance', 175116 );
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 4, 'OHAYO MY NIGHT', '디핵 (D-Hack), PATEKO (파테코)', 'OHAYO MY NIGHT', 131563 );
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 5, 'Next Level', 'aespa', 'Next Level', 205744 );
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 6, 'Butter', '방탄소년단', 'Butter', 243669 );
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 7, '바라만 본다', 'MSG워너비(M.O.M)', 'MSG워너비 1집', 156243 );
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 8, 'Weekend', '태연 (TAEYEON)', 'Weekend', 137153 );
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 9, '낙하 (with 아이유)', 'AKMU (악뮤)', 'NEXT EPISODE', 123671 );
insert into chart(melon_no, melon_rank, melon_title, melon_singer_name, melon_album_name, melon_likes)
values(chart_seq.nextval, 10, 'Queendom', 'Red Velvet (레드벨벳)', 'Queendom - The 6th Mini Album', 91229 );
commit;
COLUMN melon_no format 00 ;
COLUMN melon_rank format 00 ;
COLUMN melon_title format a30 ;
COLUMN melon_singer_name format a30 ;
COLUMN melon_album_name format a30 ;
COLUMN melon_likes format 999,999;
SET PAGESIZE 2500;
SET LINESIZE 220;
'Java 웹 개발' 카테고리의 다른 글
21.09.28 - 웹 개발 입문 32일차 (0) | 2021.09.28 |
---|---|
21.09.27 - 웹 개발 입문 31일차 (0) | 2021.09.27 |
21.09.23 - 웹 개발 입문 29일차 (0) | 2021.09.23 |
21.09.17 - 웹 개발 입문 28일차 (0) | 2021.09.17 |
21.09.16 - 웹 개발 입문 27일차 (0) | 2021.09.16 |