DataBase/Concepts

[DataBase] 03. SQL(Structured Query Language)(4)

lumana 2024. 10. 11. 00:10
SQL(Structured Query Language)(4)

SQL(Structured Query Language)(4)

#Database/Concepts/Temp



(10/10) 굉장히 공들여서 작성한 글이여서 원래 동아리 스터디 용도로 일부 공개 했었는데, 더 많은 분들이 봤으면 하는 마음에 오픈!


게시글 길이 제한으로 글을 분리해서 업로드하는 점 양해 바랍니다



데이터베이스 수정 (Modification of the Database)

위에서는 데이터베이스 릴레이션에서 원하는 데이터를 선택하는 것에 대해 배웠다. 지금부터 데이터베이스에서 원하는 데이터를 수정하는 방법에 대해 배워보자


  • 튜플 삭제 (Deletion): 주어진 relation에서 튜플을 삭제합니다.
  • 튜플 삽입 (Insertion): 주어진 relation에 새로운 튜플을 삽입합니다.
  • 값 업데이트 (Updating): 주어진 relation의 일부 튜플의 값을 업데이트합니다.

삭제 (Deletion)


Delete statement

  • SQL에서 DELETE 구문은 테이블에서 기존 레코드를 삭제하는 데 사용됩니다.
  • WHERE 절에 명시한 조건에 따라 단일 레코드 또는 여러 레코드를 삭제할 수 있습니다.

구문 (Syntax)

주의: WHERE 절에 제공한 조건에 따라 단일 또는 여러 레코드를 삭제할 수 있습니다. WHERE 절을 생략하면 모든 레코드가 삭제되고 테이블이 비게 됩니다.


Delete 예시


예제 1: NAME이 "Ram"인 행을 삭제

DELETE FROM Student WHERE NAME = 'Ram';


예제 2: 나이가 20인 행을 삭제

DELETE FROM Student WHERE Age = 20;

  • Age = 20인 레코드가 2개 있는데, 2개 모두 삭제된다


예제 3: 모든 레코드 삭제 (Delete all records)
모든 레코드를 삭제하는 방법에는 두 가지가 존재한다.
방법 1)

DELETE FROM Student;

방법 2)

DELETE * FROM Student;

  • Output: 테이블의 모든 레코드가 삭제되며, 더 이상 표시할 레코드가 없다.

삽입 (Insertion)

  • 삽입 구문 (Insert into statement)
    • SQL의 INSERT INTO 구문은 테이블에 새로운 행(레코드)을 삽입하는 데 사용됩니다.
    • 삽입 구문에는 두 가지 방법이 있다.

방법 1) 값만 삽입하는 방법

INSERT INTO table_name 
VALUES (value1, value2, value3, ...);

방법 2) 열(Attribute) 이름과 값을 모두 삽입하는 방법

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

Insertion 예시


예제 1: 값만 삽입 (Inserting only values)

INSERT INTO Student
VALUES('5', 'HARSH', 'WEST BENGAL', 'XXXXXXXXX', '19');


예제 2: 지정된 열에만 값 삽입 (Inserting values in only specified columns)

INSERT INTO Student(ROLL_NO, NAME, Age)
VALUES('5', 'PRATIK', '19');

주의: 제공되지 않은 값의 열은 null로 채워진다. 이는 해당 열의 기본값이다.


INSERT INTO의 응용 : SELECT + INSERT INTO

INSERT INTO 구문과 SELECT 구문을 사용하여 한 테이블의 행을 SELECT 한 후 복사하여 다른 테이블에 삽입할 수 있다.


이 외에도 SELECT와 INSERT INTO를 사용하는 다양한 방법이 존재한다.


INSERT INTO와 SELECT 구문을 사용하는 다양한 방법:

  • 테이블의 모든 열 삽입 (Inserting all columns of a table)
  • 특정 열 삽입 (Inserting specific columns of a table)
  • 특정 행 복사 (Copying specific rows from a table)

테이블의 모든 열 삽입 (Inserting all columns of a table)

  • 테이블의 모든 데이터를 복사하여 다른 테이블에 삽입할 수 있습니다.
  • 우리는 SELECT 구문을 사용하여 한 테이블의 데이터를 복사하고 INSERT INTO 구문을 사용하여 다른 테이블에 삽입합니다.

구문

INSERT INTO first_table SELECT * FROM second_table;

테이블의 특정 열 삽입 (Inserting specific columns of a table)

  • 복사하고자 하는 특정 열만 다른 테이블에 삽입할 수 있습니다.
  • 우리는 SELECT 구문을 사용하여 두 번째 테이블의 선택된 열만 복사하고 INSERT INTO 구문을 사용하여 첫 번째 테이블에 삽입합니다.

구문

INSERT INTO first_table(names_of_columns1) 
SELECT names_of_columns2 
FROM second_table;


테이블의 특정 행 복사 (Copying specific rows from a table)

  • WHERE 절을 사용하여 특정 행을 선택하여 다른 테이블에 삽입할 수 있습니다.
  • 특정 행을 선택하기 위해 WHERE 절에 적절한 조건을 제공해야 합니다.

구문

INSERT INTO table1 
SELECT * 
FROM table2 
WHERE condition;

예시: StudentB 테이블의 모든 데이터를 StudentA에 삽입

INSERT INTO StudentA SELECT * FROM StudentB;



예시: StudentB 테이블의 ROLL_NO, NAME, Age 열의 데이터를 StudentA 테이블에 삽입

INSERT INTO StudentA(ROLL_NO, NAME, Age) 
SELECT ROLL_NO, NAME, Age 
FROM StudentB;


  • StudentA 테이블의 나머지 열은 기본값인 null로 채워집니다.

예시 : StudentB 테이블에서 나이가 18인 첫 번째 행만 선택하여 StudentA 테이블에 삽입

INSERT INTO StudentA 
SELECT * 
FROM StudentB 
WHERE Age = 18;


업데이트 (Update)


업데이트 구문 (Update statement)

  • SQL의 UPDATE 구문은 데이터베이스의 기존 테이블 데이터를 업데이트하는 데 사용됩니다.
  • 요구 사항에 따라 단일 열 또는 여러 열을 UPDATE 구문을 사용하여 업데이트할 수 있습니다.

구문 (Syntax)

UPDATE table_name
SET column1 = value1, column2 = value2,...
WHERE condition;

주의: 위의 쿼리에서 SET 구문은 특정 열에 새로운 값을 설정하는 데 사용되고, WHERE 절은 열을 업데이트할 행을 선택하는 데 사용됩니다.

  • WHERE 절을 사용하지 않으면 모든 행의 열이 업데이트됩니다.
  • 따라서 WHERE 절은 특정 행을 선택하는 데 사용됩니다.

업데이트 구문 예제


예제: 나이가 20인 모든 행에서 NAME 열의 값을 "JONGWOO"로 설정

UPDATE Student 
SET NAME = 'JONGWOO' 
WHERE Age = 20;

결과


예제: ROLL_NO가 1인 행에서 NAME 열을 'JISU'로, ADDRESS 열을 'NewYork'으로 설정

UPDATE Student 
SET NAME = 'JISU', ADDRESS = 'NewYork' 
WHERE ROLL_NO = 1;

결과


  • 여러 열(Attribute) 값이 변경되었다.

예시: 모든 학생의 이름을 JIHYUCK으로 설정

UPDATE Student 
SET NAME = 'JIHYUCK';

  • 업데이트 쿼리에서 WHERE 절을 생략하면 모든 행이 업데이트된다.

정리

이번 챕터에서는 데이터베이스에 접근하는 표준 언어인 SQL에 대해 다뤘다.
SQL은 DDL, DML, DCL, TCL 모두를 포함하고 있다.


DDL은 다음 정보를 명시한다.

  • 각 relation의 스키마
  • 각 attribute와 관련된 값의 유형
  • integrity constraints(무결성 제약 조건)
    • 도메인 제약 조건, 엔티티 무결성 제약 조건, 참조 무결성 제약 조건, 키 제약 조건 등으로 분류할 수 있다.
  • 각 relation에 대해 유지해야 하는 인덱스 집합
  • 각 relation에 대한 보안 및 authorization(권한 정보)
  • 디스크에 있는 각 관계의 물리적 저장 구조

위 정보를 나타낸 Relation을 생성할 때 SQL에서는 create table 명령어를 사용한다. 테이블 생성 구문을 통해서 제약 조건을 명시하는 방법에 대해 알아봤다.


DML
SQL의 기본적인 쿼리 구조인 select ~ from ~ where 구문에 대해 다뤘다.

SELECT column1, column2, ...
FROM table
WHERE condition;
  • SELECT: 표시할 열들
  • FROM: 사용할 테이블
  • WHERE: 조건을 만족하는 행들만 반환

중복되는 값을 구분하는 방법, 튜플 비교, 정렬 등의 세부적인 내용 또한 살펴보았다.


Set Operation
두 개 이상의 쿼리 결과를 조합해서 하나의 결과 집합을 만들어내는 집합 연산에 대해 알아봤다.

  • UNION (ALL)
  • INTERSECT (ALL)
  • EXCEPT (ALL)

Aggregate Function(집계 함수)
쿼리 결과로 얻은 Relation에서 여러 행의 데이터를 종합해 평균을 내거나, 최대, 최솟값을 구해야 하는 경우에 사용하는 Aggregate Function(집계 함수)에 대해 다뤘다. 집계 함수는 여러 행의 데이터를 한 번에 처리하여 요약된 결과를 도출한다. (count 함수에서만 null 값을 고려한다)

  • avg: 평균 값
  • min: 최소 값
  • max: 최대 값
  • sum: 값의 합
  • count: 값의 수

또한 특정 Attribute를 기준으로 데이터를 그룹화하여 각 그룹에 대해 집계 결과를 계산하는 GROUP BY와, GROUP BY의 결과를 필터링해주는 HAVING절에 대해 다뤘다.


중첩 서브쿼리 (Nested Subqueries)
select-from-where 쿼리의 결과로 얻은 릴레이션을 다시 쿼리에 사용할 수 있다. 중첩 서브쿼리는 SQL 쿼리 내에서 다른 쿼리를 포함하는 것을 말한다. (서브쿼리를 내부쿼리라고도 한다.)
서브쿼리는 select 절, from 절, where 절 모두에서 사용할 수 있었고, 각각에 해당하는 예시를 살펴봤다.


Set Membership
Set Membership는 어떤 값이 특정 집합에 속하는지 여부를 확인하는 작업을 의미한다. 주로 INNOT IN 연산자를 사용한다.


Set Comparison
Set Comparision은 두 집합 간의 관계를 비교하는 작업이다. SOME 또는 ALL 절을 사용한다. 이를 통해 집합 포함성, 차집합, 교집합, 대칭 차집합 등의 연산을 할 수 있다. Set Comparison에 사용하는

  • some 절 (적어도 1개 만족)
  • all 절 (모두 만족)
  • exist 절 (반환된 행이 있는지만 체크)

에 대해 살펴봤다.


데이터베이스 수정 (Modification of the Database)
데이터베이스에서 원하는 데이터를 수정하는 3가지에 대해 다뤘다.

  • 튜플 삭제 (Deletion): 주어진 relation에서 튜플을 삭제합니다.
  • 튜플 삽입 (Insertion): 주어진 relation에 새로운 튜플을 삽입합니다.
  • 값 업데이트 (Updating): 주어진 relation의 일부 튜플의 값을 업데이트합니다.

삭제 : Delete statement


삽입 : INSERT INTO


방법 1) 값만 삽입하는 방법

INSERT INTO table_name 
VALUES (value1, value2, value3, ...);

방법 2) 열(Attribute) 이름과 값을 모두 삽입하는 방법

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

INSERT INTO 와 SELECT를 조합하여 사용할 수 있는 방법에 대해서도 살펴보았다.

  • 테이블의 모든 열 삽입 (Inserting all columns of a table)
  • 특정 열 삽입 (Inserting specific columns of a table)
  • 특정 행 복사 (Copying specific rows from a table)

업데이트 구문 (Update statement)


구문 (Syntax)

UPDATE table_name
SET column1 = value1, column2 = value2,...
WHERE condition;

끝! 다음 챕터에서도 SQL이 이이어어어집집집집니니니니니다다다다다다


Ref) Database System Concepts - 7th edition (Abraham Silberschatz)