데이터베이스 5강을 보며 배운내용
들어가기전
4강에서 데이터베이스를 정의하는
데이터 정의 언어를 알아봤다
이번 강의에서는 SQL을 이용해서
데이터 CRUD를 알아볼 듯 싶다
정리(TL;DR)
DB조작한다고 SQL 어렵게만 생각했는데
직접 보니까 꽤 직관적인 녀석이다
아직 이론만 배워서 그럴지 몰라도 현재까지 GOOD
레코드 삽입
INSERT INTO 테이블이름(컬럼1, 컬럼2) VALUES 값1, 값2
레코드 수정
UPDATE 테이블이름 SET 컬럼 = 값 [선택]WHERE 컬럼제목 = 값
레코드 삭제
DELETE FROM 테이블이름 [선택]WHERE 컬럼제목 = 값
레코드 전체 검색SELECT * FROM 테이블이름
레코드 부분 컬럼 검색SELECT 찾을컬럼1, 찾을컬럼2 FROM 테이블이름 [선택]ORDEB BY [선택]WHERE 조건 ...
데이터 조작 언어
DML: Data Manipulation Language
데이터 삽입, 수정, 삭제
정의된 테이블에 레코드 삽입, 수정, 삭제, 검색에 사용되는 명령어 집합
종류
- INSERT: 테이블 스키마에 레코드 삽입
- UPDATE: 특정 레코드 컬럼값 수정
- DELETE: 특정 레코드 삭제
- SELECT: 테이블에서 레코드 검색
INSERT
테이블에 새로운 레코드 삽입
모든 속성(컬럼) or 부분 속성에 속성값 삽입
INSERT INTO 테이블이름
VALUES(값1, 값2, 값3)
선택된 컬럼에 값 넣을시
INSERT INTO 테이블이름(컬럼1, 컬럼2)
VALUES(값1, 값2)
UPDATE
저장된 레코드의 특정 값 수정
UPDATE 테이블이름
SET 컬럼1 = 값1
WHERE조건[선택]
여러개 한번에 고칠 수 있다
UPDATE 테이블이름
SET [컬럼1=값1, 컬럼2=값2]
WHERE조건[선택]
수식도 넣을 수 있다
UPDATE 테이블이름
SET 컬럼1=수식1
WHERE조건[선택]
예시
학과이름(컬럼)이 '농학과'인 곳의 졸업학점 변경
UPDATE
SET 졸업학점=140
WHERE 학과이름='농학과'
잔액이 50,0000원 이상이 학생에 이자 2% 지급
UPDATE 학과
SET 잔액=잔액*1.02
WHERE 잔액>=500000
DELETE
조건에 일치하는 레코드 집합을 테이블에서 삭제
DELETE FROM 테이블이름
WHERE조건[선택]
WHERE 조건문이 없으면 이 테이블 레코드 전체 삭제된다
예시) 소속학과 '컴퓨터과학과'인 교수 레코드 삭제
DELETE FROM 교수
WHERE 소속학과='컴퓨터과학과'
삭제가 안되면 기본키가 참조되고 있을 경우가 대다수
예시) 모든 강의 레코드 삭제
DELETE FROM 강의
실제 운영중일때는 이렇게 레코드 전체 삭제 명령어는 오지 않을 것 => 개발자 실수, 해킹을 의심
그래서 SAFE UPDATES 모드가 기본값으로 켜져있다
SELECT
데이터 검색
레코드 가져오기 위한 명령어
모든 연산 명령어 가지고 있다
(관계 대수 셀렉션, 프로젝션, 조인, 카티션 프로덕트 등)
SELECT 각 절의 기능
- SELECT[필수]
결과에 포함되는 컬럼 지정
- FROM
조건을 적용할 테이블 지정
- ON/WHERE
조인 조건/검색한 레코드 조건 지정
- GROUP BY
레코드 그룹화 할 때 그룹 조건 지정
- HAVING
그룹에 대한 조건 지정
- ORDER BY
정렬 기준 조건
단순 질의문
전체 테이블 검색
SELECT *
FROM 테이블
부분 컬럼 검색
SELECT 컬럼1, 컬럼2, 컬럼3
FROM 테이블
예시) 교수테이블에서 '소속학과'컬럼 선택해서 출력
SELECT 소속학과
FROM 교수
예시) 교수테이블에서 '소속학과'컬럼 선택해서 값 중복 없이 출력
SELECT DISTINCT 소속학과
FROM 교수
예시) 교수테이블의 모든 컬럼 가져오기
SELECT *
FROM 교수
조건 질의문
조건 만족하는 레코드만 검색
조건 종류
- 산술 연산자: +, -, *, /, % 등
- 비교 연산자: =, <, <=, >=, !=, <> 등
- 논리 연산자: &&, ||, ! 등
예시) 이수 구분이 '전공필수'인 과목의 과목명, 학점, 선수과목 출력
SELECT 과목명, 학점, 선수과목
FROM 과목
WHERE 이수구분='전공필수'
예시) 남학생중 2000년 이전에 태어난 학생의 학생번호, 학생이름, 전화번호, 나이 출력
SELECT 학생번호, 학생이름, 전화번호, 나이
FROM 학생
WHERE 성별='남' AND 생년월일 < '2000-1-1'
데이터 정렬
ORDER BY절 사용
오름차순: ASC
내림차순: DESC
예시) 학생 계좌정보를 '잔액'기준 오름차순
SELECT *
FROM 계좌
ORDER BY 잔액 ASC
특수 연산자
관계형 DBMS에서만 사용되서 특수 연산자라고 부른다
BETWEEN 예시) 잔액이 20만원이상 40만원이하 계좌의 계좌번호, 잔액, 학생번호 출력
SELECT 계좌번호, 잔액, 학생번호
FROM 학생
WHERE 잔액 BETWEEN 200000 AND 400000
IN 예시) 소속학과가 '컴퓨터과학과', '경영학과'인 교수의 교수이름, 직위, 소속학과 출력
SELECT 교수이름, 직위, 소속학과
FROM 교수
WHERE 소속학과 IN('컴퓨터과학과', '경영학과')
LIKE 예시) 과목 코드가 'COM'으로 시작하는 과목의 과목코드, 과목명 출력
SELECT 과목코드, 과목명
FROM 과목
WHERE 과목코드 LIKE'COM%'
LIKE는 부분일치, %의 방향에 따라 접두어, 접미어 구분 가능
SQL 함수
위의 DDL, DML을 통해서는 꽤 간단한 조작만 가능한다
SQL 함수를 사용하면 더 복잡한 것들을 조작 가능할 듯
함수는 정리잘된 SQL cheatsheet 같은 거 찾아서 보자
참고 링크
SQL 연습은 여기서 해보자
프로그래머스 SQL 고득점 Kit
=> https://programmers.co.kr/learn/challenges?tab=sql_practice_kit
'Computer Science > Database :: 데이터베이스' 카테고리의 다른 글
데이터베이스 7강 :: 함수적 종속성, 정규화 (0) | 2022.03.16 |
---|---|
데이터베이스 6강 :: 그룹질의, 중첩질의, 조인, 뷰 (0) | 2022.03.07 |
데이터베이스 4강 :: SQL, 데이터 정의 언어 (0) | 2022.03.03 |
데이터베이스 3강 :: 릴레이션, 키, ERD 변환, 관계 연산 (0) | 2022.03.03 |
데이터베이스 2강 :: 데이터베이스 모델링 왜? 개체집합, 관계집합 (0) | 2022.02.28 |