My Melody Is Cute 관계형데이터베이스
본문 바로가기

개발공부🌷/Database

관계형데이터베이스

SQL 

구조화 된 Query 언어(데이터 구조가 고정되어 있어야한다)

관계형 데이터베이스에서 사용

데이터 베이스용 프로그래밍 언어

 

Query 질의문,검색창의 검색어,정보를 필터하기 위한 질문 

=> 데이터베이스에 query를 보내 원하는 데이터를 뽑아올 수 있다

In-memory 끄면 데이터가 없어짐

File I/O 파읽을 읽는 방식으로 모든 데이터를 가져온 뒤 서버에서 필터링 필요

Database 필터링 외에도 여러관리기능을 가지고있는 데이터에 특화된 서버

CREATE DATABASE 데이터베이스_이름; 데이터베이스 생성

USE 데이터베이스_이름; 데이터베이스 사용

CREATE TABLE user (
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255),
  email varchar(255)
); user 테이블 생성

DESCRIBE user; 테이블 정보 확인

자주사용하는 SQL 명령어

SELECT 특성1, 특성2 특성 특정
FROM 테이블_이름 
WHERE 특성1 <> " 특정 값" 특정값을 제외한 값을 찾기 필터역할하는 쿼리문
WHERE 특성1 LIKE 비슷한값,특정패턴
WHERE 특성1 IN 일치하는 값
WHERE 특성1 IS NULL 값이 없는 경우 NULL을 찾을때
WHERE 특성1 IS NOT NULL 값이 없는 경우 제외
ORDER BY 데이터 결과를 정렬 출력 선택적 DESC 내림차순
LIMIT 출력할 데이터 개수
DISTINCT 유니크한 값 SELECT DISTINCT
INSERT INTO 테이블이름 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...);

INNER JOIN 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결
FROM 테이블1
JOIN 테이블2 ON 테이블1.특성A = 테이블2.특성B

OUTER JOIN

UPDATE 테이블이름
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE 조건;

SELECT c.CustomerId, c.FirstName, count(c.City) as 'City Count'
FROM customers AS c
JOIN employees AS e ON c.SupportRepId = e.EmpoyeeId
WHERE c.Country = 'Brazil'
GROUP BY c.City
ORDER BY 3 DESC, c.CustomerId ASC
LIMIT 3

 

트랜잭션 : 하나라도 실패하면 모든작업이 실패 성공or 실패 두개의 결과만 존재,ACID특징을 가지고 있다

ACID

트랜잭션(여러개의 작업을 하나로 묶은 실행 유닛)의 안전성을 보장하기위해 필요한 성질

원자성 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있어야한다

일관성 이전과 같이 유효한 상태, 제약이나 규칙을 만족해야한다 상태 변하지않아야한다

고립성 동시에 여러개 트랜잭션이 수행될때 고립되어있어 연속으로 실행된것과 동일한 결과

내구성,지속성 오류가 발생해도 기록은 영구적이여야한다 성공됐다면 로그가 남아있음

 

SQL vs NoSQL

구조화쿼리언어 vs 비구조화쿼리언어

관계형 데이터베이스 : 스키마가 뚜렷하게 보인다, 테이블간의 관계를 직관적으로 확인가능

비관계형 데이터베이스  : 데이터를 입력하는 방식에 따라 읽어올때 영향, 읽어올때 스키마에 따라 데이터를 읽어옴

둘의 차이점?? 데이터저장,스키마,쿼리,확장성

스키마는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티간의 관계에 대한것, 데이터베이스의 청사진

엔티티: 고유한 정보의 단위

 

관계형 데이터베이스

1:1 관계 1:N 관계, N:N 관계, 스스로 관계 self referencing

다대다관계일때 조인테이블을 만든다
-> 특정한 값으로 데이터를 찾을 수있음,
중첩데이터를 참조값으로 지정

 

테이블 : 데이터타입(열)대로 작성된 데이터가 행으로 축적 행과 열로 이루어짐

레코드 : 테이블의 한 행에 저장된 데이터

컬럼(열) : 테이블의 한 열

키 : 테이블의 레코드를 구분할 수 있는 값

 

GROUP BY로 조회후 HAVING으로 필터적용

WHERE은 저장된 레코드를 필터링 HAVING은 그룹화된 결과에 대한 필터

SELECT CustomerId, AVG(Total)
FROM invoices
WHERE CustomerId >= 10
GROUP BY CustomerId
HAVING SUM(Total) >= 30
ORDER BY 2

실행순서

FROM / WHERE / GROUP BY / HAVING / SELECT / ORDER BY

 

테이블 변경

ARTER TABLE 테이블이름

[ADD, RENAME, MODIFY, DROP]

 

새로운 컬럼 추가

ALTER TABLE 테이블이름

ADD 컬럼명 데이터타입