우당탕탕 풀스택 도전기

[DB]SQL 기초 총정리

림졍 2025. 5. 20. 13:08
728x90
반응형

 

어쩌겠어. 해야지.

 

 

 

오랜만임둥. 열분.

프로젝트 제대로 시도하기에 앞서..이것저것 만지고 헤딩하면서 습득을 하고 있던 림졍입니다.

아니 글쎄 백엔드까지 배워서 풀스택 간다는 녀석이 가장 기본적인 개념정리를 안하고 있었지 뭡니까...🤦🏻‍♂️

 

그래서 오늘은 그동안 최종 프로젝트때 깡통이랑 대화하면서

'딸깍' 하나로 행복하게 만들었던 SQL에 대해 정리를 해보고자 합니다..

(아니 서버만지면서 이걸 이해도 못하고 써버리면 안되잖아요?)

가시죠. 

 

SQL 기초 총정리

서버랑 DB가 무슨 말로 대화하냐고요? SQL이요.

 

착하지 내 DB...(?)

 

 

SQL이란?

  • Structured Query Language의 줄임말
  • 데이터베이스(DB)에 저장된 데이터를 조회, 삽입, 수정, 삭제할 수 있는 언어
  • 테이블 기반으로 구성된 관계형 데이터베이스(RDB)에서 데이터를 다루는 핵심 도구

예시로 클라이언트에서 “어떤 유저의 데이터를 달라!” 면서 서버한테 요청하면 (API)

서버는 그 요청을 SQL로 변환해서 DB에 전달하게 되면 DB는 데이터를 찾아주는 형식이라고 보면 된다. 

 

결론적으로  SQL = 서버와 DB 간의 의사소통 수단!

 

 

1. 데이터베이스(Database)와 테이블(Table)

  • 데이터베이스(Database, 일명 DB) - 데이터를 담는 ‘폴더’ 개념 (= 큰 폴더!). 여러 개의 테이블 포함.
  • 테이블(Table) - 엑셀처럼 행(Row)과 열(Column)로 구성된 데이터 단위
  • Row(행) - 하나의 데이터 / ex) 유저 (1명)
  • Column(열) - 속성 / ex) 이름, 나이
-- 데이터베이스 생성
CREATE DATABASE myDB;

-- 테이블 생성
CREATE TABLE students (
  id INT,
  name VARCHAR(50),
  age INT
);

 

 

 

2. 데이터 조작 언어(DML) - CRUD

 

+) DML - Data Manipulation Language, 데이터 조작 언어 (= 저장된 데이터 활용을 위한 명령어집합)

 

- 데이터 삽입 예시 (INSERT)

INSERT INTO users (id, name, age) VALUES (1, '림졍', 28);

 

- 데이터 조회 (SELECT)

SELECT name, age FROM user;
SELECT * FROM user WHERE age > 20;
SELECT * FROM user ORDER BY age DESC;
SELECT * FROM user LIMIT 5;

 

- 데이터 수정 (UPDATE)

UPDATE user SET age = 26 WHERE id = 1;

 

- 데이터 삭제 (DELETE)

DELETE FROM user WHERE id = 1;

 

 

3. 제약조건과 관계 설정 (기본 키 / 외래 키)

  • 기본 키 (Primary Key) - 각 행을 고유하게 식별하는 열
  • 외래 키 (Foreign Key) - 다른 테이블의 기본 키를 참조하여 테이블 간의 관계 설정

- 예시

CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  user_id INT,
  FOREIGN KEY (user_id) REFERENCES users(id)
);

 

 

4. 집계 함수 (Aggregate Functions)

  • 숫자들을 모아서 통계처럼 처리할 때 사용

- 예시

SELECT COUNT(*) FROM users;     -- 전체 유저 수
SELECT SUM(age) FROM users;     -- 나이 총합
SELECT AVG(age) FROM users;     -- 평균 나이
SELECT MAX(age) FROM users;     -- 최댓값
SELECT MIN(age) FROM users;     -- 최솟값

 

 

5. 조건문 (WHERE)

  • AND, OR, NOT 등을 조합하여 다양한 조건식 구성
SELECT * FROM users WHERE age > 20 AND name = '림졍';
SELECT * FROM users WHERE age > 20 OR name = '림됴';
SELECT * FROM users WHERE NOT age > 20;

 

 

6. GROUP BY - 그룹별로 묶기

 

데이터를 특정 컬럼 기준으로 그룹화하여 집계

 

- 예시

  • 같은 나이인 유저의 수를 집계해서 나이별 인원수를 볼 수 있음
  • GROUP BY와 집계 함수(COUNT, SUM, AVG 등)는 세트로 사용
SELECT age, COUNT(*) FROM users GROUP BY age;

 

 

7. JOIN

 

정규화된 여러 테이블을 조건에 따라 이어붙일 때 사용 (= 관계형 DB에 테이블 간의 관계를 맺어주는 연결 고리)

 

- INNER JOIN : 두 테이블의 공통된 키가 존재할 때만 결과 반환

  • 유저가 있고, 주문도 있을 때만 출력 (= 교집합)
SELECT users.name, orders.order_id
FROM users
JOIN orders ON users.id = orders.user_id;

 

 

- LEFT JOIN (LEFT OUTER JOIN) : 왼쪽 테이블(users)은 모두 가져오고, 오른쪽 테이블(orders)이 일치하면 같이 가져옴

  • 유저는 다 나오고, 주문이 없으면 NULL
  • “왼쪽 기준”으로 연결
SELECT students.name, orders.order_id
FROM students
LEFT JOIN orders ON students.id = orders.student_id;

 

 

- RIGHT JOIN (RIGHT OUTER JOIN) : 오른쪽 테이블(orders)은 모두 가져오고, 왼쪽(users)이 일치하면 같이 출력

  • 주문은 다 나오고, 유저가 없으면 NULL
  • “오른쪽 기준”으로 연결
SELECT users.name, orders.order_id
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

 

뭐 주문보다 유저가 많으면.. 이렇게 되는거지뭐...

 

-FULL OUTER JOIN : 왼쪽 또는 오른쪽 중 하나라도 있으면 전부 출력

  • 유저만 있어도, 주문만 있어도, 둘 다 있어도 출력
  • 없는 쪽은 NULL로 채워짐 (= 합집합)
  • PostgreSQL은 지원, MySQL은 별도 방법 필요
SELECT users.name, orders.order_id
FROM users
FULL OUTER JOIN orders ON users.id = orders.user_id;

 

 

[ 정리 ]

역시 짤보다 더 이해하기 쉬운 것은 없다.

INNER JOIN 양쪽 다 있을 때만 usersorders (교집합)
LEFT JOIN users는 무조건 포함 users + 매칭되는 orders (왼쪽 기준)
RIGHT JOIN orders는 무조건 포함 orders + 매칭되는 users (오른쪽 기준)
FULL OUTER JOIN 둘 중 하나라도 있으면 포함 usersorders (합집합)

 

 

8.  서브쿼리 (SubQuery)

 

쿼리 안에 또 다른 쿼리를 넣는 방식. 유사 중첩 if문

보통 WHERE 절, FROM 절, SELECT 절 등에 사용

(중첩 조건을 간결하게 표현할 수 있어서 복잡한 조건식이나 분석에 자주 사용)

-- 나이가 평균보다 높은 유저 조회
SELECT name, age 
FROM users 
WHERE age > (SELECT AVG(age) FROM users);
-- 주문한 유저(들)의 이름 조회
SELECT name 
FROM users 
WHERE id IN (SELECT user_id FROM orders);

 

 

마무리 -  할일은 많고..  내몸은 하나다.

 

그거 업무폭탄이야...

 

 

어제 듣이어 미국갔던 혈육이 돌아왔다..!!

그리고... 할일이 무쟈게 많아졌다..

기획도 짜고 일도 하고 디자인도... ㅎㅎ (이거맞나)

뭐 물론 바쁘게 사는 삶은 좋지만..

앉아있으면서 늘어난 살은 좀 빼고싶네요.

여튼 오늘은 여기서 마무리짓겠습니다. 굳바3.

 

 

 

오늘의 KPT 회고

 

Keep: 이대로 킵고잉.

Problem: 몸이 햄들어요.... 매우.

Try: 차근차근히 해보기. 그리고 건강관리 잘하기. (운동 좀 하고살기.)

728x90
반응형