티스토리 뷰

 

초보자가 꼭 알아야 하는 SQL 핵심 개념
👉 “실무에서 자주 쓰는 순 + 이해 중심”으로 정리해줄게.


🔥 SQL 핵심 개념 15개 (초보 필수)


1️⃣ SELECT – 데이터 조회 (기본 중의 기본)

 
SELECT * FROM tb_member;
 

👉 테이블 전체 조회

 
SELECT id, name FROM tb_member;
 

👉 필요한 컬럼만 조회

✔️ 가장 많이 쓰는 기본 구조:

 
SELECT 컬럼들 FROM 테이블;
 

2️⃣ WHERE – 조건 걸기

 
SELECT * FROM tb_member
WHERE id = 'kim';
 

👉 조건에 맞는 데이터만 가져옴


자주 쓰는 조건

 
WHERE age >= 20
WHERE name LIKE '%김%'
WHERE id IN ('kim', 'lee')
WHERE email IS NULL
 

3️⃣ ORDER BY – 정렬

 
SELECT * FROM posts
ORDER BY idx DESC;
 

👉 최신글부터 (내림차순)

 
ORDER BY name ASC;
 

👉 오름차순


4️⃣ LIMIT – 개수 제한 (페이징 핵심)

 
SELECT * FROM posts
LIMIT 10;
 

👉 10개만 가져오기

 
LIMIT 10 OFFSET 20;
 

👉 21~30번째 데이터


5️⃣ INSERT – 데이터 추가

 
INSERT INTO tb_member (id, pw, name)
VALUES ('kim', '1234', '김철수');
 

👉 회원 추가


6️⃣ UPDATE – 데이터 수정

 
UPDATE tb_member
SET name = '김영희'
WHERE id = 'kim';
 

👉 특정 데이터 수정

⚠️ WHERE 안 쓰면 전체 수정됨 (진짜 위험)


7️⃣ DELETE – 데이터 삭제

 
DELETE FROM tb_member
WHERE id = 'kim';
 

👉 특정 데이터 삭제

⚠️ 이것도 WHERE 필수


8️⃣ JOIN – 테이블 연결 (중요도 ⭐⭐⭐⭐⭐)

너 프로젝트에서 핵심임

 
SELECT p.title, m.name
FROM posts p
JOIN tb_member m ON p.user_id = m.id;
 

👉 게시글 + 작성자 이름 가져오기


종류

 
INNER JOIN  -- 둘 다 있는 데이터만
LEFT JOIN   -- 왼쪽 기준 (더 많이 씀)
 

9️⃣ GROUP BY – 묶어서 계산

 
SELECT user_id, COUNT(*) 
FROM posts
GROUP BY user_id;
 

👉 유저별 글 개수


🔟 COUNT / SUM / AVG – 집계 함수

 
SELECT COUNT(*) FROM posts;
SELECT AVG(age) FROM tb_member;
SELECT SUM(price) FROM orders;
 

👉 개수 / 평균 / 합계


1️⃣1️⃣ AS – 별명 붙이기

 
SELECT name AS username FROM tb_member;
 

👉 컬럼 이름 바꾸기


1️⃣2️⃣ 서브쿼리 – 쿼리 안에 쿼리

 
SELECT name,
    (SELECT COUNT(*) FROM posts WHERE user_id = m.id) AS post_count
FROM tb_member m;
 

👉 “각 회원의 글 개수”


1️⃣3️⃣ LIKE – 문자열 검색

 
WHERE name LIKE '%김%'
 

👉 김이 포함된 이름

  • % → 아무거나
  • _ → 한 글자

1️⃣4️⃣ IN – 여러 값 비교

 
WHERE id IN ('kim', 'lee', 'park');
 

👉 여러 값 중 하나


1️⃣5️⃣ NULL 처리 (IS NULL)

 
WHERE email IS NULL;
 

👉 이메일 없는 사람

 
WHERE email IS NOT NULL;
 

🔥 초보자 실전 패턴 (이건 꼭 외워)


✅ 게시판 목록 (너 프로젝트 스타일)

 
SELECT p.*, m.name AS writer
FROM posts p
JOIN tb_member m ON p.user_id = m.id
ORDER BY p.idx DESC
LIMIT 10;
 

✅ 검색 기능

 
WHERE title LIKE '%검색어%'
   OR content LIKE '%검색어%'
   OR m.name LIKE '%검색어%'
 

✅ 로그인 체크

 
SELECT * FROM tb_member
WHERE id = 'kim' AND pw = '1234';
 

✅ 회원별 글 개수 (서브쿼리)

 
SELECT m.id,
       (SELECT COUNT(*) FROM posts p WHERE p.user_id = m.id) AS post_count
FROM tb_member m;
 

🔥 SQL 빨리 늘리는 방법

이건 진짜 중요한 팁👇


1️⃣ 무조건 많이 쳐보기

👉 눈으로 보는 것보다 직접 작성이 훨씬 중요


2️⃣ “패턴”으로 외워라

  • SELECT + WHERE
  • JOIN 구조
  • LIMIT 페이징
  • 서브쿼리

👉 이 4개만 익혀도 실무 가능


3️⃣ 틀리는 걸 두려워하지 말기

SQL은:
👉 “에러 보면서 배우는 언어”야


4️⃣ 네 프로젝트 기준으로 연습하기 (중요)

너한테는 이 3개만 반복하면 됨:

  • 게시글 목록
  • 검색
  • 회원 + 게시글 연결

🔥 마지막 핵심 정리

👉 SQL은 어렵다기보다
👉 “문장 구조에 익숙하지 않은 것”뿐이야

 

 


 

 

내 질문:

SELECT user_id, COUNT(*)

FROM posts

GROUP BY user_id;

 

에서 COUNT(*)는 그럼 posts의 모든 칼럼을 센다는 의미인 거야?

 

 

좋은 포인트 짚었어 👍 여기 헷갈리는 사람 진짜 많아.

결론부터 말하면 👇


🔥 COUNT(*)의 진짜 의미

👉 “행(row)의 개수를 센다”
❌ 컬럼 개수 아님
❌ 모든 칼럼을 세는 것도 아님


🔹 다시 네 쿼리 보면

 
SELECT user_id, COUNT(*) 
FROM posts
GROUP BY user_id;
 

👉 이게 하는 일

  1. GROUP BY user_id
    → user_id가 같은 행끼리 묶음
  2. COUNT(*)
    그 그룹 안에 있는 “행 개수”를 셈

🔹 예시로 보면 바로 이해됨

posts 테이블:

idxuser_idtitle
1 kim 글1
2 kim 글2
3 lee 글3

👉 실행 결과

user_idCOUNT(*)
kim 2
lee 1

👉 kim은 2개의 “행”이 있으니까 2
👉 lee는 1개의 “행”이 있으니까 1


🔹 그럼 COUNT(*)의 * 는 뭐냐?

여기서 *는:

👉 “모든 컬럼”이 아니라
👉 “이 행이 존재하면 1로 치겠다”는 의미


🔹 헷갈리기 쉬운 비교

1️⃣ COUNT(*)

 
COUNT(*)
 

👉 행 개수 (NULL 포함, 무조건 셈)


2️⃣ COUNT(컬럼)

 
COUNT(email)
 

👉 email 값이 있는 행만 셈 (NULL 제외)


📌 예시

idemail
1 a@a.com
2 NULL
3 b@b.com

 
COUNT(*) = 3
COUNT(email) = 2
 

🔥 핵심 정리

  • COUNT(*)
    👉 행 개수
  • COUNT(컬럼)
    👉 NULL 아닌 값 개수

🔥 한 줄로 기억

👉 COUNT(*) = 줄 개수 세기

 

 

By. ChatGPT