기록을 남기자

전체 글 186

카테고리 설명
개발,CS,PS 기록을 남기려 합니다.
  • 관계 데이터 연산 01 관계 데이터 연산의 개념 02 관계 대수 03 관계 해석 목표 ▪ 관계 데이터 연산의 개념과 종류를 알아본다. ▪ 일반 집합 연산자와 순수 관계 연산자의 차이를 이해한다. ▪ 일반 집합 연산자와 순수 관계 연산자를 이용해 질의를 표현하는 방법을 익힌다. ▪ 관계 해석의 개념을 간단히 정리해본다. 01 관계 데이터 연산의 개념 ◆ 데이터모델 = 데이터구조 + 연산 + 제약조건 ◆ 관계 데이터 연산(relational data operation) 관계 데이터 모델의 연산 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것 관계대수와 관계해석 ◆ 관계대수와 관계해석의 역할 데이터 언어의 유용성을 검증하는 기준 관계 대수나 관계 해석으로 기술할 수 있는 모든 질의를 기술..

  • 관계 데이터 모델 01 관계 데이터 모델의 개념 02 관계 데이터 모델의 제약 목표 ▪ 관계 데이터 모델의 기본 용어를 익힌다. ▪ 릴레이션을 구성하는 요소와 특성을 이해한다. ▪ 릴레이션에서 키의 역할과 종류를 알아본다. ▪ 무결성 제약의 의미와 필요성을 이해한다. 01 관계 데이터 모델의 개념 ◆ 관계 데이터 모델의 기본 개념 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델 하나의 개체 관한 데이터를 하나의 릴레이션에 저장 ◆ 관계 데이터 모델의 기본 용어 릴레이션(relation) 하나의 개체에 관한 데이터를 2차원 테이블의 구조로 저장한 것 파일 관리 시스템 관점에서 파일(file)에 대응 속성(attribute) 릴레이션의 열 파일 관리 시스템 관점에서 필드(field)에 대응 튜플(t..

  • 데이터 모델링 01 데이터 모델링과 데이터 모델의 개념 02 개체-관계 모델 03 논리적 데이터 모델 목표 ▪ 데이터 모델링과 데이터 모델의 개념을 이해한다. ▪ 개념적 데이터 모델인 개체-관계 모델을 이용해 모델링하는 방법을 익힌다. ▪ 개체-관계 다이어그램을 작성하는 방법을 익힌다. ▪ 논리적 데이터 모델의 종류와 특징을 이해한다 01 데이터 모델링과 데이터 모델의 개념 ◆ 2단계 데이터 모델링 개념적 데이터 모델링(conceptual modeling) 현실 세계의 중요 데이터를 추출하여 개념 세계로 옮기는 작업 논리적 데이터 모델링(logical modeling) 개념 세계의 데이터를 데이터베이스에 저장하는 구조로 표현 하는 작업 ◆ 데이터 모델 데이터 모델링의 결과물을 표현하는 도구 개념적 데이터..

  • 데이터베이스 시스템 데이터베이스 시스템의 정의 데이터베이스의 구조 데이터베이스 사용자 데이터 언어 데이터베이스 관리 시스템의 구성 목표 데이터베이스, 데이터베이스 관리 시스템, 데이터베이스 시스템의 차이를 이해한다. 데이터베이스 시스템의 구성 요소를 살펴본다. 데이터베이스 3단계 구조에서 데이터 독립성의 개념을 실현하는 방법을 이해한다. 데이터 언어별 특징을 알아본다. 데이터베이스 사용자별 특징을 알아본다. 데이터베이스 관리 시스템의 구성을 알아본다. 01 데이터베이스 시스템의 정의 데이터베이스 시스템(DBS; DataBase System): 데이터베이스에 데이터를 저장하고, 이를 관리하여 조직에 필요한 정보를 생성해주는 시스템 02 데이터베이스의 구조 ◆ 스키마와 인스턴스 스키마: 데이터베이스에 저장되..

  • 데이터 베이스 기본 개념 01 데이터베이스의 필요성 02 데이터베이스의 정의와 특징 03 데이터 과학 시대의 데이터 목표 ▪ 데이터와 정보의 차이를 이해한다. ▪ 데이터베이스의 필요성을 알아본다. ▪ 데이터베이스의 정의에 숨겨진 의미와 주요 특징을 이해한다. ▪ 형태와 특성에 따른 데이터 분류 방법을 알아본다. 01. 데이터베이스의 필요성 ◆ 데이터와 정보 데이터(data) • 현실 세계에서 단순히 관찰하거나 측정하여 수집한 사실이나 값 정보(information) • 의사 결정에 유용하게 활용할 수 있도록 데이터를 처리한 결과물 ◆정보 시스템과 데이터베이스 정보 시스템(information system) • 조직 운영에 필요한 데이터를 수집하여 저장해두었다가 필요할 때 유용한 정보를 만들어 주는 수단 ..

  • Semaphore를 사용할 때 어떤 상황에서 프로세스가 기다려야 하는가? 프로세스가 몇 개의 Queue로 나뉘어져 관리가 되어야 하는가? → Queue의 개수를 결정해야 한다. Queue의 수만큼 Semaphore를 생성한다. → Semaphore 1개당 Queue 1개 Semaphore에는 딱 두가지 함수만이 존재한다. → 이 두가지 함수만으로 다양한 동기화 문제를 해결할 수 있다. semWait semSignal Bounded Buffer using Semaphores 위의 코드에서 세마포는 3가지가 존재한다. s → Queue에 Produce와 Consumer가 섞여서 들어간다. n → Queue에 Consumer만이 들어간다. e → Queue에 Producer만이 들어간다. Producer Pr..

  • 2023년 04월 16일 기준 (문제 업데이트 중) 3월에 태어난 여성 회원 목록 출력하기 (LEVEL 2) https://school.programmers.co.kr/learn/courses/30/lessons/131120 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE MONTH(DATE_OF_BIRTH)=3 AND GENDER='W' AN..

  • 2023년 04월 16일 기준 (문제 업데이트 중) 조건에 맞는 회원수 구하기 (LEVEL 1) https://school.programmers.co.kr/learn/courses/30/lessons/131535 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr SELECT COUNT(user_id) as users FROM user_info WHERE YEAR(joined) = '2021' AND age >= 20 AND age

작성일
2023. 4. 22. 22:30
작성자
ssun_bear
반응형

관계 데이터 연산

01 관계 데이터 연산의 개념
02 관계 대수
03 관계 해석

목표

▪ 관계 데이터 연산의 개념과 종류를 알아본다.
▪ 일반 집합 연산자와 순수 관계 연산자의 차이를 이해한다.
▪ 일반 집합 연산자와 순수 관계 연산자를 이용해 질의를 표현하는 방법을 익힌다.
▪ 관계 해석의 개념을 간단히 정리해본다.


01 관계 데이터 연산의 개념

◆  데이터모델  = 데이터구조 + 연산 + 제약조건

◆ 관계 데이터 연산(relational data operation)

  • 관계 데이터 모델의 연산
  • 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것
  • 관계대수와 관계해석 

 

◆ 관계대수와 관계해석의 역할

  • 데이터 언어의 유용성을 검증하는 기준
  • 관계 대수나 관계 해석으로 기술할 수 있는 모든 질의를 기술할 수 있는 데이터 언어
    -> 관계적으로 완전(relationally complete)하다고 판단
    - query(질의) : 데이터에 대한 처리 요구

◆ 관계대수(relational algebra)의 개념

절차언어(procedural language)

원하는 결과를 얻기 위해 릴레이션의 처리과정을 순서대로 기술하는 언어

릴레이션을 처리한느 연산자들의 모임

대표연산자 8개
일반 집합연산자와 순수관계 연산자로 분류

폐쇄 특성(closure property)

피연산자도 릴레이션, 연산의 결과도 릴레이션


02 관계 대수

◆ 일반 집합 연산자의 특성

피연산자가 2개 필요, 2개의 릴레이션을 대상으로 연산수행

합집합, 교집합, 차집합은 피연산자인 두 릴레이션이 합병가능해야함.

 

합병가능조건

두 릴레이션의 차수가 같아야함
두 릴레이션에서 서로 대응되는 속성의 도메인이 같아야함

◆ 일반 집합 연산자- 합집합(union)

합병 가능한 두 릴레이션 R,S의 합집합 : R∪S

- 릴레이션 R에 속하거나 릴레이션 S에 속하는 모든 투플로 결과 릴레이션 구성

 

결과 릴레이션의 특성

차수는 R,S의 차수와 같음
카디널리티는 R,S의 카디널리xl를 더한것과 같거나 적어짐
교환과 결합의 특징이 있다.

• R∪S = S∪R

• (R∪S)∪T = R∪(S∪T)

◆ 일반 집합 연산자- 교집합(intersection)

합병 가능한 두 릴레이션 R,S의 교집합 : R∩S

- 릴레이션 R과 S에 공통으로 속하는 투플로 결과 릴레이션 구성

 

결과 릴레이션의 특성

차수는 R,S의 차수와 같음
카디널리티는 R,S의 어떤 카디널리티보다 크지 않음
교환과 결합의 특징이 있다.

• R∩S = S∩R

• (R∩S)∩T = R∩(S∩T)

◆  일반 집합 연산자- 차집합(difference)

합병 가능한 두 릴레이션 R,S의 차집합 : R-S

- 릴레이션 R에는 존재하지만 릴레이션 S에는 존재하지 않는 투플로 결과 릴레이션 구성

 

결과 릴레이션의 특성

차수는 릴레이션 R과 S의 차수와 같음 
R–S의 카디널리티는 릴레이션 R의 카디널리티와 같거나 적음 
S–R의 카디널리티는 릴레이션 S의 카디널리티와 같거나 적음
교환과 결합의 특징이 없음

◆  일반 집합 연산자- 카티션 프로덕트(cartesian product)

두 릴레이션 R과 S의 카티션 프로덕트 : RXS

- 릴레이션 R에 속한 각 투플과 릴레이션 S에 속한 각 투플을 모두 연결하여 만들어진 새로운 투플로 결과 릴레이션을 구성

 

결과 릴레이션의 특성

차수는 릴레이션 R과 S의 차수를 더한 것과 같음
카디널리티는 릴레이션 R과 S의 카디널리티를 곱한 것과 같음 
교환과 결합의 특성이 있음

• RXS = SXR

• (RXS)XT = RX(SXT)

◆   순수 관계 연산자(relational operation)

릴레이션의 구조와 특성을 이용하는 연산자

 

◆  순수 관계 연산자 - 셀렉트(select)

릴레이션에서 조건을 만족하는 투플만 선택하여 결과 릴레이션을 구성

하나의 릴레이션을 대상으로 연산을 수행

수학적 표현 : σ조건식(릴레이션)

데이터 언어적 표현 : 릴레이션 where 조건식

 

조건식

비교식, 프레디킷(predicate)이라고도 함 
속성과 상수의 비교나 속성들 간의 비교로 표현 
비교 연산자(>, ≥, <, ≤, =, ≠)와 논리 연산자(∧, ∨, ¬)를 이용해 작성

◆  순수 관계 연산자 - 프로젝트(project)

릴레이션에서 선택한 속성의 값으로 결과 릴레이션을 구성

하나의 릴레이션을 대상으로 연산을 수행

수학적 표현 : 𝜋속성리스트(릴레이션)

데이터 언어적 표현 : 릴레이션[속성리스트]

 

◆  순수 관계 연산자 - 조인(join)

조인 속성을 이용해 두 릴레이션을 조합하여 결과 릴레이션을 구성

조인 속성의 값이 같은 투플만 연결하여 생성된 투플을 결과 릴레이션에 포함

표현법 : 릴레이션1 ⋈ 릴레이션2

동등 조인(equi-join)이라고도 함

 

◆ 세타 조인(theta-join, 𝜽-join)

동등 조인에 비해 더 일반화된 조인

주어진 조인 조건을 만족하는 두 릴레이션의 모든 투플을 연결하여 생성된 새로운 투플로 결과 릴레이션을 구성

결과 릴레이션의 차수는 두 릴레이션의 차수를 더한 것과 같음

표현법 : 릴레이션1 ⋈A𝜃B 릴레이션2

𝜽는 비교 연산자(>, ≥, <, ≤, =, ≠)를 의미

 

◆ 동등 조인(equi-join)

𝜽 연산자가 “=”인 세타 조인을 의미

표현법 : 릴레이션1 ⋈A=B 릴레이션2

예) 고객 ⋈고객.고객아이디=주문.고객아이디 주문

 

◆ 자연 조인(natural join)

동등 조인의 결과 릴레이션에서 조인 속성이 한 번만 나타나게 하는 연산

표현법 : 릴레이션1 ⋈N 릴레이션2

 

◆ 순수 관계 연산자 - 디비전(division) 

표현법 : 릴레이션1 ÷ 릴레이션2

릴레이션2의 모든 투플과 관련이 있는 릴레이션1의 투플로 결과 릴레 이션을 구성

• 단, 릴레이션1이 릴레이션2의 모든 속성을 포함하고 있어야 연산이 가능함 (도메인이 같아야 함)

 

 

◆  관계 대수를 이용한 쿼리 표현 예)

 

 

◆  확장된 관계 대수 연산자

기본 연산자를 확장한 연산자들이 제안

예) 자연 조인 연산을 확장한 세미 조인과 외부 조인

 

◆  확장된 관계 대수 연산자 – 세미 조인(semi-join)

조인 속성으로 프로젝트 연산을 수행한 릴레이션을 이용하는 조인

표현법 : 릴레이션1 ⋉ 릴레이션2

릴레이션2를 조인 속성으로 프로젝트 연산한 후, 릴레이션1에 자연 조인 하여 결과 릴레이션을 구성

불필요한 속성을 미리 제거하여 조인 연산 비용을 줄이는 장점이 있음

• R ⋉ S ≠ S ⋉ R

 

 

◆  확장된 관계 대수 연산자 – 외부 조인(outer-join)

자연 조인 연산에서 제외되는 투플도 결과 릴레이션에 포함시키는 조인

결과 릴레이션에서 속성 값이 없는 경우는 널 값으로 처리

모든 투플을 결과 릴레이션으로 가져오는 릴레이션이 무엇이냐에 따라 분류(자연 조인 연산에서 제외되는 투플도 포함)

 

분류

  • 왼쪽(left) 외부 조인
  • 오른쪽(right) 외부 조인
  • 완전(full) 외부 조인

왼쪽 외부 조인

왼쪽에 있는 릴레이션1에 존재하는 모든 투플을 결과 릴레이션에 포함시킴

 

오른쪽 외부 조인

오른쪽에 있는 릴레이션2에 존재하는 모든 투플을 결과 릴레이션에 포함시킴

완전 외부 조인

두 릴레이션에 있는 모든 투플을 결과 릴레이션에 포함시킴

◆  예: 주문한 고객아이디는 모르는 새로운 주문 내역 투플이 주문 릴레이션에 추가된 상황


03 관계 해석

◆  관계 해석(relational calculus)

  • 처리를 원하는 데이터가 무엇인지만 기술하는 언어
  • 비절차 언어(nonprocedural language)
  • 수학의 프레디킷 해석(predicate calculus)에 기반을 두고 있음
  • 기능과 표현력 측면에서 관계 대수와 동등한 능력을 가짐

분류

  • 투플 관계 해석(tuple relational calculus)
  • 도메인 관계 해석(domain relational calculus)

 

반응형
작성일
2023. 4. 22. 21:32
작성자
ssun_bear
반응형

관계 데이터 모델

01 관계 데이터 모델의 개념

02 관계 데이터 모델의 제약

목표

▪ 관계 데이터 모델의 기본 용어를 익힌다.

▪ 릴레이션을 구성하는 요소와 특성을 이해한다.

▪ 릴레이션에서 키의 역할과 종류를 알아본다.

▪ 무결성 제약의 의미와 필요성을 이해한다.


01 관계 데이터 모델의 개념

◆  관계 데이터 모델의 기본 개념

  • 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델
  • 하나의 개체 관한 데이터를 하나의 릴레이션에 저장

◆  관계 데이터 모델의 기본 용어

릴레이션(relation)

  • 하나의 개체에 관한 데이터를 2차원 테이블의 구조로 저장한 것
  • 파일 관리 시스템 관점에서 파일(file)에 대응

속성(attribute)

  • 릴레이션의 열
  • 파일 관리 시스템 관점에서 필드(field)에 대응

튜플(tuple)

  • 릴레이션의 행
  • 파일 관리 시스템 관점에서 레코드(record)에 대응

도메인(domain)

  • 하나의 속성이 가질 수 있는 모든 값의 집합
  • 속성 값을 입력 및 수정할 때 적합성 판단의 기준이됨
  • 일반 적으로 속성의 특성을 고려한 데이터 타입으로 정의

널(null)

  • 속성 값을 아직 모르거나 해당되는 값이 없음을 표현

차수(degree)

  • 하나의 릴레이션에서 속성의 전체 개수

카디널리티(cardinality)

  • 하나의 릴레이션에서 튜플의 전체 개수

 

◆  릴레이션의 구성

릴레이션 스키마(relation schema)

릴레이션의 논리적 구조
릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의
예) 고객(고객 아이디, 고객이름,나이, 등급, 직업, 적립금)
릴레이션 내포(relation intension), 자주 변하지 않는 정적인 특징

릴레이션 인스턴스(relation instance)

어느 한 시점에 릴레이션에 존재하는 튜플들의 집합
릴레이션 외연(relation extension)
튜플의 삽입,삭제,수정이 자주 발생하는 동적인 특징

◆  데이터베이스의 구성

데이터베이스 스키마(database schema)

데이터베이스의 전체구조
데이터베이스를 구성하는 릴레이션 스키마의 모음

데이터베이스 인스턴스(database instance)

데이터베이스를 구성하는 릴레이션 인스턴스의 모음

◆  릴레이션의 특성

  • 튜플의 유일성 : 하나의 릴레이션에는 동일한 튜플이 존재할 수 없음
  • 튜플의 무순서 : 하나의 릴레이션에서 튜플의 순서는 무의미
  • 속성의 무순서 : 하나의 릴레이션에서 속성 사이의 순서는 무의미
  • 속성의 원자성 : 속성값으로 원자 값만 사용할 수 있음

◆  키(key)

  • 릴레이션에서 튜플들을 유일하게 구별하는 속성 또는 속성들의 집합

◆  키(key)의 특성

  • 유일성(uniqueness): 하나의 릴레이션에서 모든 튜플은 서로 다른 키 값을 가져야함
  • 최소성(miniality): 꼭 필요한 최소한의 속성들로만 키를 구성함

◆  키(key)의 종류

슈퍼키(super key)

  • 유일성을 만족하는 속성 또는 속성들의 집합
  • 예) 고객 릴레이션의 슈퍼키: 고객아이디, (고객아이디, 고객이름), (고객이름, 주소) 등

후보키(candidate key)

  • 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
  • 예) 고객 릴레이션의 후보키: 고객아이디, (고객이름, 주소) 등

기본키(primary key)

  • 후보키 중에서 기본적으로 사용하기 위해 선택한 키
  • 예) 고객 릴레이션의 기본키: 고객아이디

대체키(alternate key)

  • 기본키로 선택되지 못한 후보 키
  • 예) 고객 릴레이션의 대체키: (고객이름, 주소) 

외래키 (foreign key)

  • 다른 릴레이션의 기본 키를 참조하는 속성 또는 속성들의 집합
  • 릴레이션들 사이의 관계를 표현
    - 참조하는 릴레이션: 외래키를 가진 릴레이션
    - 참조되는 릴레이션: 외래키가 참조하는 기본키를 가진 릴레이션

◆  키(key)의 특성과 종류


02 관계 데이터 모델의 제약

◆  무결성 제약조건(integrity constraint)

  • 데이터의 무결성을 보장하고 일관된 상태로 유지하기 위한 규칙

무결성

데이터에 결함이 없는 상태, 즉 데이터가 정확하고 유효하게 유지된 상태

◆  개체 무결성 제약조건(entity integrity constraint)

  • 기본키를 구성하는 모든 속성은 널 값을 가질수 없는 규칙

◆  참조 무결성 제약조건(referential integrity constraint)

  • 외래키는 참조할 수 없는 값을 가질 수 없는 규칙

반응형
작성일
2023. 4. 22. 20:35
작성자
ssun_bear
반응형

데이터 모델링

01 데이터 모델링과 데이터 모델의 개념
02 개체-관계 모델
03 논리적 데이터 모델

 

목표

▪ 데이터 모델링과 데이터 모델의 개념을 이해한다.
▪ 개념적 데이터 모델인 개체-관계 모델을 이용해 모델링하는 방법을 익힌다.
▪ 개체-관계 다이어그램을 작성하는 방법을 익힌다.
▪ 논리적 데이터 모델의 종류와 특징을 이해한다

 


01 데이터 모델링과 데이터 모델의 개념

◆ 2단계 데이터 모델링

개념적 데이터 모델링(conceptual modeling)

현실 세계의 중요 데이터를 추출하여 개념 세계로 옮기는 작업

 

논리적 데이터 모델링(logical modeling)

개념 세계의 데이터를 데이터베이스에 저장하는 구조로 표현 하는 작업

 

◆ 데이터 모델

데이터 모델링의 결과물을 표현하는 도구

개념적 데이터 모델

사람의 머리로 이해할 수 있도록 현실세계를 개념적 모델링하여 데이터 베이스의 개념적 구조로 표현하는 도구

예) 개체-관계 모델

 

논리적 데이터 모델

개념적 구조를 논리적 모델링하여 데이터베이스의 논리적 구조로 표현하는 도구

예) 관계 데이터 모델

 

◆ 데이터 모델의 구성

1. 데이터 구조(data structure)

  • 개념적 데이터 모델에서 개념적 구조 : 현실 세계를 개념세계로 추상화 했을 대 어떤 요소로 이뤄져 있는지 표현
  • 논리적 데이터 모델에서 논리적 구조 : 데이터를 어떤 모습으로 저장할 것인지 표현
  • 정적 특징

2. 연산(operation)

  • 개념 세계나 컴퓨터 세계에서 실제로 표현된 값들을 처리하는 작업
  • 동적 특징

3. 제약조건(constraint) -> 데이터 무결성 유지 목적

  • 구조적 측면의 제약 사항
  • 연산을 적용하는 경우 허용할 수 있는 의미적 측면의 제약 사항

 


02 개체-관계 모델

◆ 개체 -관계 모델(E-R  model; Entity-Relationship model) 

개체와 개체 간의 관계를 이용해 현실 세계를 개념적 구조로 표현
핵심요소: 개체, 속성, 관계

◆ 개체 -관계 다이아그램 (E-R  diagram) 

개체-관계 모델을 이용해 현실세계를 개념적으로 모델링한 결과물을 그림으로 표현

 

◆  개체(Entity)

  • 저장할 가치가 있는 중요 데이터를 가지고 있는 사람이나, 사물, 개념, 사건 등
  • 다른 개체와 구별되는 이름을 가지고 있고, 각 개체만의 고유한 특성이나 상태, 즉 속성을 하나 가지고 있음
  • 예) 서점에 필요한 개체: 책, 고객
  • 예) 학교에 필요한 개체: 학과, 과목
  • 파일 구조의 레코드(record)와 대응됨
  • E-R 다이어그램에서 사각형으로 표현하고 사각형 안에 이름을 표기

◆  속성(attribute)

  • 개체나 관계가 가지고 있는 고유한 특성
  • 의미 있는 데이터의 가장 작은 논리적 단위
  • 파일구조의 필드(field)와 대응
  • E-R 다이어그램에서 타원으로 표현하고 타원안에 이름을 표기

◆  개체 타입(Entity type)

  • 개체를 고유한 이름과 속성들로 정의
  • 파일 구조의 레코드 타입(record type에 대응됨)

◆  개체 인스턴스(entity instance)

  • 개체를 구성하고 있는 속성이 실제 값을 가짐으로써 실체화된 개체
  • 개체 어커런스(entity occurence)라고도 함
  • 파일 구조의 레코드 인스턴스(record instance)에 대응됨

◆  개체 집합(entity set)

  • 특정 개체 타입에 대한 개체 인스턴스들을 모아 놓은 것

◆ 속성의 분류

◆  단일 값 속성과 다중 값 속성

단일값 속성

값을 하나만 가질 수 있는 속성
예) 고객 개체의 이름, 적립금 속성

다중값 속성

값을 여러개 가질 수 있는 속성
예) 고객 개체의 연락처 속성, 책 개체의 저자 속성
E-R 다이어그램에서 이중타원으로 표현

◆  단순속성과 복합 속성

단순 속성

의미를 더는 분해할 수 없는 속성
예) 고객 개체의 적립금 속성, 책개체의 이름, ISBN, 가격 속성

복합 속성

의미를 분해 할 수 있는 속성
예) 고객 개체의 주소 속성 : 도, 시, 동, 우편 번호 등으로 의미를 세분화 가능
예) 고객 개체의 생년월일 속성: 연, 월, 일로 의미를 세분화 가능

 

◆  유도 속성(derived attribute)

기존의 다른 속성의 값에서 유도되어 결정되는 속성
값이 별도로 저장되지 않음
예) 책 개체의 가격과 할인율 속성으로 계산 되는 판매가격 속성
예) 고객 개체의 출생연도 속성으로 계산되는 나이 속성
E-R 다이어그램에서 점선 타원으로 표현

◆  널 속성 (null attribute)

널 값이 허용되는 속성

◆  널 값

아직 결정되지 않았거나 모르는 값, 존재하지 않는 값
공백이나 0과는 의미가 다름

 

◆  키 속성(key attribute)

각 개체 인스턴스를 식별하는데 사용되는 속성
모든 개체 인스턴스의 키 속성 값이 다름
둘 이상의 속성들로 구성되기도 함
예) 고객 개체의 고객 아이도 속성
 E-R 다이어그램에서 밑줄로 표현

 

◆  관계(relationship)

개체와 개체가 맺고 있는 의미 있는 연관성
개체 집합들 사이의 대응 관계, 즉 매핑을 의미
예) 고객 개체와 책 개체간의 구매관계 ->고객은 책을 구매한다
E-R 다이어그램에서 마름모로 표현

 

◆  관계의 유형: 관계에 참여하는 개체 타입의 수 기준

  • 이항 관계: 개체 타입 2개가 맺는 관계
  • 삼항 관계: 개체 타입 3개가 맺는 관계
  • 순환 관계: 개체 타입 1개가 자기 자신과 맺는 관계

◆  관계의 유형:  매필 카디널리티 기준

매핑 카디널리티(mapping cardinality) 

관계를 맺는 두 개체 집합에서, 각 개체 인스턴스가 연관성을 맺고 있는 상대 개체 집합의 인스턴스 개수
  • 일대일(1:1) 관계
  • 일대다(1:n) 관계
  • 다대다(n:m) 관계

◆ 일대일(1:1) 관계

개체 A의 각 인스턴스가 개체 B의 개체 인스턴스 하나와 관계를 맺을 수 있고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 하나와 관계를 맺을 수 있음

◆  일대다(1:n) 관계

개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 하나와 관계를 맺을 수 있음

◆  다대다(n:m) 관계

개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 여러 개와 관계를 맺을 수 있음

◆  관계의 참여 특성

필수적 참여

  • 모든 개체 인스턴스가 관계에 반드시 참여해야 되는 것을 의미
  • 예) 고객 개체가 책 개체와의 구매관계에 필수적으로 참여
  • - 모든 고객은 책을 반드시 구매해야함
  • E-R 다이어그램에서 이중선으로 표현

선택적 참여

  • 개체 인스턴스 중 일부만 관계에 참여해도 되는 것을 의미
  • 예) 책 개체가 고객 개체와의 구매 관계에 선택적으로 참여
  • - 고객이 구매하지 않은 책이 존재 할 수 있음

◆  관계의 종속성

약한 개체(weak entity)

다른 개체의 존재 여부에 의존적인 개체

강한 개체(strong entity)

다른 개체의 존재 여부에 의존적인 개체

특징

  • 강한 개체와 약한 개체는 일반적으로 일대다의 관계
  • 약한 개체는 강한 개체와의 필수적으로 참여
  • 약한 개체는 강한 개체의 키를 포함하여 키를 구성

E-R다이어 그램에서 약한 개체는 이중사각형으로, 약한 개체와 강한개체와 맺는 관계는 이중 마름모로 표현

예) 직원 개체와 부양가족 개체 사이의 부양관계

직원개체는 강한 개체, 부양가족 개체는 약한 개체

◆  E-R  다이어그램

  • 사각형 : 개체를 표현
  • 마름모: 관계를 표현
  • 타원: 속성을 표현
  • 링크(연결선): 각 요소를 연결
  • 레이블: 일대일, 일대다, 다대다 관계를 표현


03. 논리적 데이터 모델

◆  관계 데이터 모델

  • 일반적으로 많이 사용되는 논리적 데이터 모델
  • 데이터베이스의 논리적 구조가 2차원 테이블 형태

◆ 계층 데이터 모델(hierarchical data model)

  • 데이터베이스의 논리적 구조가 tree형태
  • 루트 역할을 하는 개체가 존재하고 사이클이 존재하지 않음
  • 개체간에 상하관계가 성립 (예: 부모 개체/ 자식개체 - 1:n관계만 허용)
  • 두 개체 사이에 하나의 관계만 정의할 있음
  • 다대다 관계를 직접 표현할 수 없음
  • 개념적 구조를 모델링 하기 어려워 구조가 복잡해질수 있음
  • 데이터의 삽입,삭제,수정,검색이 쉽지 않음

◆  네트워크 데이터 모델(network data model)

  • 데이터베이스의 논리적 구조가 네트워크, 즉 그래프(graph) 형태
  • 개체 간에는 일대다 관계만 허용됨 - 예) 오너/멤버
  • 두 개체간의 관계를 여러개 정의할 수 있어 이름으로 구별함
  • 다대다 관계를 직접 표현할 수 없음
  • 구조가 복잡하고 데이터의 삽입,삭제,수정,검색이 쉽지 않음

◆  E-R 다이어그램 보충자료

반응형
작성일
2023. 4. 22. 18:34
작성자
ssun_bear
반응형

데이터베이스 시스템

  1. 데이터베이스 시스템의 정의
  2. 데이터베이스의 구조
  3. 데이터베이스 사용자
  4. 데이터 언어
  5. 데이터베이스 관리 시스템의 구성

목표

  • 데이터베이스, 데이터베이스 관리 시스템, 데이터베이스 시스템의 차이를 이해한다.
  • 데이터베이스 시스템의 구성 요소를 살펴본다.
  • 데이터베이스 3단계 구조에서 데이터 독립성의 개념을 실현하는 방법을 이해한다.
  • 데이터 언어별 특징을 알아본다.
  • 데이터베이스 사용자별 특징을 알아본다.
  • 데이터베이스 관리 시스템의 구성을 알아본다.

01 데이터베이스 시스템의 정의

데이터베이스 시스템(DBS; DataBase System): 

데이터베이스에 데이터를 저장하고, 이를 관리하여 조직에 필요한 정보를 생성해주는 시스템

 


02 데이터베이스의 구조

◆ 스키마와 인스턴스

스키마: 데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한것

인스턴스 : 스키마에 따라 데이터베이스에 실제로 저장된 값

◆ 3단계 데이터베이스 구조

- 외부단계: 개별 사용자 관점

- 개념단계: 조직 전체의 관점

- 내부단계: 저장 장치의 관점

 

-> 각 단계별로 다른 추상화 제공, 내부에서 외부로 갈수록 추상화 레벨이 높아짐

◆ 3단계 데이터베이스 구조 : 외부단계

개별 사용자 관점에서 이해하고 표현하는 단계

하나의 데이터베이스에 외부 스키마가 여러개 존재

 

외부 스키마 

외부 단계에서 사용자에게 필요한 데이터베이스를 정의
각 사용자가 생각하는 데이터베이스의 모습, 즉 논리적 구조로 사용자 마다 다름
서브스키마 라고도 함

 

◆ 3단계 데이터베이스 구조 : 개념 단계

조직 전체의 관점에서 이해하고 표현 하는 단계

하나의 데이터베이스에 개념 스키마가 하나만 존재

 

개념스키마

개념 단계에서 전체 데이터베이스의 논리적 구조를 정의
조직 전체 관점에서 생각 하는 데이터베이스의 모습
전체 DB에 어떤 데이터가 저장되는지, 데이터들 간에는 관계, 어떤 제약조건이 있는지에 대한 정의, 데이터에 대한 보안정책이나 접근 권한에 대한 정의도 포함

 

◆ 3단계 데이터베이스 구조 : 내부 단계

저장 장치의 관점에서 이해하고 표현하는 단계

하나의 데이터베이스에는 내부 스키마가 하나만 존재

 

내부스키마

전체 데이터베이스가 저장장치에 실제로 저장되는 방법을 정의
레코드 구조, 필드크기, 레코드접근경로 등 물리적 저장구조를 정의

 

◆ 3단계 데이터베이스 구조의 사상 또는 매핑

스키마 사이의 대응 관계

외부/개념 사상: 외부-개념 스키마의 대응관계, 응용 인터페이스(application interface)라고도 함

개념/내부 사상: 개념-내부 스키마의 대응관계, 저장 인터페이스(storage interface)라고도 함

 

데이터 베이스를 3단계 구조로 나누고 단계별로 스키마를 유지하며 스키마 사이의 대응관계를 정의하는 궁극적인 목적

-> 데이터 독립성의 실현

 

◆  데이터 독립성

하위 스키마를 변경하더라도 상위스키마가 영향을 받지 않는 특성

 

- 논리적 데이터 독립성

: 개념스키마가 변경되어도 외부스키마는 영향받지 않음, 외부/개념사상만 정확하게 수정해주면 됨

 

- 물리적 데이터 독립성

: 내부 스키마가 변경되어도 개념스키마는 영향 받지 않음, 개념/내부 사상만 정확하게 수정해주면 됨

 

 

◆  데이터 사전

시스템 카탈로그라고도 함

데이터베이스에 저장되는 데이터에 관한 정버, 메타 데이터를 유지하는 시스템 데이터베이스

스키마, 사상 정보, 다양한 제약조건등을 저장

데이터베이스 관리 시스템이 스스로 생성하고 유지

일반 사용자도 접근이 가능하지만, 저장내용을 검색만 할 수 있음

 

◆  데이터 디렉터리

데이터 사전에 있는 데이터에 실제로 접근하는데 필요한 위치 정보를 저장하는 시스템 데이터베이스

일반 사용자의 접근은 허용되지 않음

 

◆  사용자 데이터 베이스

사용자가 실제로 이용하는 데이터가 저장되어 있는 일반 데이터베이스


03 데이터베이스 사용자

◆  데이터베이스 관리자(DBA: DataBase Administrator)

데이터베이스 시스템을 운영 및 관리하는 사람

주로 데이터 정의어와 데이터 제어어를 이용

주요 업무

데이터베이스 구성 요소 선정, 스키마 정의
물리적 저장구조와 접근방법 결정
무결성 유지를 위한 제약조건 정의
 보안 및 접근 권한 정책결정
백업 및 회복 기법 정의
시스템 데이터 베이스 관리
시스템 성능 감시 및 성능 분석
데이터베이스 재구성

◆  최종 사용자(end user)

데이터베이스에 접근하여 데이터를 조작하는 사람

주로 데이터 조작어를 이용

캐주얼 사용자와 초보 사용자로 구분

 

◆ 응용프로그래머 (application programmer)

데이터 언어를 삽입하여 응용 프로그램을 작성하는 사람

주로 데이터 조작어를 이용


04 데이터 언어

◆  데이터 정의어 (DDL :  Data Definition Language)

스미마를 정의하거나 수정, 삭제 하기 위해 사용

◆  데이터 조작어 (DML :  Data Manipulation Language)

데이터의 삽입,삭제,수정,검색 등의 처리를 요구하기 위해 사용

절차적 데이터 조작어와 비절차적 데이터 조작어로 구분

절차적 데이터 조작어(procedural DML) 비절차적 데이터 조작어(nonprocedural DML)
사용자가 어떤(what) 데이터를 원하고 그 데이터를 어떻게(how) 처리하는지도 설명  사용자가 어떤(what) 데이터를 원하는지만 설명
선언적 언어라고도 함

◆  데이터 제어어 (DCL :  Data Control Language)

내부적으로 필요한 규칙이나 기법을 정의하기위해 사용

사용목적: 무결성, 보안, 회복, 동시성 제어

 


05 데이터베이스 관리 시스템의 구성

반응형
작성일
2023. 4. 21. 16:07
작성자
ssun_bear
반응형

데이터 베이스 기본 개념

01 데이터베이스의 필요성
02 데이터베이스의 정의와 특징
03 데이터 과학 시대의 데이터

 

목표

▪ 데이터와 정보의 차이를 이해한다.
▪ 데이터베이스의 필요성을 알아본다.
▪ 데이터베이스의 정의에 숨겨진 의미와 주요 특징을 이해한다.
▪ 형태와 특성에 따른 데이터 분류 방법을 알아본다.


01. 데이터베이스의 필요성

◆ 데이터와 정보
데이터(data)
• 현실 세계에서 단순히 관찰하거나 측정하여 수집한 사실이나 값

정보(information)
• 의사 결정에 유용하게 활용할 수 있도록 데이터를 처리한 결과물

 

◆정보 시스템과 데이터베이스
정보 시스템(information system)
• 조직 운영에 필요한 데이터를 수집하여 저장해두었다가 필요할 때 유용한
정보를 만들어 주는 수단

데이터베이스
• 정보 시스템 안에서 데이터를 저장하고 있다가 필요할 때 제공하는 역할 담당


02. 데이터베이스의 정의와 특징

◆ 데이터베이스(DB; DataBase)
▪ 특정 조직의 여러 사용자가 공유하여 사용할 수 있도록 통합해서 저장한 운영 데이터의 집합

 

 

데이터베이스의 정의

공유 데이터 :특정 조직의 여러 사용자가 함께 소유하고 이용할 있는 공용 데이터
통합 데이터: 최소의 중복과 통제 가능한 중복만 허용하는 데이터
저장 데이터: 컴퓨터가 접근할 있는 매체에 저장된 데이터
운영 데이터 :조직의 주요 기능을 수행하기 위해 지속적으로 필요한 데이터

 

데이터베이스의 특징

실시간 접근 : 사용자의 데이터 요구에 실시간으로 응답
계속 변화 : 데이터의 계속적인 삽입, 삭제, 수정을 통해 현재의 정확한 데이터를 유지
동시 공유: 서로 다른 데이터의 동시 사용뿐만 아니라 같은 데이터의 동시 사용도 지원
내용 기반 참조
데이터가 저장된 주소나 위치가 아닌 내용으로 참조 가능
) 재고량이 1,000 이상인 제품의 이름을 검색하시오.


03. 데이터 과학 시대의 데이터

형태에 따른 데이터 분류

-정형 데이터
-반정형 데이터
-비정형 데이터

정형 데이터(structured data)

구조화된 데이터, 미리 정해진 구조에 따라 저장된 데이터

데이터 구조에 대한 설명과 데이터 내용은 별도로 유지됨

) 엑셀의 스프레드시트, 관계 데이터베이스의 테이블

반정형 데이터(semi-structured data)

구조에 따라 저장된 데이터이지만 데이터 내용 안에 구조에 대한 설명이

함께 존재

구조를 파악하는 파싱(parsing) 과정이 필요, 보통 파일 형태로 저장

) 웹에서 데이터를 교환하기 위해 작성하는 HTML, XML, JSON 문서나

웹 로그, 센서 데이터

비정형 데이터(unstructured data)

정해진 구조가 없이 저장된 데이터

) 소셜 데이터의 텍스트, 영상, 이미지,

워드나 PDF 문서와 같은 멀티미디어 데이터

특성에 따른 데이터 분류

(통계적 관점에서 데이터 특성에 따라 적합한 분석 방법을 선택하기 위해 데이터 분석 분야에서 주로 활용)

- 범주형 데이터

- 수치형 데이터

범주형 데이터(categorical data)

범주로 구분할 있는 , 종류를 나타내는 값을 가진 데이터
크기 비교와 산술적인 연산이 가능하지 않아 질적 데이터라고도

 

명목형 데이터(nominal data)

순서, 서열이 없는 값을 가지는 데이터

) 성별, 혈액형, 학과명, 거주 지역, 음식 메뉴, MBTI 검사 결과

 

서형 데이터(ordinal data)

순서, 서열이 있는 값을 가지는 데이터

) 학년, 학점, 회원 등급

수치형 데이터(numerical data)

크기 비교와 산술적인 연산이 가능한 숫자 값을 가진 데이터

양적 데이터라고도

이산형 데이터(discrete data)

개수를 있는 띄엄띄엄 단절된 숫자 값을 가지는 데이터

) 고객 수, 판매량, 합격자

연속형 데이터(continuous data)

측정을 통해 얻어지는 연속적으로 이어진 숫자 값을 가지는 데이터

) , 몸무게, 온도, 점수

정성적 데이터와 정량적 데이터

정성적 데이터(qualitative data)

좁은 의미로는 범주형 데이터

사람의 주관적인 생각과 평가를 기술한 비정형 데이터

정량적 데이터(quantitative data)

좁은 의미로는 수치형 데이터

객관적인 측정을 통해 수치나 도형, 기호 등으로 표현한 정형 데이터

 


데이터베이스 관리 시스템

01 데이터베이스 관리 시스템의 등장 배경

02 데이터베이스 관리 시스템의 정의

03 데이터베이스 관리 시스템의 장•단점

04 데이터베이스 관리 시스템의 발전 과정

 

목표

파일 시스템의 문제점과 데이터베이스 관리 시스템의 필요성을 알아본다.

데이터베이스 관리 시스템의 필수 기능을 살펴본다.

데이터베이스 관리 시스템의 장단점을 알아본다.

데이터베이스 관리 시스템의 발전 과정을 살펴본다.


01 데이터베이스 관리 시스템의 등장 배경

파일 시스템(file system)

데이터를 파일로 관리하기 위해 파일을 생성·삭제·수정·검색하는 기능을

제공하는 소프트웨어

응용 프로그램별로 필요한 데이터를 별도의 파일로 관리함

파일 시스템의 문제점

같은 내용의 데이터가 여러 파일에 중복 저장된다.

응용 프로그램이 데이터 파일에 종속적이다.

데이터 파일에 대한 동시 공유, 보안, 회복 기능이 부족하다.

응용 프로그램을 개발하기 쉽지 않다.

 

파일 시스템의 주요 문제점1

같은 내용의 데이터가 여러 파일에 중복 저장된다 데이터 중복성

저장 공간의 낭비는 물론 데이터 일관성과 데이터 무결성을 유지하기 어려움

데이터 중복성 문제를 해결하는 방법은?

파일 시스템의 주요 문제점2

응용 프로그램이 데이터 파일에 종속적이다 데이터 종속성

사용하는 파일의 구조를 변경하면 응용 프로그램도 함께 변경해야


02 데이터베이스 관리 시스템의 정의

데이터베이스 관리 시스템

DBMS(DataBase Management System)

파일 시스템의 문제를 해결하기 위해 제시된 소프트웨어

조직에 필요한 데이터를 데이터베이스에 통합하여 저장하고 관리함

 

데이터베이스 관리 시스템에서의 데이터 관리

데이터베이스 관리 시스템의 주요 기능


03 데이터베이스 관리 시스템의 장•단점

 

장점

1. 데이터 중복을 통제할 있다.

데이터베이스에 데이터를 통합하여 관리하므로 데이터 중복 문제 해결

 

2. 데이터 독립성이 확보된다.

응용 프로그램 대신 데이터베이스에 접근하고 관리하는 모든 책임 담당

응용 프로그램과 데이터베이스 사이에 독립성이 확보됨

 

3. 데이터를 동시 공유할 있다.

동일한 데이터를 여러 응용 프로그램이 공유하여 동시 접근할 있게 지원

동시 접근 제어 기술 보유

 

4. 데이터 보안이 향상된다.

중앙 집중식으로 데이터를 관리하므로 효율적인 접근 제어 가능

권한이 없는 사용자의 접근, 허용되지 않은 데이터와 연산에 대한 요청 차단

 

단점

1. 비용이 많이 든다.

별도 구매 비용이 들고, 동시 사용이 허용되는 사용자 수에 따라 가격 증가

 

2. 백업과 회복 방법이 복잡하다.

장애 발생의 원인과 상태를 정확히 파악하기 어렵고 회복 방법도 복잡함

 

3. 중앙 집중 관리로 인한 취약점이 존재한다.

데이터베이스나 데이터베이스 관리 시스템에 장애가 발생하면 전체 시스템의 업무 처리가 중단됨

데이터베이스 의존도가 높은 시스템일수록 가용성과 신뢰성에 치명적임

 


04 데이터베이스 관리 시스템의 발전 과정

1세대 : 네트워크 DBMS, 계층 DBMS

네트워크 DBMS : 데이터베이스를 그래프 형태로 구성

) IDS(Integrated Data Store)

계층 DBMS : 데이터베이스를 트리 형태로 구성

) IMS(Information Management System)

2세대 : 관계 DBMS

관계 DBMS : 데이터베이스를 테이블 형태로 구성

) 오라클(Oracle), MS SQL 서버, 액세스(Access), 인포믹스(Informix), MySQL, 마리아DB(MariaDB)

3세대 : 객체지향 DBMS, 객체관계 DBMS

객체지향 DBMS : 객체를 이용해 데이터베이스를 구성

) 오투(O2), 온투스(ONTOS), 젬스톤(GemStone)

객체관계 DBMS : 객체지향 DBMS + 관계 DBMS

) 관계 DBMS 제품들이 객체지향 기능을 지원하면서 객체관계 DBMS분류되기도 함(오라클이 대표적)

 

4세대 : NoSQL NewSQL DBMS

NoSQL DBMS : 비정형 데이터를 처리하는데 적합하고 확장성이 뛰어남

안정성과 일관성 유지를 위한 복잡한 기능 포기

데이터 구조를 미리 정해두지 않는 유연성을 가짐

여러 대의 컴퓨터에 데이터를 분산하여 저장하고 처리하는 환경에서 주로 사용

) 몽고디비(MongoDB), H베이스(HBase), 카산드라(Cassandra), 레디스(Redis), 네오포제이(Neo4j), 오리엔트DB(OrientDB)

NewSQL DBMS: 관계 DBMS 장점 + NoSQL 확장성 유연성

정형 비정형 데이터를 안정적이고 빠르게 처리 가능

) 구글 스패너(Spanner), 볼트DB(VoltDB), 누오DB(NuoDB)

 

 

반응형
작성일
2023. 4. 17. 17:00
작성자
ssun_bear
반응형

Semaphore를 사용할 때

  1. 어떤 상황에서 프로세스가 기다려야 하는가?
  2. 프로세스가 몇 개의 Queue로 나뉘어져 관리가 되어야 하는가?
    → Queue의 개수를 결정해야 한다.
  3. Queue의 수만큼 Semaphore를 생성한다.
    → Semaphore 1개당 Queue 1개

Semaphore에는 딱 두가지 함수만이 존재한다.
→ 이 두가지 함수만으로 다양한 동기화 문제를 해결할 수 있다.

  • semWait
  • semSignal

Bounded Buffer using Semaphores

위의 코드에서 세마포는 3가지가 존재한다.

  • s → Queue에 Produce와 Consumer가 섞여서 들어간다.
  • n → Queue에 Consumer만이 들어간다.
  • e → Queue에 Producer만이 들어간다.

Producer Process:

  1. Buffer가 가득 찼는지 확인
  2. Critical Section 진입 가능 여부 확인
  3. Buffer에 데이터 쓰기
  4. Critical Section 깨워주기
  5. Consumer 깨워주기

Consumer Process:

  1. Buffer가 비었는지 확인
  2. Critical Section 진입 가능 여부 확인
  3. Buffer에서 데이터 읽기
  4. Criitcal Section 깨워주기
  5. Producer 깨워주기

Monitors

OS는 Semaphore를 제공해서 우리가 Semaphore를 이용하여 여러 문제를 해결할 수 있게 해준다.
↔ 하지만, 잘못 사용하게 되면 Deadlock이 발생할 수 있다.

Monitor는 Programming-language construct 이다.

semaphore와 동등한 기능을 제공하고, 제어하기 쉬운 프로그래밍 언어 구조이다.

Programming-language construct

Programming-language construct 는 라이브러리 함수이다.

File에서 Data를 다룰 때 System Call에는 오로지 READ, WRITE만 존재한다.
하지만, READ, WRITE는 데이터 타입 구분을 하지 않는다.
⇒ 쉽게 시스템을 사용할 수 있게 하기 위해(입출력하기 위해) Buffering와 Printf, Scanf 와 같은 라이브러리를 이용한다.

이와 같이 우리가 바로 Semaphore 를 사용하게 되면, 어렵기도 하고 잘못 사용하면 Deadlock 이 발생할 수 있기 때문에 Monitor 라는 모듈 라이브러리를 사용하는 것이다.

간단히 말해서 Monitor 는 Semaphore 를 구현해 놓은 module 이다.

Monitor 는 software module 이다.

Monitor의 구성요소

  • 한 가지 이상의 Procedures
  • initialization sequence
  • local data

Structure of a Monitor

Monitor

Monitor 자체가 Critical Section이다.
→ 한 번에 하나의 Process만 Monitor에 진입할 수 있다.

ex) Process1이 Procedure1을 실행하고 싶어하고, 
Process2가 Proedure2를 실행하고 싶어서 동시 호출해도, 
Monitor 안에는 하나의 Process만 진입할 수 있고 
다른 프로세스들은 모니터 밖의 Queue에서 대기하게 된다.

local data

monitor에 대한 local 이다.
→ Procedure 입장에서는 전역 변수이다.
즉, 여러 Procedure에서 access할 수 있는 변수이다.
⇒ Monitor 안에서만 access가 가능하다.
⇒ 두 프로세스 동시 접근 불가

Procedure

여러개의 Procedure가 존재한다. (1~k)
Monitor "안" 에서만 실행된다.

어떤 프로세스가 Procedure를 실행시키기 위해서는 monitor 안에 들어와서 실행해야 한다.

cwait(cn)

호출한 프로세스가 바로 Block된다.
→ 바로 Condition Queue로 들어가게 된다.
→ 이후 바깥의 Queue에서 대기 중이던 프로세스가 Monitor로 들어온다.

urgent queue

monitor 안에 Process1가 Procedure1을 실행 중
→ semSignal(c) 호출
→ 새로운 Process가 monitor 안으로 들어오게 됨

이 경우, monitor 바깥의 Queue에서 대기하다가 막 깨어난 프로세스가 우선순위를 갖게 되어 막 들어온 프로세스가 monitor 작업을 진행하게 된다.
원래 monitor안에서 실행 중이던 Process1은 Urgent Queue로 들어가서 block 하게 된다.

→ 이후 바깥에서 막 들어온 프로세스가 작업 진행을 마치면 다시 Process1이 Urgent Queue에서 나와 원래 하던 작업을 실행하고 monitor에서 나가게 된다.
→ 이후 바깥의 Queue에서 대기하던 프로세스 중 하나가 monitor에 들어오게 된다.


Characteristics

  1. Local data variables are accessible only by the monitor
    ↳ Monitor들은 local data variable에 한 번에 하나만 접근할 수 있다.
  2. Process enters monitor by invoking one of its procedures
    ↳ Process가 Procedure를 호출하면 monitor안으로 들어 오게 되고, procedure에서 연산을 진행하게 된다. 밖에서는 연산이 불가능하다.
    ⇒ Mutual Exclusion 이 지켜진다.
  3. Only one process may be executing in the monitor at a time (mutual exclusion facility)
    ↳ 오직 하나의 프로세스만이 monitor를 실행할 수 있다.
    ⇒ Mutual Exclusion facility

Synchronization

condition variables

Synchronization achieved by condition variables within a monitor
↳ only accessible by the monitor.

condition variables 는 버퍼가 차있는지 동기화를 해결하기 위해 사용된다.

  1. monitor 안에서만 사용 가능
  2. Queue 존재
  3. Semaphore와 다르다. ↔ condition variable에는 정수값이 존재하지 않는다. Queue만 존재한다.

Monitor Functions

cwait(c)

Suspend execution of the calling process on condition c
→ 무조건 이 함수를 호출한 Process를 Block 시킨다.

csignal(c)

Resume execution of some process blocked after a cwait on the same condition
→ Queue에 있는 Process 하나를 꺼내서 Monitor 안으로 들여온다. 세마포와 달리, 정수 값이 없기 때문에 Queue가 비었는지 안비었는지 확인할 수 없다.


Bounded Buffer Solution Using Monitor(2)


여러개의 Producer와 Consumer들이 존재하는 상황이다.

char x와 같이 데이터를 만드는 작업이나 consume()은 monitor 바깥에서 작업해도 된다.
하지만, append()와 take() 작업은 반드시 monitor 안에서 작업해야한다.


Bounded Buffer Solution Using Monitor

boundedbuffer

monitor boundedbuffer;

데이터를 읽고 쓰기 전 후 monitor 안에서 둘 이상의 Producer가 append를 동시에 하는 것을 막고, 둘 이상의 Consumer가 take를 동시에 하는 것을 막는다.

buffer[N]

char buffer [N]

N 크기의 버퍼

nextin, nextout

int nextin, nextout;
  • nextin: 다음에 데이터를 쓸 위치
  • nextout: 다음에 데이터를 읽을 위치

count

int count;

local data → 버퍼의 데이터가 가득찼는지 안 찼는지를 판단한다.

notfull, notempty

cond notfull, notempty;
  • notfull: producer들이 버퍼가 full 했을 때 block 되는 Queue
  • notempty: consumer들이 버퍼가 empty 했을 때 block 되는 Queue

초기값

buffer initially empty

  • nextin = 0
  • nextout = 0
  • count = 0

Q. Count 변수를 사용할 수 있는 이유?

↳ monitor안의 local 변수 count를 사용했기 때문이다.

이 monitor 자체가 Critical Section이기 때문이다.
Count는 monitor 안에 있기 때문에 연산이 가능한 것이고, Count를 사용해서 코드가 간단해졌다.

Semaphore에서는 count와 같은 변수를 사용할 수 없다.

Q. Monitor에서 Deadlock이 발생하지 않을까?

Semaphore로 Buffer 문제 해결했을 때는 코드 위치를 변경했을 때 Deadlock이 발생했다.

  1. semWait(e) ↔ semWait(s) : Critical Section에 먼저 들어간 뒤, 버퍼가 찼는지 확인
  2. semWait(n) ↔ semWait(s) : Critical Section에 먼저 들어간 뒤, 버퍼가 비었는지 확인


    monitor의 경우, Critical Section에 원래 먼저 들어간 뒤, 버퍼가 비었는지 꽉 찼는지를 확인한다. ⇒ Deadlock이 발생하지 않는다.

⇒ 왜 순서를 바꿨을 때, Semaphore는 Deadlock이 발생하고 왜 Monitor에서는 Deadlock이 발생하지 않을까?


Readers/Writers Problem

버퍼 안에 공유데이터 가 존재한다. → Producer와 Consumer처럼 서로 대칭 작업을 하는 두 종류의 프로세스가 있는 게 아니라, readers와 writers라고 하는 서로 비대칭 적인 작업을 하는 두 종류의 프로세스가 있다.

Readers와 Writers는 비대칭 작업 을 한다.

Readers : 동시 작업이 가능하다.
→ 공유 영역 데이터를 "읽기" 만 한다.
↳ 데이터 값 변경 X

Writers : 동시 작업이 불가능하다. (Race condition이 발생할 수 있다.)
→ 데이터를 쓰는 애 X, 데이터를 읽고 계산하고 쓰는 역할을 한다.
↳ 데이터 값 변경 O

  • r-r O
  • w-w X
  • r-w X
  • w-r X

A data area is shared among many processes

  • Some processes only read the data area, some only write to the area

Conditions to satisfy:

  • Multiple readers may read the file at once.
  • Only one writer at a time may write
  • If a writer is writing to the file, no reader may read it.
    → 만약 writer가 file에 쓰고 있다면, reader는 동시에 file을 읽을 수 없다.

Readers have Priority

Reader 하나 들어가면 나머지 reader가 따라 들어온다.

main()

readcount 공유변수 1개가 있고, 값을 0으로 초기화한다.
reader, writer가 여러명 존재하며 동시에 작업을 시작할 수 있다.

비대칭적인 작업 ⇒ 이전과 달리 reader() 와 writer() 의 코드가 다른 것을 확인할 수 있다.

writer()

reader가 1명도 없다고 가정했을 때, writer는 그냥 critical section이다.

semWait(wsem) 을 통과해서 write 작업을 한다. 그 뒤 semSignal(wsem) 을 진행한다.

writer는 한 번에 하나씩만 critical section에 접근할 수 있는 완벽한 critical section 문제이다.


이 Ciritical Section 안에는 Data라고 하는 Buffer 가 있다.
wsem seamaphore가 지키고 있는 Critical Section이다.

Critical Section 이기 때문에 wsem semaphore의 초기값이 1이다.

w1이 Critical Section으로 들어와서 읽고 쓰고 업데이트를 할 때, wsem의 값은 0이 된다. ⇒ Criitcal Section의 문은 닫히게 된다.

이 때 다른 writer 들이 Critical Section에 들어가고 싶어서 대기를 하면, wsem의 값을 하나씩 빼 가며 writer들이 줄을 서게 된다.

이 때, 밖의 wsem Queue에 reader 하나가 Critical Section에 들어가고자 등장한다.
reader 도 당연히 줄을 서야 한다.
↳ writer 가 작업하고 있는 동안에 reader 는 들어갈 수 없다.

이후 두번째 reader 도 Critical Section에 들어가고자 나타났다고 하자.
그런데 이 reader 도 wsem Queue에 줄을 서야할까?
↳ 첫번째 reader 는 당연히 줄을 서야 한다.

r1이 들어가면 r2는 같이 들어간다.
⇒ 첫번째 reader 만 줄을 서고 나머지 reader 는 줄을 서지 않는다.
최대 1명의 reader 만 줄을 선다. (1개 또는 0개만 줄을 선다.)

어느 순간 wsem Queue를 보면, writer는 여러 명이 줄을 서있고, reader는 한 명만 줄을 서 있는다. 또는 reader가 아무도 없을 수도 있다.

만약 reader 가 자신의 차례를 기다리다가 차례가 되어 Critical Section 안으로 들어왔다고 가정하자.
밖에는 여전히 Writer 들이 wsem Queue에서 대기를 하고 있는데, 만약 이 때 새로운 reader 가 등장하게 되면 이 reader는 대기할 필요가 없다.

그냥 같이 들어가서 READ 작업을 하면 된다.

위와 같이 여러명의 reader들이 동시에 읽을 수 있다.

⇒ Critical Section 안에 reader 가 들어있다 == wsem Queue 안에는 대기하는 reader 가 존재하지 않는다.

r1이 작업을 완료해서 Critical Section을 나오게 된다.
원래는 Critical Section에서 작업하던 애가 작업을 마치고 나올때는 바깥 Queue에 대기하고 있던 애를 깨워주고 Critical Section에 넣어주고 나가게 된다.

그런데 여기서는 r1이 작업이 끝났다고 해서 대기하고 있던 프로세스를 Critical Section 안에 넣어줄 수 없다.
→ 아직 reader들이 남아있기 때문이다.

Critical Section 안에 들어있는 모든 reader 가 작업을 마칠 때까지 writer 는 Critical Section 에 들어올 수 없다.

reader 의 경우, 첫번째 reader 만 줄을 서기 때문에, 내가 첫번째 reader 인지 알아야 한다.
또, 마지막에 나오는 reader 의 경우에만 semSignal()을 해서 writer 를 깨워서 Critical Section 안에 넣어줄 것이다.
⇒ 내가 몇 번째 reader 인지 알아야 한다.
↳ 이 일을 하는 것이 readCount 이다.

readCount

  1. 초기값 = 0
  2. reader가 한 명씩 올때마다 readCount를 하나씩 증가시킨다.
  3. reader가 작업을 마칠때마다 readCount를 하나씩 감소시킨다.

⇒ 내가 몇 번째 reader 인지 알 수 있다.

readCount 자체는 Critical Section 안에서 연산(+, -)를 진행해야 한다.

⇒ Critical Section 이 하나 더 필요하다!

X라고 하는 Critical Section을 하나 더 사용할 것이다.

  • readCount를 이 Critical Section 안에 집어 넣는다.
  • 새로운 reader가 도착하면 readCount++ 를 Critical Section 안에 들어가서 진행한다.
  • 작업을 다 마치고 나면, readCount-- 를 Critical Section 안에서 진행한다.

  • 내가 read 작업을 하기 전에, readCount++ 를 하는데, Critical Section 에서 작업하기 위해 → semWait(x) 를 통해 Critical Section 진입한 후 readCount 연산을 진행한다.
  • 내가 read 작업을 다 마친 후, readCount-- 를 하는데, Critical Section 에서 작업하기 위해 → semWait(x) 를 통해 Critical Section 진입한 후 readCount 연산을 진행한다.

readCount == 1 일 때, 해당 reader 가 첫번째 reader 라는 뜻이므로 wsemWait에 가서 줄을 설 것이다.

if(readCount == 1) semWait(wsem);

readCount == 0 일 때, 해당 reader 가 마지막 reader 라는 뜻이므로 semSignal(wsem)을 통해 wsemQueue에서 대기 중이던 writer 를 Critical Section 안으로 들여보내 줄 것이다.

if(readCount == 0) semSignal(wsem);

reader들이 줄 서 있는 곳?

첫 번째 reader 만 wsemQueue에 줄을 서는데, 그렇다면 나머지 reader 들은 어디에서 줄을 설까?
x 라고 하는 semaphore Queue에서 줄을 선다.

x semaphore 의 기능

  • Critical Section 기능 구현: readCount++, readCount-- 를 둘 이상의 reader 가 동시에 실행하면 안되기 때문에 한 번에 하나씩만 readCount 연산을 진행하기 위해 사용하는 semaphore
  • 대기하고 있던 reader 들을 줄 세우는 작업을 한다.

r1

  • semWait(x) → x = 0
  • readCount++ → readCount = 1
  • semWait(wsem) → wsem Queue에 대기 → 이미 wsem에는 대기 프로세스가 앞에 있어 문이 닫혀 있는 상태라 통과 X
    ⇒ 다음 코드로 넘어갈 수 없다. ⇒ swmSignal(x)를 해서 reader 들을 blocked 상태에서 풀어줄 수 없다.

r2

  • semWait(x) → x = -1
  • Critical Section에 들어가지 못한다.

r1이 Critical Section에 들어가지 못했기 때문에 다른 reader 들이 x Queue에서 대기하고 있어도 readCount는 여전히 1이다.
Critical Section에 들어가지 못했기 때문에 readCount 값을 바꿀 수 없다.

reader 가 4명이나 있어도 reader 들 중에 어느 누구도 Critical Section 에 들어가서 data를 읽지 못하는 상황에서는 readCount가 계속 1을 유지한다.

여러명의 reader 가 도착했더라도 하나의 reader 만 wsem Queue에 대기하고 나머지 reader 들은 x Blocked Queue에서 대기하게 된다.

Writer 가 작업을 마침
r1이 드디어 Critical Section 에 들어가게 된다.

  • semSignal(x) 를 실행한다.
  • x Queue에 대기하고 있던 reader 를 Critical Section으로 넣어준다.
  • readCount가 1 증가한다.
  • semSignal(x) → 다른 reader 를 깨워준다.
  • 늦게온 r5가 먼저 기다리고 있던 w들보다 먼저 실행된다.

정리

writer

  1. writer 는 기본적으로 Critical Section 이다.
  2. wsem 을 이용해서 기본 Critical Section 을 구현한다.

reader

  1. reader 의 경우, 첫 번째 reader 만 wsem 에 대한 semWait(wsem)을 실행한다.
  2. 마지막 reader 만 wsem 에 대한 semSignal(wsem)을 실행한다. → 다음 writer 를 Critical Section 으로 넣어준다.
  3. 몇 번째 reader 인지 세야 한다. → 이 작업은 readCount 가 한다.
  4. readCount 자체는 Critical Section 으로 구현했다.
  5. semaphore x 의 역할
    • readCount 동시 접근 제한
    • 다른 reader 들이 대기하는 곳
반응형
작성일
2023. 4. 16. 16:51
작성자
ssun_bear
반응형

2023년 04월 16일 기준 (문제 업데이트 중)

3월에 태어난 여성 회원 목록 출력하기 (LEVEL 2)

https://school.programmers.co.kr/learn/courses/30/lessons/131120

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH)=3 AND GENDER='W' AND NOT TLNO IS NULL
ORDER BY MEMBER_ID ASC

 

재구매가 일어난 상품과 회원 리스트 구하기 (LEVEL 2)

https://school.programmers.co.kr/learn/courses/30/lessons/131536

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*)>1
ORDER BY USER_ID ASC, PRODUCT_ID DESC

 

서울에 위치한 식당 목록 출력하기 (LEVEL 4)

https://school.programmers.co.kr/learn/courses/30/lessons/131118

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT A.REST_ID, B.REST_NAME, B.FOOD_TYPE, B.FAVORITES, B.ADDRESS, ROUND(AVG(A.REVIEW_SCORE),2) AS SCORE
FROM REST_REVIEW AS A
JOIN REST_INFO AS B ON A.REST_ID=B.REST_ID
GROUP BY A.REST_ID
HAVING B.ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, B.FAVORITES DESC

 

오프라인/온라인 판매 데이터 통합하기 (LEVEL 4)

https://school.programmers.co.kr/learn/courses/30/lessons/131537

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID,SALES_AMOUNT
FROM ONLINE_SALE
WHERE MONTH(SALES_DATE)=3

UNION ALL

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, NULL AS USER_ID,SALES_AMOUNT
FROM OFFLINE_SALE
WHERE MONTH(SALES_DATE)=3

ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC

 

반응형
작성일
2023. 4. 16. 14:53
작성자
ssun_bear
반응형

 

2023년 04월 16일 기준 (문제 업데이트 중)

조건에 맞는 회원수 구하기 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/131535

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT COUNT(user_id) as users
FROM user_info
WHERE YEAR(joined) = '2021' AND age >= 20 AND age <= 29;

상위 N개 레코드 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/59405

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT NAME 
FROM ANIMAL_INS 
ORDER BY DATETIME 
ASC LIMIT 1

여러 기준으로 정렬하기 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/59404

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT ANIMAL_ID, NAME, DATETIME 
FROM ANIMAL_INS
ORDER BY NAME ASC, DATETIME DESC

동물의 아이디와 이름 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/59403

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC

어린 동물 찾기 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/59037#fn1

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID

아픈 동물 찾기 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/59036

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID

역순 정렬하기 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/59035

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC

모든 레코드 조회하기 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/59034

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

강원도에 위치한 생산공장 목록 출력하기 (LEVEL1)

https://school.programmers.co.kr/learn/courses/30/lessons/131112

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS like "%강원도%"
ORDER BY FACTORY_ID

조건에 맞는 도서리스트 출력하기 (LEVEL1)

https://school.programmers.co.kr/learn/courses/30/lessons/144853

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUSBLISHED_DATE
FROM BOOK
WHERE CATEGORY='인문' AND YEAR(PUBLISHED_DATE)='2021'
ORDER BY PUBLISHED_DATE;

 

조건에 부합하는 중고거래 댓글 조회하기 (LEVEL1)

https://school.programmers.co.kr/learn/courses/30/lessons/164673

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT A.TITLE, A.BOARD_ID, B.REPLY_ID, B.WRITER_ID, B.CONTENTS, DATE_FORMAT(B.CREATED_DATE, '%Y-%m-%d')
FROM USED_GOODS_BOARD AS A
JOIN USED_GOODS_REPLY AS B
ON A.BOARD_ID=B.BOARD_ID
WHERE MONTH(A.CREATED_DATE)=10
ORDER BY B.CREATED_DATE, A.TITLE

인기있는 아이스크림 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/133024

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC

평균 일일 대여요금 구하기(LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/151136

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR 
WHERE CAR_TYPE = "SUV"

흉부외과 또는 일반외과 의사목록 출력하기 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/132203

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT DR_NAME, DR_ID,MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD= 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME ASC

12세 이하인 여자 환자 목록 출력하기 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/132201

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') AS TLNO
FROM PATIENT
WHERE GEND_CD='W' AND AGE<=12
ORDER BY AGE DESC, PT_NAME ASC

과일로 만든 아이스크림 고르기 (LEVEL 1)

https://school.programmers.co.kr/learn/courses/30/lessons/133025

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT A.FLAVOR
FROM FIRST_HALF AS A
JOIN ICECREAM_INFO AS B ON A.FLAVOR=B.FLAVOR
WHERE A.TOTAL_ORDER>3000 AND B.INGREDIENT_TYPE='fruit_based'
ORDER BY A.TOTAL_ORDER DESC
반응형