#13 DB(DDL,DML,DCL)공부
오늘의 노래!
- 아티스트
- 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
);

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

--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;