aammddkkzxc 2024. 2. 24. 00:06
  • database (DB) : 전자적으로 저장되고 사용되는 관련있는 데이터들의 조직화된 집합
  • DBMS : 사용자에게 DB를 정의하고 만들고 관리하는 기능을 제공하는 소프트웨어 시스템, DB를 정의하다 보면 부가적인 데이터가 발생한다(메타 데이터)
  • meta data : 데이터를 설명하는 데이터, database를 정의하거나 기술하는 data, metadata 또한 DBMS로 저장/관리

 

데이터 베이스 시스템 과정 간단 정리

 

 

  • 사용자나 프로그래머가 어플리케이션 사용
  • 어플리케이션 프로그램에는 데이터 페이스에 접근하기 위한 여러가지 쿼리들이 존재
  • 프로그램들이 쿼리를 날리게 되면 DBMS들이 쿼리를 받아서 쿼리가 어떤 의미인지 분석
  • 요청을 처리하기 위해 데이터를 읽어오기 위한 부가적인 정보들을 확인한 후, 그 정보를 바탕으로 실제 요청받은 데이터를 찾아 어플리케이션으로 전송하는 형태로 동작

 

data model

  • DB의 구조를 기술하는데 사용될 수 있는 개념들이 모인 집합
  • DB구조를 추상화 해서 표현할 수 있는 수단을 제공한다
  • 여러 종류가 있으며, 추상화 수준과 구조화 방식이 다르다(conceptual, logical, physical)
  • logical data model 중에서 relational data model을 가장 많이 사용한다

 

RDMBS

관계형 데이터베이스는 테이블 간의 관계를 정의하여 데이터 사이의 연관성을 표현

  • 1:1 관계: 한 개의 행이 다른 한 개의 행에 대응
  • 1:N 관계: 한 개의 행이 다른 여러 개의 행에 대응
  • N:M 관계: 여러 개의 행이 다른 여러 개의 행에 대응

schema

  • data model을 바탕으로 database의 구조를 기술한 것
  • schema는 db를 설계 할 때 정해지며 한번 정해진 후에는 자주 바뀌지 않는다
  • schema를 보면 database의 구조가 어떤식으로 되어 있는지 전체 큰 그림을 알 수 있다

 

database state

  • database에 있는 실제 데이터는 꽤 자주 바뀔 수 있다
  • 특정 시점에 database에 있는 데이터를 database state 혹은 snapshot이라 한다
  • 임의의 각 시점에서의 database state는 같을 수도 있고 다를 수도 있다

 

SQL

  • three-schema architecture의 각각 레벨에서 사용되는 database language들로 DDL, DML 등이 있다
  • 오늘날의 DBMS는 DML, DDL등이 따로 존재하기 보다는 통합된 언어로 존재
  • 대표적인 예가 relational database language 의 SQL
  • SQL이 모든 역할을 하게 된다
  • 추가(Create), 조회(Read), 수정(Update), 삭제(Delete)의 앞 글자만 따서 CRUD라고 부르기도 한다.

 

 

RDBMS 대략 구조

  • tuple
    • 순서는 중요하지 않다
    • 하나의 tuple에서 attribute의 순서는 중요하지 않다
  • attribute
    • atomic해야한다. (ex) 주소 : 서울특별시 강남구 => 쪼개기 가능, atomic하지 않음)
    • 속성의 값은 속성 범위를 넘지 않는 값이어야 한다
    • 속성이  NOT NULL로 명시됐다면 NULL을 값으로 가질 수 없다
    • 속성의 값으로 null => 매우 중의적인 표현이 될수 있으므로 지양해야함
  • 기본키 (Primary Key)
    • relation의 tuple을 식별하기 위해 attribute의 부분집합을 key로 설정한다. 이를 기본키 라고 하고 한다.
      테이블에서 유일해야하며 중복 값을 가질 수 없다.
    • 보통 데이터를 수정하거나 삭제하고, 조회할 때 사용되며 다른 테이블과 관계를 맺어 데이터를 가져올 수도 있다.
    • 또한 기본키의 값은 수정되어서는 안되며 유효한 값이어야 한다. (null 불가)
  • Foreign Key
    • 다른 relation의 PK를 참조하는 attribute set
    • FK와 PK와 도메인이 같아야 하고 PK에 없는 values를 FK가 값으로 가질 수 없다

 

database vs schema

MySQL에서는 database와 schema가 같은 뜻을 의미 

PostgreSQL에서는 schema가 database의 namespace를 의미

 

 

조회

  • SELECT : 조회할 열을 지정
    • *일 경우 열 전부 선택
    • AS로 열에 별칭을 부여하여 조회할 수 있다. 원본 데이터엔 영향을 미치지 않는다
    • DISTINCT로 중복을 제거하여 조회할 수 있다. 원본 데이터엔 영향을 미치지 않는다
  • FROM : 조회할 테이블을 지정
  • WHERE : 조회할 데이터를 필터링, 조건식이 뒤따름

 

삽입

 

  • 행 삽입
    • INSERT INTO 테이블명 (열 이름, 열 이름)
    • VAKUES (열 값, 열값), (열 값, 열값);

한 행 삽입을 할 때 테이블의 모든 열의 값을 삽입할 필요는 없지만, 지정하지 않는다면 NULL값이 들어가게 되고, NOT NULL로 속성으로 설정한 열이라면 오류가 나게 된다.

 

  • 조회 후 삽입
INSERT INTO students (name, age, address)
SELECT name, age, address FROM students WHERE age < 30;

 

 

수정

 

update : 수정할 테이블을 지정

set : 데이터 수정

where : 수정할 데이터를 필터링

UPDATE students
SET age = 10,
		address = '서울특별시'
WHERE name = '정약용';

 

 

삭제

DELETE
FROM students
WHERE age BETWEEN 30 AND 33;
DELETE
FROM students; // 모든 행 삭제

 


SQL 내장 함수

SUM() : 숫자의 합 반환

AVG() : 숫자의 평균 반환

MAX() : 숫자의 최댓값 반환

MIN() : 숫자의 최솟값 반환

COUNT() : 행의 개수 반환

CONCAT() : 두 문자열을 연결

LENGTH() : 문자열의 길이를 반환

REPALCE() : 특정 문자열을 다른 문자열로 치환

NOW() : 현재 날짜와 시간 반환

 

 

 

그룹화

 

같은 값을 가진 행끼리 하나의 그룹으로 뭉치는 기능

SELECT 열, 집계함수
FROM 테이블
[WHERE 필터 조건]
GROUP BY 열   


// 어떤 절을 기준으로 그룹화 할지 명시
// GROUP BY 절에 명시된 열은 SELECT 절에도 존재하여야 한다

 

 

 

HAVING

GROUP BY 절에 의해 생성된 그룹 중에서 원하는 조건에 부합하는 그룹 만을 선택

SELECT 열, 집계함수
FROM 테이블
[WHERE 필터 조건]
GROUP BY 열
HAVING 그룹 필터 조건
  • GROUP BY 연산 후 HAVING절에 의해 필터링됩니다.
  • 실행 순서: WHERE -> GROUP BY -> HAVING

 

 

ORDER BY

특정 기준에 따라 정렬하는 구문

SELECT 열, 집계함수
FROM 테이블
[WHERE 필터 조건]
GROUP BY 열
HAVING 그룹 필터 조건
ORDER BY 열 [ASC | DESC]

 

  • ORDER BY 절에 기준이 될 열을 적는다
  • ORDER BY에 명시된 열은 SELECT 절에 존재하지 않아도 된다. (GROUP BY와 차이점)
  • 기본값 ASC(오름차순)
  • DESC = 내림차순

 

AND 와 OR에서 주의사항

  • AND가 OR에 비해서 우선 순위가 높다
  • a = 1 OR a=2 AND b=1 OR b=2; 이 조건식은 다음으로 나뉨
    • a=1
    • a=2 and b=1
    • b=2
  • 이는 의도하지 않은 결과일 확률이 있음. => 괄호를 잘 사용하자.

 

 

출처

 

https://www.inflearn.com/course/%EB%B0%B1%EC%97%94%EB%93%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0/dashboard