IT코딩공부!

#13 DB(DDL,DML,DCL)공부

history. 2023. 4. 6. 17:31

오늘의 노래!

 
I Don't Think That I Like Her
아티스트
Charlie Puth
앨범
CHARLIE
발매일
2022.10.07

현재 사용하고 있는 프로그램 : SQL Developer

 

※ SQL (Structured Query Language) : 구조적 질의 언어

- 데이터베이스에 접근 할 수 있는 데이터베이스 하부 언어

- DBMS(오라클)에서 사용하는 전용 질의 언어

- Java나 c언어 등보다 단순

- 대소문자 구분하지 않는다.(오라클에서 대문자 작성 권유)

- 데이터를 저장하고 유지보수(추가, 수정, 삭제)하고 검색하는 시스템
- 오라클 외에 MySQL, MssSQL, 등 다른 데이터베이스에서도 동일 사용가능

 

※ 데이터베이스 기본문법

(1) DDL(Data Defintion Language) : 데이터 정의어

- 데이터베이스 테이블, 유저 등을 생성하거나 재정의 및 제거

    (1) CREATE - 테이블 생성
    (2) ALTER  - 테이블 수정
    (3) DROP   - 테이블 삭제

 

(2) DML(Data Manipulation Language) : 데이터 조작어 (CRUD)

- 데이터를 삽입, 검색, 수정, 삭제

    (1) INSERT - 데이터 삽입(C : Create)
    (2) SELECT - 데이터 검색(R : Read)
    (3) UPDATE - 데이터 수정(U : Update)
    (4) DELETE - 데이터 삭제(D : Delete)

 

(3) DCL(Data Control Language) : 데이터 제어어

- 계정에 권한을 부여하거나 회수하는 기능

    (1) GRANT - 계정에 권한 부여
    (2) REVOKE - 부여한 권한 회수

 

(4) TCL(Transaction Control Language) : 트랜잭션 제어어

- DML문이 실행돼서 DBMS에 저장되거나 되돌리기 위해 실행하는 SQL문   

    (1) COMMIT - SQL문의 결과를 영구적으로 DB에 반영(저장)
    (2) ROLLBACK - SQL문의 결과를 취소, 데이터를 되돌릴 때 사용

 

// 테이블 생성 작업!!! >> 작업줄 지정할때 잘할 것

--[1] DDL : (1)CREATE (2)ALTER (3) DROP

ALTER TABLE PYSTU
MODIFY STU_ZO NUMBER;

 

CREATE TABLE PYSTU(
STU_NUM NUMBER,
STU_NAM NVARCHAR2(4),
STU_ZU NVARCHAR2(20),
STU_ARR NVARCHAR2(15),
STU_DAY DATE,
STU_CH NVARCHAR2(5),
STU_ZO NUMBER
);

PYSTU 테이블 생성 컬럼 주의!

 

-- ALTER를 사용해서 STU_AGE 컬럼 추가하시오(ADD) >> 컬럼 추가!

ALTER TABLE PYSTU
ADD STU_AGE NUMBER; 

INSERT로값 대입

--STU_NUM의 컬럼명을 STU_NUMBER로 바꾸시오 >> 컬러명을 바꾸기 위한 ALTER

ALTER TABLE PYSTU
RENAME COLUMN STU_NAM TO STU_NUMBER;

 

--STU_ADDR의 크기를 50에서 100으로 바꾸시오

ALTER TABLE PYSTU
MODIFY STU_ZU NVARCHAR2(100);

 

--STU_PHONE 컬럼을 삭제하시오 >> STU_ARR 라는 컬럼을 지웠다
ALTER TABLE PYSTU
DROP COLUMN STU_ARR;

 

// 전체 데이터 확인

DESC [테이블이름];

DESC PYSTU;

 

--[2] DML : (1)INSERT (2)SELECT (3)UPDATE (4)DELETE

1. 모든 COLUMN 데이터를 삽입할 때
    INSERT INTO [테이블이름] VALUES (컬럼1,컬럼2,컬럼N);
    
    PYSTU 테이블에 조원들의 정보를 삽입!!
    주의할점 : 테이블의 구조 확인!!

ex)

INSERT INTO PYSTU  VALUES (데이터1,데이터2,데이터N) 지정!!

SELECT * FROM PYSTU;

DELETE pystu;

 

2. 특징 CLOUMN 데이터를 삽입할 때
    INSERT INTO [테이블이름] (컬럼1,컬럼2,컬럼N)
    VALUES (컬럼1, 컬럼2, 컬럼N);

 

ex)

INSERT INTO PYSTU (STU_NUM, STU_NUMBER) 

VALUES (16, '손명오');

 

(2) SELECT : 데이터 조회(검색)
   
    1. 모든 COLUNM값 조회
    SELECT * FROM [테이블이름]   -- * :ALL(모든 컬럼)
    WHERE (CONDITION);              
    
    2. 특정 COLUNM값 조회
    SELECT 컬럼이름1, 컬럼이름2, 컬럼이름N FROM [테이블이름];

 

ex)

SELECT STU_NUM,STU_NUMBER FROM pystu;

 

 

--ORDER BY (정렬)

--오름차순 ASC  : 낮은(빠른) 데이터가 위로 올라오도록 정렬 >> 기본값 (생략가능)
--내림차순 DESC : 높은(뒤에 있는) 데이터가 위로 올라오도록 정렬

 

ex)

SELECT STU_NUM AS 번호, STU_NUMBER AS 이름,STU_ZU AS 주소,STU_DAY AS 생년월일,STU_CH AS 취미,STU_ZO AS 조, STU_AGE AS 나이 
FROM pystu; 
SELECT * FROM pystu
ORDER BY STU_NUMBER ASC;

 

--WHERE 절 : 조건을 통해 해당하는 데이터 검색

ex)
SELECT *
FROM pystu
WHERE STU_NUM = 15;

 

--데이터 삭제

    1. 모든 데이터 삭제
    DELETE FROM [테이블 이름];
    
    2. 특정 데이터 삭제
    DELETE FROM [테이블 이름];
    WHERE (CONDITION);

 

 

ex)

DELETE FROM pystu
WHERE STU_NUM = 16;

 

   1. 모든 데이터 수정
    UPDATE [테이블이름]
    SET [컬럼1이름] = [수정할 컬럼1데이타], [컬럼N이름] = [수정할 컬럼데이타];
    
    2. 특정 데이터 수정

ex)

UPDATE pystu
SET STU_ZO = 2
WHERE STU_NUMBER = '손명오';

 

// 롤백과 컴밋 사용 잘하기!!

ROLLBACK;
COMMIT;

 

-- 테이블 조 검색하기
SELECT STU_ZO FROM PYSTU;

 

--중복 데이터 제거: DISTINCT(컬럼 앞에 작성)
SELECT DISTINCT STU_ZO FROM PYSTU;

--취미검색
SELECT STU_CH FROM PYSTU;

 

--중복 데이터 제거
SELECT DISTINCT STU_CH FROM PYSTU;

 

--LIKE, 와일드카드 
-- (%) : 길이에 상관없이 (문자가 없는 경우 포함) 모든 문자 데이터를 의미
-- (_) : 어떤값이든 상관없이 한개의 문자 데이터를 의미

 

ex)SELECT * FROM PYSTU WHERE STU_NUMBER LIKE '김%';

성이 김씨인 사람 출력

 

-- 이름 마지막 글자 '호'인 사람 찾기
SELECT * FROM PYSTU WHERE STU_NUMBER LIKE '%호';

 

-- 가운데 글자가'성'인 사람 찾기
SELECT * FROM PYSTU WHERE STU_NUMBER LIKE  '_성%';

 

-- 두가지 조건 이상을 검색하기
-- (1) AND : 모든 조건식이 만족할때, 하나라도 거짓이면 FALSE
-- 1조 이면서 취미가 게임인 사람 검색
SELECT * FROM PYSTU WHERE STU_ZO = 1 AND STU_CH = '게임';

 

-- (2) OR : 조건식중 하나라도 만족하면 TRUE, 모두 거짓이어야 FALSE
SELECT * FROM PYSTU WHERE STU_ZO = 1 OR STU_CH = '게임';

 

--1조이거나 2조이거나 3조인 사람 검색
SELECT * FROM PYSTU WHERE STU_ZO = 1 OR STU_ZO =2 OR STU_ZO = 3;

 

-- IN 연산자 : 같은 컬럼에서 여러가지 조건 검색

   SELECT *
    FROM[테이블이름]
    WHERE[컬럼이름] IN (데이터1, 데이터2 ...);

ex)

--1,2,3조 출력
SELECT * FROM pystu WHERE STU_ZO IN(1,2,3)

--1,2,3조 빼고 출력(4조검색)
SELECT * FROM pystu WHERE STU_ZO NOT IN(1,2,3);

--나이 20대 중반(24,25,26)인 사람을 검색
SELECT * FROM pystu WHERE STU_AGE IN(24,25,26);

 

--BETWEEN A AND B : A 부터 B 사이의 데이터를 검색

    SELECT *
    FROM[테이블이름]
    WHERE[컬럼이름] BETWEEN A(최솟값) AND B(최댓값);

ex) 

SELECT * FROM PYSTU WHERE STU_AGE BETWEEN 24 AND 26;

 

--산술연산
--학생번호가 10번 이상인 학생 검색
SELECT * FROM PYSTU WHERE STU_NUM >10;

 

--IS NULL
SELECT * FROM PYSTU WHERE STU_ADDR IS NULL;
SELECT * FROM PYSTU WHERE STU_ADDR IS NOT NULL;