Computer Science/Database, SQL

[HUFS/데이터베이스] #10 SQL 조작문

성중 2021. 10. 13. 18:39

SQLite는 한 문장이 하나의 Transaction(작업 단위)로 처리됨 (begin -> commit or rollback)

 

begin 후에 commit 하지 않고 rollback을 하면 begin 상태로 돌아감

데이터 검색

SELECT - FROM - WHERE 을 통해 가장 기초적인 검색이 가능하다

 

STUDENT에서 Dept가 ‘컴퓨터’인 Sname과 Sno 값들을 SELECT

SQL의 테이블과 relation의 차이?

추상적인 릴레이션은 SQL의 테이블로 구체화되어 보여지는데,,

한 테이블 내에 똑같은 레코드(행) 중복이 가능하고 따라서 기본키가 반드시 필요하진 않다

~ 이론상 SQL의 테이블은 튜플의 집합이 아니라 중복을 허용하는 다중 집합(multiset)인 셈이다

테이블의 SELECT 결과가 또 다시 테이블이 되는 폐쇄 시스템(closed system)이다!

 

SELECT문의 일반적인 형식
DISTINCT로 중복 값 제거, *로 전체 검색이 가능하다
ORDER BY ~ DESC는 결과 알파벳 역순, ASC는 순서대로 배열
AS 로 결과 column의 이름을 바꿔서 출력이 가능하다 (산술식 추가도 가능)
튜플 변수를 활용해 SELECT 조건으로 조인할 수 있다
혹은 이렇게 FROM절로 조인해주자(NATURAL JOIN은 해당 컬럼을 합쳐서 보여준다)
그 외에도 기본 제공 집계 함수를 활용한 검색이 가능하다

  • COUNT: 해당 테이블의 중복을 허용한 튜플의 수를 반환한다 (distinct 추가 가능)
  • AVG: 테이블의 해당 column의 값들의 평균을 반환한다 (WHERE로 추가 조건 가능)
  • MAX, MIN, SUM: 같은 원리로 최대, 최소, 합계를 반환한다

 

GROUP BY와 HAVING으로 column 그룹별 연산 출력, 그 그룹에 추가 조건을 넣을 수 있다

부속 질의문(subquery = nested query)을 사용해 검색해보자

 

SELECT된 테이블을 기준으로 SELECT문을 수행하는 것이다

  • IN: 해당 조건을 만족하는 테이블에서
  • NOT IN: 해당 조건을 만족하지 않는 테이블에서 (IN의 여집합)
  • =: column이 해당 조건과 정확히 일치하는 경우에 (column 하나만)
  • ALL(-> SOME): 해당 조건을 만족하는 테이블 기준으로 조건을 거는 경우 (SQLite 미지원)

 

LIKE를 사용해 부분적으로 맞는 문자열을 검색할 수 있다

 

% 길이 상관 없음 / - 문자 하나

NULL: 참도 거짓도 아닌 미정(unknown)

 

U -> unknown
IS (NOT) NULL 을 활용해 검색! (‘=’ 사용 불가)

EXISTS를 활용해 다른 테이블에서 조건에 맞는 값이 하나라도 있다면 검색한다

 

(NOT) EXISTS: 서브쿼리가 공집합인지 아닌지..

UNION을 활용해 각 검색의 결과의 합집합을 볼 수 있다

 

중복값은 제거된다

데이터 갱신

UPDATE – SET - WHERE로 데이터를 변경/갱신할 수 있다

 

WHERE 조건을 안붙이면 전부 변경된다
마찬가지로 서브쿼리를 활용한 변경도 가능하다

INSERT – INTO - VALUES로 레코드를 직접 삽입할 수 있다

 

순서를 맞추거나 column을 직접 명시하자
역시나 서브쿼리를 활용한 삽입이 가능하다

DELETE-FROM-WHERE로 데이터의 삭제가 가능하다

 

테이블 자체를 삭제하는 DROP과 달리 테이블 내부의 데이터를 삭제한다!
역시 서브쿼리를 활용한 삭제가 가능