31일차(SQL)

Rina's·2023년 5월 24일

코드스테이츠

목록 보기
33/96

🌌SQL

Structured Query Language
데이터베이스용 프로그래밍 언어이자 구조화 된 Query언어

Query? : (저장 정보를 필터하는) 질의문

DB가 필요한 이유

In-memory(client): 임시 메모리로 끄면 데이터가 손실
File I/O(server): 필요시마다 전체 파일을 확인해야 함. 파일이 클수록 비효율적
Databace: 필터링 외에도 File I/O로 구현이 힘든 관리기능 등 데이터에 특화 됨

  • NoSQL 구조가 고정되어있지 않고 키와 값의 형태로 저장(ex MongoDB)

ACID

데이터베이스 내 트랜잭션의 안정성을 보장할 수 있는 성질

트랜잭션
명령 쿼리를 모아놓은 하나의 작업 단위

Atomicity(원자성)
하나의 트랜젝션은 모든 작업이 일괄적으로 성공하거나 실패해서 예측가능 해야 한다
일부가 실패하면 그 작업은 실패한 것으로 본다

Consistency(일관성)
하나의 트랜젝션 전후에 데이터베이스의 일관성이 유지되어야 한다

Isolation(격리성)
각각의 트랜젝션은 서로의 연산을 확인받거나 영향을 줄 수 없다

Durability(지속성)
하나의 성공된 트렌젝션에 대한 로그는 영구적으로 남는다

Lock
랜잭션 간에 데이터 접근을 조정하고 충돌을 방지하여 일관성을 유지
하나의 트랜잭션이 데이터를 읽거나 수정할 때 해당 데이터에 락을 걸어 다른 트랜잭션이 해당 데이터에 접근하는 것을 막아 순서대로 실행할 수 있게 함

Blocking
먼저 Lock을 설정한 트랜잭션으로 나머지 트랜잭션을 진행하지 못하고 멈춰선 상태
기다리거나 rollback해야 함.

교착상태(Dead Lock)
두개 이상의 트랜잭션이 서로 lock을 획득한 채 다른 트랜잭션이 소유한 잠금을 요구하며 무한정 대기하는 상태, 대기시간을 정하거나 한쪽을 롤백처리하는 방법이 있다

🌌SQL과 NoSQL

🌠SQL

관계형 데이터베이스
구조와 데이터 타입을 사정에 정의(고정된 형식의 스키마)
구조화된 쿼리 언어
수직적 확장, 데이터베이스 구축에 비용이 많이 듬

ex) MySQL, Oracle, SQLite, PostgresSQL, MariaDB

ACID준수, 전자상거래와 금융서비스, 데이터가 구조적이고 일관적인 경우

🌠NoSQL

비관계형 데이터베이스
구조가 없고 키와 값의 형태로 저장(동적으로 스키마의 형태를 관리)
구조화되지 않은 쿼리 언어(데이터 그룹 자체를 조회함에 초점)
수평적 확장, 보다 적은 비용의 서버증설(또는 클라우드)
Key-Value, 문서형, Wide-Column, 그래프 형태로 데이터 저장

ex) 몽고DB, Casandra

구조가 중요하지 않는 대용량의 데이터, 클라우드 및 저장공간 활용 필요시,
데이터 구조의 잦은 업데이트

🌌MySQL 기본 명령어

커맨드창에서 mysql-u 아이디명 -p 로 접속하거나,
mysql commend line client로 접속
-> 페스워드 입력

DB, Table, Filed

데이터베이스

데이터베이스 전체 조회 SHOW DATABASES;
데이터베이스 생성 CREATE DATABASE 데이터베이스_이름;
데이터베이스 사용 USE 데이터베이스_이름;
데이터베이스 삭제 DROP DATABASE 데이터베이스_이름;

테이블

테이블 생성 create table [테이블명](id int,name vrchar(20));
테이블 확인 DESCRIBE 테이블_이름;
테이블 삭제 DROP TABLE 테이블_이름;
테이블 비우기 TRUNCATE TABLE 테이블_이름;

필드

필드 추가 ALTER TABLE 테이블_이름 ADD 칼럼_이름 [type];
필드 삭제 ALTER TABLE 테이블_이름 DROP 칼럼_이름;

🌠SELECT * FROM

SELECT

select문은 언제나 마지막에 실행된다
LIMIT로 출력 제한
count는 null값을 세지 못한다

와일드카드

*, %(0과1,하나이상의 문자), _(문자 하나) //[](문자 포함) -(범위) !

WHERE

범위는 포함으로 시작해서 미포함으로 끝난다
날짜도 문자열이란 사실을 잊지말자
BETWEEN 범위, IN은 열거값으로 OR boolean값 리턴

ORDER BY/GROUP BY

Where문 다음 Group by 서순 확인하기
정렬은 항상 마지막에

JOIN

INNER 교집합
left/right outer join 기준값 + 교차값
union all 합집합

별칭은 여러 테이블이 나와 필드값이 중복되면 무조건 사용
필드명과 형식이 같다고 무조건 같은 데이터라는 보장은 없다

INSERT/UPDATE/DELETE

SUbQUERY

with

SELECT문 쓰기전 별칭을 먼저 등록하자

Subquery

//bquery예시
SELECT CustomerId, CustomerId = (SELECT CustomerId FROM customers WHERE CustomerId = 2)
FROM customers
WHERE CustomerId < 6

SQL Learn 오답노트

SELECT FROM Customers WHERE Country NOT IN ('Norway', 'France');
SELECT
FROM Products WHERE Price NOT BETWEEN 10 AND 20;
SELECT FROM Customers AS Consumers;
SELECT
FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

가장 많은 고객이 있는 국가부터 고객의 수 나열
SELECT COUNT(CustomerID), Country 고객의 수 나열
FROM Customers
GROUP BY Country 국가부터
ORDER BY COUNT(CustomerID) DESC; 가장 많은 고객이

profile
갭린이 리나

0개의 댓글