CH 01에서 "데이터는 표로 저장되고 SQL로 물어본다"는 큰 그림을 잡았죠. 이제 실제로 어느 열을, 어느 테이블에서, 어떤 조건으로 가져올지 직접 써 보는 장이에요. 한 줄씩 천천히 손에 익혀볼게요.
SELECT ~ FROM으로 원하는 열을 골라 조회할 수 있어요.WHERE로 조건에 맞는 행만 걸러낼 수 있어요.=, <>, >= 등)를 정확히 써요.AS 별칭으로 결과 열 이름을 보기 좋게 바꿀 수 있어요.FROM → WHERE → SELECT 순으로 처리된다는 감각을 잡아요.users 테이블을 계속 이어서 씁니다. id(번호), name(이름), age(나이) 세 열이 있어요. 아래 세 명이 들어 있다고 생각하고 예제를 따라와 주세요.| id | name | age |
|---|---|---|
| 1 | '철수' | 20 |
| 2 | '영희' | 25 |
| 3 | '민수' | 30 |
SELECT는 "어느 열을 가져올지", FROM은 "어느 테이블에서 가져올지"를 적어요. 이 둘은 거의 항상 함께 다녀요. 먼저 모든 열을 가져오는 SELECT *부터 봐요.
SELECT * -- 모든 열(id, name, age)을
FROM users; -- users 테이블에서 가져와라
별표(*)는 "전부"라는 뜻이에요. 그래서 위 쿼리는 users의 모든 열, 모든 행을 그대로 돌려줘요.
| id | name | age |
|---|---|---|
| 1 | '철수' | 20 |
| 2 | '영희' | 25 |
| 3 | '민수' | 30 |
필요한 열만 콕 집어 가져오려면 별표 대신 열 이름을 쉼표로 나열해요. 예를 들어 이름과 나이만 보고 싶다면:
SELECT name, age -- name과 age 열만
FROM users; -- users 테이블에서
| name | age |
|---|---|
| '철수' | 20 |
| '영희' | 25 |
| '민수' | 30 |
id 열이 결과에서 사라졌죠? 내가 적은 열만 나와요. 열의 순서도 내가 적은 대로 나옵니다(SELECT age, name이라 쓰면 나이가 앞에 와요).
SELECT *는 "객체 통째로", 특정 열 조회는 "필요한 필드만 꺼내 쓰기"에 가까워요.
;)으로 끝내요. 키워드(SELECT·FROM)는 대소문자를 안 가리지만, 관례로 대문자를 써서 눈에 잘 띄게 합니다.SELECT는 세로(열)를 골랐죠. 이제 가로(행)를 고를 차례예요. WHERE는 "조건에 맞는 행만 남겨라"라는 뜻이에요. 조건이 참(true)인 행만 결과에 들어와요.
SELECT *
FROM users
WHERE age >= 20; -- 나이가 20 이상인 행만
세 명 모두 나이가 20 이상이라, 이 경우엔 전부 통과해요. 조건을 더 좁혀 볼까요? 나이가 25 이상인 사람만:
SELECT name, age
FROM users
WHERE age >= 25; -- 25 이상만 통과
| name | age |
|---|---|
| '철수' | 20 ✗ |
| '영희' | 25 ✓ |
| '민수' | 30 ✓ |
철수(20)는 조건에 맞지 않아 걸러졌어요. 이번엔 이름으로 찾아볼게요. 여기서 중요한 규칙 하나 —
SELECT *
FROM users
WHERE name = '철수'; -- 문자열은 작은따옴표로 감싼다!
'철수'처럼 작은따옴표('…')로 감싸요. 감싸지 않으면 DB는 그걸 "열 이름"으로 오해해요.20처럼 따옴표 없이 그대로 씁니다.
💡 자바의 문자열은 큰따옴표("철수")지만, 표준 SQL의 문자열은 작은따옴표예요. 이 차이를 처음에 자주 헷갈려요. "SQL 문자열 = 작은따옴표"로 기억!
WHERE가 없으면 모든 행이 대상이 돼요(SELECT * FROM users;는 전부 조회). WHERE를 붙이는 순간 "이 조건을 통과한 행만"으로 좁혀지는 거예요.WHERE의 조건은 대부분 "이 값과 저 값을 비교"하는 형태예요. SQL의 비교 연산자를 표로 정리했어요.
| 연산자 | 뜻 | 예시 |
|---|---|---|
= | 같다 | age = 20 |
<> (또는 !=) | 같지 않다 | age <> 20 |
> | 크다 (초과) | age > 20 |
< | 작다 (미만) | age < 20 |
>= | 크거나 같다 (이상) | age >= 20 |
<= | 작거나 같다 (이하) | age <= 20 |
==(등호 두 개)를 쓰죠. 하지만 SQL은 등호 하나 = 로 비교해요. SQL에는 ==가 없어요.!=도 되지만, 표준 SQL은 <>를 정석으로 씁니다(둘 다 널리 통해요).
💡 정리: 같다 = = (자바의 == 아님), 같지 않다 = <> 또는 !=.
-- 20살이 "아닌" 사람
SELECT name, age
FROM users
WHERE age <> 20; -- '철수'(20) 제외, '영희'·'민수' 통과
>(초과)와 >=(이상)의 한 글자 차이가 결과를 가릅니다. "20 초과"는 20을 포함하지 않고, "20 이상"은 20을 포함해요. 경계값에서 자주 실수하니 조건을 적을 때 "이 값 자신도 들어가나?"를 항상 되물어 보세요.결과 표의 열 제목(헤더)을 보기 좋게 바꾸고 싶을 때 AS 별칭을 써요. 실제 테이블의 열 이름이 바뀌는 건 아니고, "이번 결과에서만" 표시 이름을 바꾸는 거예요.
AS로 결과 열에 새 표시 이름을 달아주는 걸 뜻해요. 나중에 배울 조인(CH 06)에서는 긴 테이블 이름을 짧게 부를 때도 이 별칭을 써요.SELECT name AS 이름, age AS 나이
FROM users;
| 이름 | 나이 |
|---|---|
| '철수' | 20 |
| '영희' | 25 |
| '민수' | 30 |
열 제목이 name·age에서 이름·나이로 바뀌었죠. AS는 생략할 수도 있어요 — SELECT name 이름처럼요(하지만 AS를 적으면 뜻이 더 또렷해서 초보 때는 적는 걸 권해요).
AS "회원 이름"처럼 큰따옴표(제품에 따라 백틱)로 감싸요. 지금은 "결과 헤더를 갈아입히는 스티커" 정도로 가볍게 기억하면 충분해요.우리는 문장을 SELECT → FROM → WHERE 순서로 씁니다. 그런데 데이터베이스가 실제로 처리하는 순서는 조금 달라요.
즉 DB는 먼저 어느 테이블인지 열고(FROM), 그다음 조건에 맞는 행만 남기고(WHERE), 마지막에 보여줄 열을 고른다(SELECT)는 거예요. 작성은 SELECT가 맨 앞이지만, 논리적으로는 FROM → WHERE → SELECT인 셈이죠.
filter(WHERE)로 먼저 걸러낸 뒤 map(SELECT)으로 필요한 값만 뽑아내는 스트림 흐름과 비슷해요.
SELECT 열 FROM 테이블; — SELECT는 "어느 열", FROM은 "어느 테이블". 모든 열은 SELECT *.WHERE 조건 — 조건이 참인 행만 남겨요. 문자열은 작은따옴표('철수'), 숫자는 그냥.=(같다) · <>/!=(같지 않다) · > · < · >= · <=. SQL의 같다는 = 하나(자바 == 아님).SELECT name AS 이름 — AS로 결과 열 제목(헤더)을 바꿔요. 표시용일 뿐, 원본 열 이름은 그대로.FROM → WHERE → SELECT — 테이블 열고 → 행 거르고 → 열 고르기.