MySQL의 조건문을 마무리하고 JOIN을 공부했다.

예전에는 실습위주로 연습하면서 이런식으로 붙는구나 이해만 했는데, 여러 조건을 붙이다보니 생각보다 너무 헷갈린다.

ERD(Entity-Realtion Diagram)

  • 관계형데이터베이스는 중복된 데이터를 저장하지않고, 데이터간 구분을 위해 테이플을 따로 저장하고 연결해서 사용한다
  • 설계시 중복을 최소화하게 데이터를 구조화하는 정규화화 필요함
  • 엔티티간의 관계를 알기쉽게 약속된 도형으로 구성된 그림으로 표현한것이 ERD
    • 엔티티 : 관리하고자하는 정보
    • 속성 : 엔티티를 구성하는 특징
    • 관계 : 각 엔티티간의 관계

 

PK, FK

  • 테이블은 각 하나의 PK를 가짐
    • 유일한값이며 NULL은 불가능
    • 칼럼을 두개이상 묶어서 PK를 지정하는 복합키도 지정 가능
    • 하나의 칼럼에있는 데이터로 유일성을 지정할 수 없을때 사용하지만 거의 사용하지 않음
    • 각 테이블을 PK로 연결해서 사용
  • 다른테이블의 PK를 참초하기위해 FK 사용
    • FK값은 참조하는 PK와 동일하거나 NULL값을 가질 수 있음

 

JOIN (INNER JOIN)

  • JOIN 으로 서로다른 테이블에서 각각의 공통값을 이용해 조합
  • 두 테이블을 조인할때 열의 이름이 동일할 경우 USING 사용가능
  • INNER JOIN 은 JOIN과 같음
-- A와 B테이블에서 id가 같은것을 조인할때
SELECT 칼럼명      -- 출력할 컬럼명
FROM 테이블명 AS A  -- 출력할 테이블명
JOIN 테이블명 AS B 
ON A.id = B.id;  -- 두테이블을 합치는 기준
-- USING (id); 로도 가능

 

LEFT JOIN

  • 두 테이블중 왼쪽의 기준테이블에 오른쪽 테이블에서 겹치는부분만 가져와 붙임
  • 사용법은 JOIN 대신 LEFT JOIN 으로 바꾸기만하면 됨
  • ON의 조건이 여러개 올 수 있어서 현업에서 많이 사용
  • WHERE 절로 조건을 주는것과 다름

 

UNION

  • 테이블을 아래,세로로 붙이는 형태
  • 데이터를 합치며 새로운 행 생성
    • 데이터를 합치며 컬럼을 생성하는 JOIN과 다름을 기억
  • 데이터가 많아 테이블을 쪼개서 관리하는 상태라면 UNION으로 테이블을 합쳐서 확인하면 편함
  • 단 컬럼의 데이터타입이 다르면 에러발생
  • 데이터타입과 컬럼수만 같다면 서로 다른 데이터라도 UNION가능

'Database > MySQL' 카테고리의 다른 글

MySQL, 알고리즘 시작  (0) 2022.08.24

오늘부터 MySQL과 알고리즘(파이썬)을 본격적으로 시작했다.

MySQL의 기초개념인 데이터베이스와 데이터정의어, 데이터조작어에대해 공부했고

기존에 공부했었던 파이썬으로 스택구현을 복습했다.
파이썬으로 스택구현하기


데이터베이스

관리하는 데이터들을 목적에 맞게 저장소에 모아둔것

  • 정형데이터 : 미리 정해진 구조에따라 저장된 데이터
  • 반정형 데이터 : 구조에따라 저장됬지만 구조에 대한 설명이 되어있는 데이터
  • 비정형 데이터 : 정해진 구조 없이 저장된 데이터

데이터베이스 특징

  • 사용자 지속성 : 사용자의 요청에 즉시 처리하고 요청가능
  • 지속적인 변화 : 새로운 데이터의 최신상태를 유지 (일관성 유지)
  • 동시 공유 : 다수의 사용자가 동시에 같은 데이터를 이용 (동시성 제어 가능)
  • 내용에 대한 참조 : 데이터베이스에서 데이터의 주소나 위치가 아닌 사용자가 요구하는 내용으로 데이터를 찾을 수 있음
  • 데이터의 장애 발생시 회복가능하며 권한에 따른 접근영역을 설정하여 보안향상

RDBMS (관계형 데이터베이스 관리시스템)

관계형 데이터베이스를 생성, 수정할 수 있는 소프트웨어로 사용자와 DB간의 연결기능을 한다.

  • 관계형 데이터베이스 (RDB)
    • MySQL, Maria DB, Oracle
    • 2차원 테이블에 행 열로 구성된 데이터를 정의하고 설명하는 모델
    • 구조화된 데이터는 SQL을 통해 조회 가능
    • 일관성, 안정적, 신뢰성

 

  • 비관계형 데이터베이스
    • Mongo DB, redis
    • 데이터가 행 열로 구조회되지 않고, 하나의 데이터를 하나의 문서로 표현
    • 분산확장이 가능해 대용량 데이터 처리에 용이

 

테이블

  • 관계형 데이터베이스에서 자료의 구조를 2차원의 표로 나타낸것
  • 행, 열의 형태로 구성/관리
    • 행(로우) : 레코드, 튜플
    • 열(컬럼) : 어트리뷰트, 피처
  • 키를 지정함으로써 원하는 자료를 쉽게 찾아낼 수 있음

스키마

  • 테이블 뼈대를 구성하는것
  • 테이블을 정의할 때 컬럼별 저장할 데이터 타입까지 명시해야함
  • 테이블에는 숫자 또는 문자열같은 특정 데이터 유형이 담긴 여러 열이 포함 됨

데이터타입

정수타입

  • INT는 정수를 나타내며 각 정수 타입에따라 요구되는 저장공간과 표현가능한 최소,최대값이 달라짐
  • 0, 음수 및 양수가 가능
  • MySQL에서는 AUTO_INCREMENT로 자동정수값 설정이 가능

문자열타입

  • CHAR, VARCHAR, TEXT, ENUM, SET 등이 있으며 각각 다른특징을 가지고 있음

날짜와 시간 데이터타입

  • 주로 날짜와 시간 데이터를 저장하고 원하는 기준에따라 수정할 수 있음
  • 하지만 꼭 필요한 상황이 아니라면 숫자가 아닌 알파벳형태로 저장

제약조건 (Constraint)

  • 테이블에 제약조건을 걸어 원하는 형태로 조절 가능함
  • 목적에 맞는 데이터만 입력받기위해 칼럼마다 규칙을 정함
  • 조건에 맞지않는 데이터는 입력을 거부하고 에러 발생
  • 보통 테이블 생성시 제약을 사용하며 일시적으로 활성화/비활성화가 가능
  • PRIMARY KEY, FOREGIN KEY, NOT NULL, NULLABLE 등등 제약조건이 매우 중요한 경우가 많기 때문에 자주 쓰이는 제약조건을 알아두는것이 좋음

데이터 정의어 (DDL)

  • 테이블이나 관계 구조를 생성하는데 사용
    • CREATE : 생성
    • ALTER : 수정 (실무에선 사용하지 않음)
    • DROP : 이미 존재하는 테이블이나 데이터베이스 삭제
    • TRUNCATE : 테이블 초기화, 테이블 행 지움(테이블은 유지)

데이터 조작어 (DML)

  • 데이터 값에대한 조회,추가,삭제에 사용
    • SELECT : 칼럼조회
    • INSERT : 테이블에 행 삽입
    • UPDATE : 테이블의 컬럼 값 수정 (행의 내용)
    • DELETE : 테이블에 행 삭제

 

SELECT FROM WHERE

SELECT 컬럼명 FROM 테이블명 WHERE 조건절 의 기본형태를 유지
조건절에 다양한 연산자를 사용하여 데이터 선택 가능

  • 비교연산자 : WHERE 절에 사용되는 조건중 하나로 데이터 선택에 유용
    • WHERE 컬럼명 = 데이터값 : 데이터와 같은 칼럼 선택
      • 단 = 는 비교대상의 대소문자 구별을 하지 않음을 주의
      • WHERE BINARY 컬럼명 = 데이터값 형태로 대소문자도 구분 할 수 있음
    • WHERE 칼럼명 !- 데이터랎 : 특정 데이터를 제외하고 선택
    • WHERE 칼럼명 > < >= <= 데이터값 : 데이터값보다 크고작은 칼럼 선택

 

  • 논리연산자 : 여러조건을 적용하거나 후에 조건을 더 추가할때 효과적
    • WHERE a AND b : a,b 모두 TRUE 값만 추출
    • WHERE a OR b : a,b 둘 중 하나만 TRUE 라도 추출
    • WHERE 칼럼명 LIKE 데이터값 : 조건이 명확하지 않을 때 특정 내용을 찾음
      • 이때 임의의 문자나 문자열을 대체하기위한 Wildcard(%,_)를 사용
      • % : 조건을 포함하는 모든 문자
      • _ : 한글자
      • 특수기호 자체를 조회하려면 역슬레시\ 다음 기호 사용
    • WHERE 칼럼명 BETWEEN A and B : A와B 사이에 값이 존재하는 행을 출력할때 사용
      • 주로 날짜 사이에 간격을 주거나, 최소값과 최대값을 지정한 값의 범위 내에 있는 값을 검색하기 위해 사용
    • WHERE 칼럼명 IS NULL/ NOT NULL : NULL, NOT NULL 인 경우 추출
    • WHERE 칼럼명 IN 데이터값 : 조회하려는 값이 여러개일경우 사용
      • 데이터값을 여러개의 list로 설정이 가능
      • WHERE author IN ("봉", "상") : 작가가 봉,상 중 하나면 선택
      • IN 대신 NOT IN 으로 아닌경우만 선택할 수 있음

 

  • 산술 연산자 : 데이터값 계산시 사용
    • MySQL에서는 문자열에 산술연산자를 사용하면 숫자값으로 변경되어 추출됨을 주의(오류 자주발생)

 

  • AS : 임시로 칼럼명을 변경 ( 기존의 칼럼명이 실제로 변경되지 않음을 주의)
    • 컬럼명 바로 뒤에 작성하며 특수문자,대소문자,공백을 사용하려면 따옴표로 묶어야한다
    • 열 이름 뿐 아니라 테이블 이름에도 붙일 수 있음
    • ex) SELECT name AS bookname FROM member.bookstore AS BS

 

  • ORDER BY 칼럼명 : 오름차순, 내림차순으로 정렬된 데이터가 필요할 때 사용
    • 내림차순 DESC, 오름차순 ASC(default)
    • ORDER BY 는 가장 마지막에 실행되므로 쿼리문중 가장 끝에 사용가능
    • 칼럼명 뿐 아니라 Alias로도 적용 가능

 

  • DISTINCT 칼럼명 : 중복제거를 위한 키워드로 출력에서 고유한 값을 반환
    • ex) SELECT DISTINCT 칼럼명 : 칼럼명이 중복되는경우는 제외하고 선택
    • 칼럼 여러개를 선택할 수 있음

'Database > MySQL' 카테고리의 다른 글

JOIN  (0) 2022.08.25

+ Recent posts