[SQL] 테이블 생성 - CREATE TABLE

·2025년 7월 11일

SQL

목록 보기
108/126

문제1. 오라클에 데이터를 저장할 테이블을 다음과 같이 생성하시오

create table emp900
( empno  number(10),	-- 숫자 10자리 허용
  ename  varchar2(20),	-- 영문자 20자 허용
  sal    number(10),
  hiredate date);

✔️ 테이블명과 컬럼명은 반드시 문자로 시작해야함

문제2. 위의 emp900 테이블에 아래의 데이터를 입력하시오

1111 scott 3000 2025/03/02
2222 smith 2000 2025/04/01

insert into emp900
 values(1111, 'scott', 3000, to_date('2025/03/02', 'RRRR/MM/DD'));
 
insert into emp900
 values(2222, 'smith', 2000, to_date('2025/04/01', 'RRRR/MM/DD'));
 
select * from emp900;

문제3. emp 테이블과 구조가 똑같은 테이블을 emp902 이라는 이름으로 생성하시오

  create table emp902
   ( empno number(4,0) not null enable, 
   	 ename varchar2(10 byte), 
   	 job varchar2(9 byte), 
   	 mgr number(4,0), 
   	 hiredate date, 
   	 sal number(7,2), --- 숫자 전체 7자리를 허용하는데 그중 소수점 2자리 허용
   	 comm number(7,2), 
   	 deptno number(2,0), 
   	 loc varchar2(20 byte)
   ) ;

문제4. emp 테이블의 모든 데이터를 emp902 에 입력하시오

insert into emp902
select 
    * from emp;

문제5. dept 테이블과 똑같은 구조의 dept900 테이블을 생성하시오

create table dept900 
   ( deptno number(10,0), 
	 dname varchar2(14 byte), 
	 loc varchar2(13 byte), 
	 sumsal number(10,0), 
	 maxsal number(10,0), 
	 minsal number(10,0), 
	 cnt number(10,0)
   ) ;

문제6. dept 테이블의 데이터를 dept.csv 로 생성하시오

문제7. dept.csv 를 dept900 테이블에 임포트하시오

문제8. (현업요청) 다음의 중고차 가격 데이터가 있는 csv 파일을 여러분들이 받았습니다. 이 데이터를 입력할 수 있게 테이블을 생성하고 데이터를 입력하세요

year,model,price,mileage,color,transmission
2011,SEL,21992,7413,Yellow,AUTO
2011,SEL,20995,10926,Gray,AUTO
2011,SEL,19995,7351,Silver,AUTO
2011,SEL,17809,11613,Gray,AUTO
2012,SE,17500,8367,White,AUTO
2010,SEL,17495,25125,Silver,AUTO
2011,SEL,17000,27393,Blue,AUTO

💡

  1. 테이블명과 컬럼명 만들 때 예약어 쓸 수 X
  2. 반드시 문자로 시작해야함
  3. 30자를 넘어가면 X
create table usedcar
( car_year number(10),
  car_model varchar2(10),
  price number(10),
  mileage number(10),
  color varchar2(10),
  transmission varchar2(10)
);

💡 테이블 생성 후에는 반드시 sqldeveloper 탐색기창에서 새로고침 해줘야됨


문제9. 아래의 미국민 의료비 데이터인 insurance.csv 를 오라클의 테이블로 구성하시오

age,sex,bmi,children,smoker,region,expenses
19,female,27.9,0,yes,southwest,16884.92
18,male,33.8,1,no,southeast,1725.55
28,male,33.0,3,no,southeast,4449.46
33,male,22.7,0,no,northwest,21984.47
32,male,28.9,0,no,northwest,3866.86
31,female,25.7,0,no,southeast,3756.62
46,female,33.4,1,no,southeast,8240.59
37,female,27.7,3,no,northwest,7281.51
37,male,29.8,2,no,northeast,6406.41
60,female,25.8,0,no,northwest,28923.14

create  table  insurance
( age    number(10),
  sex    varchar(10),
  bmi    number(10,2),
  children  number(10),
  smoker    varchar2(10),
  region     varchar2(20),
 expenses    number(10,2) );
 
select * from insurance;

create  table  insurance2
as
 select rownum as num, i.*
  from insurance  i;

select * from insurance;

select * from insurance2;

drop  table insurance;

rename insurance2  to insurance;

select * from insurance;

문제10. usedcar 테이블도 위와 같이 앞에 부모키 컬럼을 추가해서 다시 생성하시오

create table usedcar2
as 
 select rownum as num, u.*
  from usedcar u;
 
drop table usedcar;

rename usedcar2 to usedcar;

select * from usedcar;

💡 데이터의 종류 3가지

  1. 문자형 : varchar2, char, long, clob, blob
  2. 숫자형 : number
  3. 날짜형 : date

💡 책 p.245
varchar2 의 최대길이 4000 바이트
number 는 최대 38 자리까지 허용
date 는 기원후 9999년 12월 31일까지 입력가능

💡 varchar2와 char의 차이점


가변 문자형은 입력되고 남은 공간을 회수

  • varchar2(가변 문자형)는 입력하고 남은 공간을 오라클이 회수
  • char(고정 문자형)는 회수하지 않기 때문에 공간낭비가 생길 수 있음
    처음에 테이블 설계할 때 문자형 컬럼의 경우 데이터가 크게 업데이트 될 것 같으면 처음부터 varchar2 가 아닌 char 로 만들어야함

문제12. insurance 테이블 생성스크립트를 가지고 insurance2 테이블을 생성하시오

create  table  insurance2
( age    number(10),
  sex    varchar(10),
  bmi    number(10,2),
  children  number(10),
  smoker    varchar2(10),
  region     varchar2(20),
 expenses    number(10,2) );

문제14. 아래의 CSV 파일을 테이블로 만들어서 우리나라 남자들이 가장 많이 걸리는 암이 무엇인지 SQL로 알아내시오

암종,질병코드,환자수,성별,조유병률,생존률
구강및인두,C00-C14,17024,남녀전체,33.8,62.2
식도,C15,7444,남녀전체,14.8,31.7
위,C16,207145,남녀전체,411.4,71.5
대장,C18-C20,173459,남녀전체,344.5,74.8
간,C22,51402,남녀전체,102.1,30.1
담낭 및 기타담도,C23-C24,14778,남녀전체,29.4,28.3
췌장,C25,7032,남녀전체,14,8.8
... 등등

create  table  korea_cancer
( cancer_type   varchar2(100),
  d_type    	varchar2(100),
  p_cnt         number(10),
  gender        varchar2(100),
  jo_rate       number(10,2),
  s_rate        number(10,2) );
  
-- 중복 행 제거
create table korea_cancer2
  as
  select distinct c.*
   from korea_cancer c;
  
select cancer_type, p_cnt, rank() over (order by p_cnt desc nulls last) 순위, c.*
  from korea_cancer2  c
  where gender='남자' and cancer_type !='모든암';

0개의 댓글