DB_01

김민영·2024년 2월 28일

DB

목록 보기
2/6
post-thumbnail

-- sql developer 에서 한 줄 주석문

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

작성 후 Ctrl + Enter 누르면 작성문 실행 됨

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

1. 테이블

  • 관계형 데이터베이스는 기본적으로 데이터를 2차원 형태의 표로 저장하고 관리
  • 이러한 표 형태의 데이터 저장 공간을 테이블(table)이라고 함
  • 테이블은 2차원 형태이므로 가로줄과 세로줄로 구성이 되어 있음
    • 가로줄 : 행(row)
    • 세로줄 : 열(column)

2. 행

  • 행은 저장하려는 하나의 객체를 구성하는 값
  • 예를 든다면 학생 한 사람에 대한 정보를 저장한 것

3. 열

  • 저장하는 데이터를 대표하는 이름과 공통 특성을 정의한 것
  • 열은 저장 정보의 종류(자료형)와 자료형의 저장 가능한 최대 크기, 중복 여부를 설정

키워드

1. DDL(Data Define Language : 데이터 정의 언어)
- CREATE : 데이터베이스 또는 테이블을 생성하는 명령어
- ALTER : 테이블을 수정하는 명령어
- DROP : 데이터베이스 또는 테이블을 삭제하는 명령어
- TRUNCATE : 테이블을 초기화하는 명령어

2. DML(Data Manipulation Language : 데이터 조작 언어)
==> 데이터베이스에서 가장 많이 사용하는 명령어
- SELECT : 데이터를 검색하는 명령어
- INSERT : 데이터를 추가하는 명령어
- UPDATE : 데이터를 수정하는 명령어
- DELETE : 데이터를 삭제하는 명령어

3. DCL(Data Control Language : 데이터 제어 언어)
- GRANT : 특정 데이터베이스 사용자에게 작업의 특정 수행 권한을 부여하는 명령어
- REVOKE : 특정 데이터베이스 사용자에게 작업의 특정 수행 권한을 삭제하는 명령어
- COMMIT : 트랜잭션 작업을 완료하는 명령어
- ROLLBACK : 트랜잭션 작업을 취소하거나, 이전 상태로 복구하는 역할을 하는 명령어


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

1. number(n, n1): 숫자 자료형(정수, 실수)

  • n : 전체 자릿수
  • n1 : 소숫점 자릿수
  • n - n1 : 정수 자릿수
    예) number(7,2) : 전체 자릿수는 7자리이고, 정수는 5자리, 소숫점 자릿수는 2자리

2. char(n) : 문자열 n개가 저장되는 자료형 ==> 고정 자료형

3. varchar(n) : 문자열 n개가 저장되는 자료형 ==> 가변 자료형
※ 현재 오라클에서는 사용하지 않는 자료형

4. varchar2(n) : 문자열 n개가 저장되는 자료형 ==> 가변 자료형
※ 한글은 무조건 한 글자당 2바이트씩 사용됨

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

  • 무결성(Integrity) : 데이터베이스에 저장된 값과 그것이 표현하는 현실
    세계의 실제 값이 일치하는 정확성을 의미함

                  
  • 무결성 제약조건 : 데이터베이스에 저장된 데이터의 정확성을 보장하기 위해서 정확하지 않은 데이터가 데이터 베이스 내에 저장되는 것을 방지하기 위한 조건

    • 데이터베이스 내에서 사용되는 무결성 제약조선의 종류
      1. unique 제약 조건
      ==> 중복이 되면 안 되는 제약 조건

      2. not null 제약 조건
      ==> 공백(null)을 허용하지 않는 제약 조건

      3. check 제약 조건
      ==> 특정한 값이 아닌 데이터가 들어오지 못하게 하는 제약 조건

      4. 기본키(primary key) 제약 조건
      ==> nuique + not null 제약 조건
      ==> 기본 키는 해당 테이블을 데표하는 컬럼으로써의 역할을 수행하며, 다른 테블에서 외래키들이 참조할 수 있는 키로써의 자격을 가짐

      5. 외래 키(foreign key) 제약 조건
      ==> 외래키는 다른 테이블의 기본 키(primary key)를 참조하는 컬럼의 집합임 여기서의 외래 키 값은 참조하고 있는 테이블의 기본 키에 없는 내용을 참조할 수 없음 이를 참조 무결성(Referential Integrity)이라고 함


학생 테이블을 만들어 보자

구성 요소(컬럼 - 속성)
==> 학번, 이름, 학과, 연락처, 주소, 재학여부, 등록일(입학일) 등등

테이블을 만드는 형식
형식)

create table 테이블명(
                학번 자료형(크기) [제약조건 - 생략 가능], 
                이름 자료형(크기) [제약조건],
                학과 자료형(크기) [제약조건],
                연락처 자료형(크기) [제약조건],
                주소 자료형(크기) [제약조건],
                재학여부 자료형(크기) [제약조건],
                등록일 자료형(크기) [제약조건]
                -->  이름은 한글, 영어 다 가능하며 제약조건 생략시 제약조건 없음
            );

create문 작성

create table student(
    hakbun VARCHAR2(10) PRIMARY KEY,
    name VARCHAR2(30) not null,
    major VARCHAR2(40),
    phone VARCHAR2(20) not null,
    addr VARCHAR2(200),
    status VARCHAR2(1),
    regdate date not null, -- 컬럼 상에서의 제약조건
    CONSTRAINT status_chk CHECK(status in('y','n')) -- 테이블 상에서의 제약조건
    --                     status 컬럼에는 y나 n만 들어갈 수 있음
); -- Ctrl + Enter 누르면 실행

student 테이블에 들어가면 컬럼들을 확인할 수 있음


student 테이블에 데이터(학생 정보)를 추가해 보자

형식1)

insert into 테이블명 values(컬럼1 데이터,컬럼2 데이터,...마지막 컬럼 데이터); 

==> 모든 컬럼에 데이터를 넣어야 함

INSERT INTO student VALUES('2024_001','홍길동','경제학과','010-1111-1234','서울','y',sysdate);

형식 2)

insert into 테이블명(not null 제약 조건 컬럼명을 기재)
        VALUES();   

==> 제약 조건 컬럼명과 값은 1대1로 매칭이 되어야 함 수가 다르면 오류 뜸

INSERT into student(hakbun, name, phone, regdate)
            VALUES('2024_002','세종대왕','010-2222-2345',sysdate); 
                    -- 1대1로 매칭이 되어야 함 수가 다르면 오류 뜸

commit --> insert문을 작성했더라도 COMMIT이 없으면 다시 해야 됨

COMMIT; 


형식1로 삽입 시 만약 check로 설정한 y,n 외의 문자가 들어가면 오류발생


정확한 내용으로 삽입을 해 주면 Student 테이블 데이터에 맞는 값이 들어가짐


null 값을 허용했기에 형식2로 삽입해주느 2번에는 null이 들어가도 됨

insert into student VALUES('2024_003','이순신','체육학과','010-3333-3456','경기도','y',sysdate);
Insert into student VALUES('2024_004','유관순','역사학과','010-4444-4567','전라도','n',sysdate);
insert INTO student (hakbun,name,phone,regdate)
            VALUES('2024_005','심사임당','010-5555-5678',sysdate);
commit;


  • 컬럼 수정


테이블의 컬럼을 수정하는 방법(컬럼의 전체적인 내용 수정)
형식) alter table 테이블명 modify(컬럼명 자료형(크기));

ALTER TABLE student MODIFY(age VARCHAR2(3));


  • 컬럼명 변경


테이블의 컬럼명을 변경해야 하는 경우
형식) alter table 테이블명 rename column 기존컬럼명 to 변경할컬럼명;

ALTER TABLE student RENAME COLUMN name to IRUM;


  • 컬럼 삭제


-- 테이블의 컬럼을 삭제해야 하는 경우
형식) alter table 테이블명 drop column 컬럼명;

ALTER TABLE student DROP COLUMN age;

모든 명령은 ctrl + Enter을 통해 수행하며 출력된 스크립트를 확인하고 student 테이블에서 변경된 내용들을 확인할 수 있음


  • 데이터 수정

데이터를 수정하는 방법 (primary로 된 값은 수정이 안 됨)
형식) update 테이블명 set 수정할 컬럼명 = 값, 수정할 컬럼명 = 값
where 기본키컬럼명 = 값;

UPDATE student SET major = '국문학과', addr = '서울시 중구', status='y'
    WHERE hakbun = '2024_002';

UPDATE student SET addr = '서울시 구로구'
    WHERE hakbun = '2024_001';


null 값이 아닌 곳도 변경 가능


  • 데이터 삭제


테이블에서 데이터를 삭제하는 방법
형식) delete from 테이블이름 where 기본컬럼명 = 값;

DELETE  from student WHERE hakbun = '2024_004';


데이터를 검색하는 명령어
student 테이블에 있는 모든 데이터를 화면에 보여주세요
형식) select * from 테이블명;

  • 별(*)은 모든 데이터라는 의미
SELECT * FROM student;

보고 싶은 컬럼만 보이게 하고 싶은 경우
형식) select 컬럼명, 컬럼명2, 컬럼명3,... from 테이블명;

SELECT hakbun, irum FROM student;


![](https://velog.velcdn.com/images/kmy02/post/bb12807d-bed5-4108-aa38-244009d02bb2/image.png) 왼쪽 commit, 오른쪽 rollback **잘못 삭제하거나 변경했을 때 commit을 누르지 말고 rollback을 눌러 뒤로 되돌린다**
  • 트랜잭션을 완료하는 명령어
COMMIT;
  • 트랜잭션 작업을 취소하거나, 이전 상태로 복구하는 역할을 하는 명령어
ROLLBACK;


[문제1] emp 테이블에서 empno, ename, job, deptno 컬럼을 화면에 보여주세요

SELECT  empno, ename, job, deptno FROM emp;

[문제2] emp 테이블에서 이름, 입사일, 급여를 화면에 보여주세요

SELECT ENAME, HIREDATE, SAL FROM EMP;

[문제3] emp 테이블에서 사번, 이름, 담장업무, 보너스를 화면에 보여주세요

SELECT EMPNO, ENAME, JOB, COMM FROM EMP;

[문제4] emp 테이블에서 사번, 이름, 급여, 보너스, 급여 + 보너스 결과를 화면에 보여주세요

SELECT EMPNO, ENAME, SAL, COMM, SAL+COMM FROM EMP;


둘 다 값이 있는 경우 계산이 되지만 NULL을 갖고 있는 경우 null 값이 우선순위가 높아서 null 값이 나오게 됨

--> null 값을 가지는 컬럼은 다른 컬럼과 연산을 하게 되면 모두 null 값으로 처리가 되는 문제 발생

NVL() 함수

null 값을 특정한 값으로 변경시켜 주는 함수

  • 모든 자료형에 적용이 가능함
  • nvl 함수를 사용할 때에는 전환되는 값의 자료형을 일치시켜 주어야 함

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

SELECT EMPNO, ENAME, SAL, COMM, SAL+NVL(COMM,0) FROM EMP;
  • COMM의 NULL 값을 0으로 바꿔 계산

NVL2() 함수

자바에서의 3항연산자와 비슷한 함수
형식) NVL2(컬럼명,EXPR1, EXPR2)
-- ==> 컬럼에 들어 있는 값이 null이 아니면 expr1 값을 반환, null이면 expr2 값을 반환

SELECT EMPNO, ENAME, SAL, COMM, SAL + NVL2(COMM, COMM, 0) FROM EMP;

-- AS 키워드 : 컬럼의 제목(TITLE)의 이름을 변경시키는 키워드, 별칭 또는 별명이라고도 하며 사용 시에는 컬럼명 바로 뒤에 사용을 함
-- 컬럼명과 별칭 사이에 as라는 키워드를 넣어주면 되며 보통 별칭은 ""(쌍따움표) 안에 작성

SELECT EMPNO, ENAME, SAL, COMM, SAL + NVL2(COMM, COMM, 0) as "급여 + 보너스" FROM EMP;

as 라는 키워드를 생략해도 됨

SELECT EMPNO, ENAME, SAL, COMM, SAL + NVL2(COMM, COMM, 0) "급여 + 보너스" FROM EMP;

[문제5] emp 테이블에서 사번, 이름, 급여, 급여의 10% 인상액을 화면에 보여주세요

SELECT EMPNO, ENAME, SAL, (SAL+(SAL*0.1)) AS "10%인상급여" FROM EMP; 

SELECT EMPNO, ENAME, SAL, SAL*1.1 "10%인상급여" FROM EMP; 


  • EMP 테이블에서 각 사원의 담당업무를 화면에 보여주세요
SELECT JOB FROM EMP;

  • emp 테이블에서 각 사원의 관리자(mgr)를 화면에 보여주세요
SELECT mgr FROM emp;

distinct 키워드

distinct 키워드 : 중복을 제거해 주는 명령어(키워드)
- 주로 하나의 컬럼에서 중복된 값을 제거하고 보여줄 때 사용
- distinct 키워드는 항상 select 키워드 다음에 기술
- distinct 키워드 뒤에 나오는 컬럼들은 모두 distinct의 영향을 받음
- distinct 키워드 뒤에 여러 개의 칼럼이 기술이 되면해당 컬럼들은 중복이 되지 않게 나타난다

  • emp 테이블에서 각 사원의 담당엄무를 중복이 되지 않게 화면에 보여주세요
select DISTINCT job from emp;

  • emp 테이블에서 각 사원의 관리자를 중복이 되지 않게 화면에 보여주세요
SELECT DISTINCT mgr FROM emp;

  • emp 테이블에서 담당업무와 관리자, 부서번호를 화면에 보여주세요
SELECT DISTINCT job, mgr, deptno from emp;

profile
나다

0개의 댓글