Salted Caramel

[수업 21일차] 21.09.02 SQL DataBase -1 본문

coding/[2021.08.02~2022.01.24] 수업복습

[수업 21일차] 21.09.02 SQL DataBase -1

꽃무늬라떼 2021. 9. 2. 18:55

 

데이터베이스 sql 실행 : ctrl + enter

 

-- sql developer 에서의 한 줄 주석문

/*
   sql developer 에서의 여러 줄 주석문
*/

 


관계형 데이터베이스 구성 요소

1. 테이블 : - 관계형 데이터베이스는 기본적으로 데이터를 2차원 표 형태로 저장하고 관리를 함.
              - 이러한 표 형태의 데이터 저장 공간을 테이블(table)이라고 함.
              - 테이블은 2차원 형태이므로 가로줄과 세로줄로 구성.
             * 가로줄 : 행(row)
             * 세로줄 : 열(column)
2. 행 : - 행은 저장하려는 하나의 개체를 구성하는 값.
         - 학생 한 사람에 대한 정보를 저장한 것.
 
3. 열 : - 저장하는 데이터를 대표하는 이름과 공통특성을 정의함.
        - 열은 저장정보의 종류(자료형)와 자료의 저장 가능한 최대 크기, 중복 여부 설정.


 오라클에서 열의 속성에 들어가는 주요 자료형(data type)

 


  1. number(n, n1) : n - 전체 자릿수 / n1 - 소숫점 자릿수 / n - n1 - 정수 자릿수
  
     예) number(7,2) : 전체 자릿수는 7자리이고, 정수 자릿수는 5자리, 실수 자릿수는 2자리
     ※ +_ 38자릿수까지 숫자를 저장할 수 있음.

  2. char(n) : 문자열이 n개가 저장되는 자료형.  ==> 고정 자료형.
  
  3. varchar(n) : 문자열이 n개가 저장되는 자료형.  ==> 현재는 사용되지 않는 자료형.
  
  4. varchar2(n) : 문자열이 n개가 저장되는 자료형. ==> 가변 자료형. (4000byte)   (가장 많이 사용)
  
     ※ 한글은 무조건 한 글자당 2바이트씩 사용. 

  5. date : 날짜가 저장되는 자료형. ==> 시스템의 현재 날짜 및 시간이 저장.
  
 



  중요한 개념

  - 무결성(Integrity) : 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의
   
                       실제 값이 일치하는 정확성을 의미.
                       
    무결성 제약조건 : 데이터베이스에 저장된 데이터의 정확성을 보장하기 위해서 정확하지
    
                    않는 데이터가 데이터베이스 내에 저장되는 것을 방지하기 위한 조건.
  
  - 데이터베이스 상에서 제약 조건의 종류
  
    1. unique 제약 조건 : 중복이 되면 안 되는 제약 조건. 유일한 값을 가지는 제약 조건.
    
                         단, null은 값의 중복에서 제외가 됨.
                         
    2. not null 제약 조건 : 지정된 열에 null을 허용하지 않는 제약 조건.
     
                           공백을 허용하지 않는 제약 조건.
        
    3. check 제약 조건 : 특정한 값이 아닌 데이터가 들어오지 못하게 하는 제약 조건.
     
                        설정에 해당하는 값만 허용하는 제약 조건.
                        
    4. primary key 제약 조건 : unique + not null 제약 조건 ==> 기본키 제약 조건.
    
       기본키는 해당 테이블을 대표하는 컬럼으로서의 역할을 수행하며, 다른 테이블에서
       
       외래키들이 참조할 수 있는 키로서의 자격을 가진다. 이를 참조 무결성이라고 함.

 

 


-- student 테이블에 컬럼을 추가하는 방법

-- 형식) alter table 테이블이름 add(컬럼명, 데이터타입(크기), 제약조건);

-- student 테이블에서 누락된 주소 컬럼을 추가해 보자.

alter table student add(address varchar2(200));


-- 테이블의 컬럼을 수정하는 방법(자료형 수정)

-- 형식) alter table 테이블이름 modify(컬럼명 데이터타입(크기));

alter table student modify(age varchar2(3));

-- 테이블의 컬럼명을 수정하는 방법

-- 형식) alter table 테이블이름 rename clolumn 기존컬럼명 to 세로운 컬럼명;

alter table student rename column address to addr;


-- 테이블의 컬럼을 삭제하는 방법

-- 형식) alter table 테이블이름 drop column 컬럼명;

alter table student drop column age;

alter table student add(age number(3));


-- student 테이블에 데이터를 추가해 보자.

-- 형식1) insert into 테이블이름 values('학번데이터', '이름데이터', '학과데이터',

--          학년데이터, '연락처데이터', 등록일데이터(sysdate), '주소데이터',

--          나이데이터);

-- student 테이블에 컬럼을 추가하는 방법

-- 형식) alter table 테이블이름 add(컬럼명, 데이터타입(크기), 제약조건);

-- student 테이블에서 누락된 주소 컬럼을 추가해 보자.

alter table student add(address varchar2(200));


-- 테이블의 컬럼을 수정하는 방법(자료형 수정)

-- 형식) alter table 테이블이름 modify(컬럼명 데이터타입(크기));

alter table student modify(age varchar2(3));



-- 테이블의 컬럼명을 수정하는 방법

-- 형식) alter table 테이블이름 rename clolumn 기존컬럼명 to 세로운 컬럼명;

alter table student rename column address to addr;


-- 테이블의 컬럼을 삭제하는 방법

-- 형식) alter table 테이블이름 drop column 컬럼명;

alter table student drop column age;

alter table student add(age number(3));


-- student 테이블에 데이터를 추가해 보자.

-- 형식1) insert into 테이블이름 values('학번데이터', '이름데이터', '학과데이터',

--          학년데이터, '연락처데이터', 등록일데이터(sysdate), '주소데이터',

--          나이데이터);

 

--형식1)

insert into student 
   values('2021_001', '홍길동', '경제학과', 3, '010-1111-1234', sysdate,
          '서울시 마포구', 27);
          
-- 형식2) insert into 테이블이름(학번컬럼명, 이름컬럼명, 학과컬럼명, 연락처컬럼명, 등록일컬럼명)
   
--          values('학번데이터', '이름데이터', '학과데이터', '연락처데이터', 등록일데이터);

 

insert into student(hakbun, name, major, phone, regdate)
    values('2021_002', '이순신', '해양학과', '010-2222-2345', sysdate);

 

-- 데이터베이스에 완벽하게 적용시키고자 할 때 사용하는 키워드.
commit;


-- student 테이블의 특정 컬럼을 수정하는 방법

-- 형식) update 테이블이름 set 컬럼이름 = 컬럼수정내용,...... where primary key로 설정된 컬럼명 = 컬럼 데이터;

update student set year = 4, addr = '전라남도 신안군', age = 33 where hakbun = '2021_002';


-- student 테이블의 특정 데이터(레코드)를 삭제하는 방법

-- 형식) delete from 테이블이름 where primary key로 설정된 컬럼명 = 컬럼데이터;

delete from student where hakbun = '2021_004';


-- student 테이블에 있는 모든 데이터를 삭제하는 방법
delete from student;

commit;

-- 데이터베이스에 적용시키고 싶지 않은 경우 사용하는 키워드.
rollback;



-- 현재 계정(web)에 있는 모든 테이블을 보여주세요.
select 

from tab;

-- student 테이블의 모든 컬럼을 화면에 보여주세요.
select *

 from student;
    

 

-- null 값을 가지는 컬럼을 다른 컬럼과 연산을 진행하게 되면 모두 null 값으로 처리.

-- nvl() 함수 : null 값을 특정한 값으로 변경시켜 주는 함수.

--             모든 데이터 타입에 적용이 가능함.

--             nvl() 함수를 이용할 때에는 전환되는 값의 자료형을 일치시켜야 함.

--   형식) nvl(null 값이 들어 있는 컬럼명, 변경할 값)

select empno, ename, sal, comm, sal + nvl(comm, 0)
from emp;

-- nvl2() 함수 : 자바에서의 3항 연산자와 비슷한 함수.

-- 형식) nvl2(컬럼명, expr1, expr2)

--           ==> 컬럼명의 값이 null이 아닌 경우 expr1 값을 반환을 받고,

--           ==> 컬럼명의 값이 null인 경우 expr2 값을 반환을 받는 함수.

select empno, ename, sal, comm, sal + nvl2(comm, comm, 0)
from emp;


-- as  : 컬럼 제목에 이름을 변경하는 키워드 ==> 별칭(별명)

-- 사용 시 컬럼명 바로 뒤에 사용함. 컬럼명과 별칭 사이에 as 라는

-- 키워드를 넣어주면 됨.

 

-- distinct : 중복을 제거해 주는 키워드.

--            주로 하나의 컬럼에서 중복된 값을 제거하고 보여줄 때 사용함.

--            distinct 키워드는 항상 select 키워드 다음에 기술한다.

--            distinct 키워드 뒤에 나오는 컬럼들은 모두 distinct 의 영향을 받는다.

--            distinct 뒤에 여러 개의 컬럼들이 기술이 되면 해당 컬럼들은 중복이

--            되지 않게 나타난다.

 

-- literal 문자열

-- 컬럼명이나 별칭이 아닌 select 목록에 포함되는 문자, 표현식 숫자를 의미.

-- 날짜나 문자열인 경우 단일 인용 부호('')를 사용해야 한다.

-- 예)"KING 사원의 연봉은 60000 입니다."

select ename || ' 사원의 연봉은 ' || sal * 12 || ' 입니다.' as "사원의 연봉"
from emp;

-- member10 테이블의 리터럴 작업을 진행해 보자.

 

-- ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
/* where 조건절

 모든 데이터를 조회하는 것이 아니라 사용자가 원하는 데이터만 조회할 경우에 사용.

 where 절은 from 테이블이름 뒤에 기술되어야 한다.

 형식) select 컬럼명1, 컬럼명2,.... 컬럼명n from 테이블이름 where 조건식;

 where 조건절은 자료를 검색할 때 사용되는 키워드.

 1) = : 조건이 같은가?

 2) < : 조건이 작은가?

 3) <= : 조건이 작거나 같은가?

 4) > : 조건이 큰가?

 5) >= : 조건이 크거나 같은가?

 6) != : 조건이 같지 않은가?

 7) <> : 조건이 같지 않은가? ==> != 과 같은 의미.

 8) between A and B : A와 B 사이에 있는가?

    주의) 작은 값을 앞에 기술하고 큰 값을 뒤에 기술해야 함.

 9) in(list) : list 값 중에 어느 하나와 일치하는가?

 10) not between A and B : A와 B 사이에 있지 않는가?

 11) not in(list) : list 값과 일치하지 않는가?
 
 */
 
 -- emp 테이블에서 담당업무가 'MANAGER'인 사원의
 -- 모든 정보를 화면에 보여주세요.
 select *
 from emp
 where job = 'MANAGER';
 
 -- emp 테이블에서 담당업무가 'SALESMAN' 인 사원의
 -- 모든 정보를 화면에 보여주세요.
 select *
 from emp
 where job = 'SALESMAN';
 
 -- emp 테이블에서 부서번호가 30번 부서에 해당하는
 -- 사원들의 전체 정보를 화면에 보여주세요.
 select *
 from emp
 where deptno = 30;

 

 

--sql developer 에서의 주석문
/*

sql developer 에서의 여러줄 주석문

*/

/*
오라클에서 열의 속성에 들어가는 주요 자료형(data type)
1.number(n,n1) :n -전체 자릿수/n1 - 소숫점 자릿수./ n-n2 - 정수 자릿수 (가장많이 사용)
※ + - 38 자리수까지 저장 할 수 있음.
 예) number(7,2): 전체자릿수는 7자리이고, 정수 자릿수는 5자리, 실수 자릿수는 2자리
 2. char(n) : 문자열이 n개가 저장되는 자료형. ==> 고정 자료형.
 3. varchar(n) : 문자열이 n개가 저장되는 자료형. ==> 현재는 사용되지 않는 자료형.
 4. varchar2(n) : 문자열이 n개가 저장되는 자료형. ==> 가변 자료형.(가장많이 사용)
 ※ 한글은 무조건 한 글자당 2바이트씩 사용.
 5. date : 날짜가 저장되는 자료형. ==> 시스템의 현재 날씨 및 시간이 저장.
 
 중요한 개념
 - 무결성(Integrity) : 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 
                   
                      실제 값이 일치하는 정확성을 의미함.  (결점이 없는 성질)
 
 무결성 제약 조건 : 데이터베이스에 저장된 데이터의 정확성을 보장하기 위해서 정확하지 않는 
                
                 데이터가 데이터베이스 내에 저장되는 것을 방지하기 위한 조건.
  
  - 데이터베이스 상에서 제약 조건의 종류
  
  1. unique 제약 조건 : 중복이 되면 안되는 제약 조건. 유일한 값을 가지는 제약 조건.
                    
                      단, null은 값의 중복에서 제외가 됨.
 
  2. not null 제약 조건 : 지정된 열에 null을 허용하지 않는 제약 조건.
                      
                        공백을 허용하지 않는 제약 조건     (//회원가입상 필수 입력사항)
  
  3. check 제약 조건 : 특정한 값이 아닌 데이터가 들어오지 못하게 하는 제약 조건.
                    
                     설정에 해당하는 값만 허용하는 제약 조건.
  
  4. primary key 제약 조건 : unique + not null 제약 조건 (//중복과 공백이 안되는) 
  
                           ==> 기본키 제약 조건
 
   기본키는 해당 테이블을 대표하는 컬럼으로서의 역할을 수행하며, 다른 테이블에서
  
   외래키들이 참조할 수 있는 키로서의 자격을 가진다. 이를 참조 무결성이라고 함.
   
   (예. 주민번호(//대표컬럼키, 기본키))
   
*/

/* 학생 테이블을 만들어 보자.

구성 요소(컬럼 - 속성) : 학번(//기본키), 이름 , 학과, 학년, 나이, 연락처, 주소, 입학일(등록일) 등등

    create table 테이블이름(
 
      학번 자료형(크기) {제약조건},
      
      이름 자료형(크기) {제약조건},
      
      학과 자료형(크기) {제약조건},
      
      학년 자료형(크기) {제약조건},
      
      나이 자료형(크기) {제약조건},
      
      연락처 자료형(크기) {제약조건},
      
      주소 자료형(크기) {제약조건},
      
      입학일(등록일) 자료형(크기) {제약조건}
      
    );       
  
  
  */
 
-- student 테이블 생성.
create table student(
    hakbun varchar2(15) primary key,
    name varchar2(20) not null,
    major varchar2(30) not null,
    year number(1),
    age number(3),
    phone varchar2(20) not null,
    regdate date not null
);

-- student 테이블에 컬럼을 추가하는 방법

-- 형식) alter table 테이블이름 add(컬럼명, 데이터타입(크기), 제약조건);

-- student 테이블에서 누락된 주소 컬럼을 추가해 보자.

alter table student add(address varchar2(200));


-- 테이블의 컬럼을 수정하는 방법(자료형 수정)

-- 형식) alter table 테이블이름 modify(컬럼명 데이터타입(크기));

alter table student modify(age varchar2(3));


-- 테이블의 컬럼명을 수정하는 방법

-- 형식) alter table 테이블이름 rename clolumn 기존컬럼명 to 세로운 컬럼명;

alter table student rename column address to addr;


-- 테이블의 컬럼을 삭제하는 방법

-- 형식) alter table 테이블이름 drop column 컬럼명;

alter table student drop column age;

alter table student add(age number(3));


-- student 테이블에 데이터를 추가해 보자.

-- 형식1) insert into 테이블이름 values('학번데이터', '이름데이터', '학과데이터',

--          학년데이터, '연락처데이터', 등록일데이터(sysdate), '주소데이터',

--          나이데이터);


insert into student 
   values('2021_001', '홍길동', '경제학과', 3, '010-1111-1234', sysdate,
          '서울시 마포구', 27);
          
-- 형식2) insert into 테이블이름(학번컬럼명, 이름컬럼명, 학과컬럼명, 연락처컬럼명, 등록일컬럼명)
   
--          values('학번데이터', '이름데이터', '학과데이터', '연락처데이터', 등록일데이터);


insert into student(hakbun, name, major, phone, regdate)
    values('2021_002', '이순신', '해양학과', '010-2222-2345', sysdate);
    
insert into student
   values('2021_003', '유관순', '회계학과', 1, '010-3333-3456', sysdate,
          '충청남도 천안시', 19);
          
insert into student(hakbun, name, major, phone, regdate)
   values('2021_004', '김유신', '체육학과', '010-4444-4567', sysdate);
   
insert into student(hakbun, name, major, phone, regdate)
   values('2021_005', '김연아', '체육학과', '010-5555-5678', sysdate);

-- 데이터베이스에 완벽하게 적용시키고자 할 때 사용하는 키워드.
commit;


-- student 테이블의 특정 컬럼을 수정하는 방법

-- 형식) update 테이블이름 set 컬럼이름 = 컬럼수정내용,...... where primary key로 설정된 컬럼명 = 컬럼 데이터;

update student set year = 4, addr = '전라남도 신안군', age = 33 where hakbun = '2021_002';


-- student 테이블의 특정 데이터(레코드)를 삭제하는 방법

-- 형식) delete from 테이블이름 where primary key로 설정된 컬럼명 = 컬럼데이터;

delete from student where hakbun = '2021_004';


-- student 테이블에 있는 모든 데이터를 삭제하는 방법
delete from student;

commit;

-- 데이터베이스에 적용시키고 싶지 않은 경우 사용하는 키워드.
rollback;



-- 현재 계정(web)에 있는 모든 테이블을 보여주세요.
select * from tab;

-- student 테이블의 모든 컬럼을 화면에 보여주세요.
select * from student;

-- [문제] emp 테이블의 모든 데이터를 화면에 보여주세요.
select * from emp;

-- emp 테이블에서 empno, ename, job, deptno 컬럼을 화면에 보여주세요.

-- 형식) select 컬럼명1, 컬럼명2,...... from 테이블이름;
select empno, ename, job, deptno from emp;


-- [문제1] emp 테이블에서 이름, 입사일, 급여를 화면에 보여주세요.
select ename, hiredate, sal from emp;

-- [문제2] emp 테이블에서 사번, 이름, 담당업무, 보너스를 화면에 보여주세요.
select empno, ename, job, comm from emp;


-- emp 테이블에서 사번, 이름, 급여, 보너스, 급여+보너스를 화면에 보여주세요.
select empno, ename, sal, comm, sal+comm
from emp;

-- null 값을 가지는 컬럼을 다른 컬럼과 연산을 진행하게 되면 모두 null 값으로 처리.

-- nvl() 함수 : null 값을 특정한 값으로 변경시켜 주는 함수.

--             모든 데이터 타입에 적용이 가능함.

--             nvl() 함수를 이용할 때에는 전환되는 값의 자료형을 일치시켜야 함.

--   형식) nvl(null 값이 들어 있는 컬럼명, 변경할 값)

select empno, ename, sal, comm, sal + nvl(comm, 0)
from emp;

-- nvl2() 함수 : 자바에서의 3항 연산자와 비슷한 함수.

-- 형식) nvl2(컬럼명, expr1, expr2)

--           ==> 컬럼명의 값이 null이 아닌 경우 expr1 값을 반환을 받고,

--           ==> 컬럼명의 값이 null인 경우 expr2 값을 반환을 받는 함수.

select empno, ename, sal, comm, sal + nvl2(comm, comm, 0)
from emp;


-- as  : 컬럼 제목에 이름을 변경하는 키워드 ==> 별칭(별명)

-- 사용 시 컬럼명 바로 뒤에 사용함. 컬럼명과 별칭 사이에 as 라는

-- 키워드를 넣어주면 됨.

select empno, ename, sal, comm, sal + nvl2(comm, comm, 0) "급여+보너스"
from emp;

-- [문제1] emp 테이블에서 사번, 사원명, 급여, 급여의 10% 인상액을
--        화면에 보여주세요.
select empno, ename, sal, sal * 1.1 as "10% 인상 급여"
from emp;

-- [문제2] emp 테이블에서 각 사원의 담당업무를 화면에 보여주세요.
select job 
from emp;

-- [문제3] emp 테이블에서 각 사원의 관리자를 화면에 보여주세요.
select mgr
from emp;


-- distinct : 중복을 제거해 주는 키워드.

--            주로 하나의 컬럼에서 중복된 값을 제거하고 보여줄 때 사용함.

--            distinct 키워드는 항상 select 키워드 다음에 기술한다.

--            distinct 키워드 뒤에 나오는 컬럼들은 모두 distinct 의 영향을 받는다.

--            distinct 뒤에 여러 개의 컬럼들이 기술이 되면 해당 컬럼들은 중복이

--            되지 않게 나타난다.

select distinct job
from emp;

select distinct mgr
from emp;

-- [문제] emp 테이블에서 담당업무와 부서번호의 중복을 제거한 후
--       화면에 보여주세요.
select distinct job, deptno
from emp;


-- member10 테이블을 만들어 보자.
create table member10(
    num number(7) primary key,              -- 회원 번호
    memid varchar2(20) not null,            -- 회원 아이디
    memname varchar2(20) not null,          -- 회원 이름
    pwd varchar2(20) not null,              -- 회원 비밀번호
    age number(3),                          -- 회원 나이
    mileage number(8) not null,             -- 회원 마일리지
    job varchar2(30),                       -- 회원 직업                                                                                                                                                                                                            
    addr varchar2(200),                     -- 회원 주소
    regdate date not null                   -- 회원 가입일
);

-- member10 테이블에 고객의 정보를 저장해 보자.
insert into member10 
   values(1, 'id1', '홍길동', '1111', 25, 0, '학생',
            '부산시 동래구', '2013-08-08');
insert into member10 
   values(2, 'id2', '김길동', '2222', 30, 1500, '직장인',
            '서울시 강남구', '2013-09-05');
insert into member10 
   values(3, 'id3', '공성현', '3333', 33, 10000, '직장인',
            '부산시 중구', '2013-09-09');
insert into member10 
   values(4, 'id4', '김영희', '4444', 18, 3000, '학생',
            '경상남도 마산시', '2012-01-01');
insert into member10 
   values(5, 'id5', '박말자', '5555', 45, 5000, '주부',
            '경기도 남양주시', '2013-05-05');
insert into member10 
   values(6, 'id6', '김철수', '6666', 55, 0, '교수',
            '제주도 서귀포시', '2013-01-01');
insert into member10 
   values(7, 'id7', '홍길동', '7777', 14, 6000, '학생',
            '경상북도 경주시', '2012-12-25');
insert into member10 
   values(8, 'id8', '김상현', '8888', 31, 0, '무직',
            '서울시 마포구', '2013-04-18');
insert into member10 
   values(9, 'id9', '이지연', '9999', 25, 0, '학생',
            '강원도 강릉시', '2013-02-06');
insert into member10 
   values(10, 'id10', '홍길동', '0101', 52, 10000, '주부',
            '서울시 강북구', '2013-09-15');

-- category 테이블을 만들어 보자.
create table category(
    cnum number(5) default '1' not null,
    category_code varchar2(8) not null,
    category_name varchar2(30) not null,
    delete_chk char(1) default 'N' not null,
    primary key(cnum)
);

-- 카테고리 테이블에 데이터를 저장해 보자.
insert into category values(1, '00010000', '전자제품', 'N');
insert into category values(2, '00010001', 'TV', 'N');
insert into category values(3, '00010002', '컴퓨터', 'N');
insert into category values(4, '00010003', 'MP3', 'N');
insert into category values(5, '00010004', '에어컨', 'N');
insert into category values(6, '00020000', '의류', 'N');
insert into category values(7, '00020001', '남방', 'N');
insert into category values(8, '00020002', '속옷', 'N');
insert into category values(9, '00020003', '바지', 'N');
insert into category values(10, '00030000', '도서', 'N');
insert into category values(11, '00030001', '컴퓨터도서', 'N');
insert into category values(12, '00030002', '소설', 'N');


-- products 테이블(상품 상세 정보 테이블)을 만들어 보자.
create table products(
    pnum number(11) primary key,                     -- 제품 번호
    category_fk varchar2(8) not null,                -- 카테고리 코드
    products_name varchar2(50) not null,             -- 제품명
    ep_code_fk varchar2(5) not null,                 -- 제품 코드
    input_price number(10) default 0 not null,       -- 입고 가격
    output_price number(10) default 0 not null,      -- 출고 가격
    trans_cost number(5) default 0 not null,         -- 배송비
    mileage number(6) default 0 not null,            -- 마일리지
    company varchar2(30),                            -- 제품 제조사
    status char(1) default '1' not null              -- 제품 재고 현황
);

-- products 테이블에 상품의 데이터를 저장해 보자.
insert into products
   values(1, '00010001', 'S 벽걸이 TV', '00001', 5000000, 8000000,
              0, 100000, '삼성', '1');
insert into products
   values(2, '00010001', 'D TV', '00002', 300000, 400000,
              0, 50000, '대우', '1');
insert into products
   values(3, '00010004', 'S 에어컨', '00001', 1000000, 1100000,
              5000, 100000, '삼성', '2');
insert into products
   values(4, '00010000', 'C 밥솥', '00003', 200000, 220000,
              5500, 0, '쿠쿠', '1');
insert into products
   values(5, '00010004', 'L 에어컨', '00003', 1200000, 1300000,
              0, 0, 'LG', '1');
insert into products
   values(6, '00020001', '남성 남방', '00002', 100000, 150000,
              2500, 0, '', '1');
insert into products
   values(7, '00020001', '여성 남방', '00002', 120000, 200000,
              0, 0, '', '3');
insert into products
   values(8, '00020002', '사각 팬티', '00002', 10000, 20000,
              0, 0, '보디가드', '1');
insert into products
   values(9, '00020003', '멜빵바지', '00002', 15000, 18000,
              0, 0, '', '1');
insert into products
   values(10, '00030001', '무따기 시리즈', '00001', 25000, 30000,
              2000, 0, '길벗', '1');
              
-- [문제1] member10 테이블에서 회원의 이름과
--         나이, 직업을 화면에 보여주세요.
select memname, age, job
from member10;

-- [문제2] products 테이블에서 제품명, 입고가, 출고가,
--         제조사를 화면에 보여주세요.
select products_name, input_price, output_price, company
from products;



-- literal 문자열

-- 컬럼명이나 별칭이 아닌 select 목록에 포함되는 문자, 표현식 숫자를 의미.

-- 날짜나 문자열인 경우 단일 인용 부호('')를 사용해야 한다.

-- 예)"KING 사원의 연봉은 60000 입니다."

select ename || ' 사원의 연봉은 ' || sal * 12 || ' 입니다.' as "사원의 연봉"
from emp;

-- member10 테이블의 리터럴 작업을 진행해 보자.

-- 예) "홍길동 회원의 직업은 학생입니다."
select memname || ' 회원의 직업은 ' || job || ' 입니다.' as "회원의 직업"
from member10;


-- ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
/* where 조건절

 모든 데이터를 조회하는 것이 아니라 사용자가 원하는 데이터만 조회할 경우에 사용.

 where 절은 from 테이블이름 뒤에 기술되어야 한다.

 형식) select 컬럼명1, 컬럼명2,.... 컬럼명n from 테이블이름 where 조건식;

 where 조건절은 자료를 검색할 때 사용되는 키워드.

 1) = : 조건이 같은가?

 2) < : 조건이 작은가?

 3) <= : 조건이 작거나 같은가?

 4) > : 조건이 큰가?

 5) >= : 조건이 크거나 같은가?

 6) != : 조건이 같지 않은가?

 7) <> : 조건이 같지 않은가? ==> != 과 같은 의미.

 8) between A and B : A와 B 사이에 있는가?

    주의) 작은 값을 앞에 기술하고 큰 값을 뒤에 기술해야 함.

 9) in(list) : list 값 중에 어느 하나와 일치하는가?

 10) not between A and B : A와 B 사이에 있지 않는가?

 11) not in(list) : list 값과 일치하지 않는가?
 
 */
 
 -- emp 테이블에서 담당업무가 'MANAGER'인 사원의
 -- 모든 정보를 화면에 보여주세요.
 select *
 from emp
 where job = 'MANAGER';
 
 -- emp 테이블에서 담당업무가 'SALESMAN' 인 사원의
 -- 모든 정보를 화면에 보여주세요.
 select *
 from emp
 where job = 'SALESMAN';
 
 -- emp 테이블에서 부서번호가 30번 부서에 해당하는
 -- 사원들의 전체 정보를 화면에 보여주세요.
 select *
 from emp
 where deptno = 30;
 
 -- [문제1] emp 테이블에서 담당업무가 'CLERK' 인 사원의
 --        사번, 이름, 담당업무, 급여를 화면에 보여주세요.
 
select empno, ename, job, sal 
from emp
where job = 'CLERK';


 -- [문제2] emp 테이블에서 1982년 1월 1일 이후에 입사한
 --         사원의 사번, 이름, 담당업무, 급여, 입사일자를 화면에 보여주세요.
select empno, ename, job, sal,hiredate
from emp
where hiredate >= '82/01/01';
 
 
 -- [문제3] emp 테이블에서 급여가 1300 ~ 1500 사이인 사원의
 --         이름과 담당업무, 급여, 부서번호를 화면에 보여주세요.
 --select ename, job, sal, deptno
 --from emp 
 --where sal >= 1300 and sal <=1500;
 select ename ,job, sal, deptno
 from emp
 where sal between 1300 and 1500;

 
 -- [문제4] emp 테이블에서 사번이 7902, 7788, 7566인 사원의
 --         사번, 이름, 담당업무를 화면에 보여주세요.
 --select empno, ename, job
 --from emp
 --where empno = 7902 or empno = 7788 or empno = 7566;
select empno, ename, job
from emp
where empno in (7902,7788,7566);
 
 
 
 -- [문제5] emp 테이블에서 보너스가 300이거나 500이거나 1400인
 --         사원의 모든 정보를 화면에 보여주세요.
 --select *
 -- from emp 
 -- where comm = 300 or comm = 500 or comm = 1400;
 select *
 from emp
 where comm in ( 300, 500, 1400);
 
 
 
 -- [문제6] member10 테이블에서 이름이 홍길동이면서 직업이 학생인
 --         회원의 모든 정보를 화면에 보여주세요.
 select *
 from member10
 where memname = '홍길동' and job = '학생';

 
 -- [문제7] products 테이블에서 제조사가 '삼성' 또는 '현대' 이면서
 --         입고가가 100만원 이하인 상품의 상품명과 입고가, 출고가를
 --         화면에 보여주세요.
 select products_name, input_price, output_price
 from products
 where company in ('삼성', '현대') and input_price <= 1000000;
 
 
 -- [문제8] emp 테이블에서 급여가 1100 이상이고, 담당업무가 'MANAGER'인
 --         사원의 사번, 이름, 담당업무, 급여를 화면에 보여주세요.
 select empno, ename, job, sal
 from emp
 where sal >= 1100 and job = 'MANAGER'; 


select * 
from emp;

select * 
from member10;


commit;