SQL에서 데이터를 검색하는 가장 기본적인 방법은 SELECT 문을 사용하는 것이다.
그러나 단순히 SELECT 만 사용해서는 데이터를 가져올 수 없다.
어디서 데이터를 가져올지(FROM), 어떤 조건을 만족하는 데이터를 가져올지(WHERE)도 함께 명시해야 한다.
SELECT FROM WHERE 기본 구조SELECT * FROM players;
📌 * : 모든 열(column)의 데이터를 가져온다.
📌 FROM players : players 테이블에서 데이터를 조회한다.
SELECT nameFirst, nameLast, birthYear FROM players;
📌 nameFirst, nameLast, birthYear 열만 가져온다.
📌 * 대신 특정 열을 지정하면 필요한 데이터만 가져올 수 있다.
WHERE 절을 사용한 조건 검색데이터를 조회할 때 특정 조건을 만족하는 행(row)만 가져올 수 있다.
SELECT nameFirst, nameLast, birthYear FROM players WHERE birthYear = 1974;
📌 WHERE birthYear = 1974 : 1974년에 태어난 선수만 조회한다.
AS를 이용한 별칭(Alias)SELECT nameFirst AS FirstName, nameLast AS LastName FROM players;
📌 AS FirstName : nameFirst 열을 FirstName 으로 표시
📌 AS LastName : nameLast 열을 LastName 으로 표시
WHERE 조건 연산자| 연산자 | 의미 | 예제 |
|---|---|---|
= | 같다 | WHERE birthYear = 1974 |
!= 또는 <> | 다르다 | WHERE birthCountry != 'USA' |
> | 크다 | WHERE birthYear > 1980 |
< | 작다 | WHERE birthYear < 1980 |
>= | 크거나 같다 | WHERE birthYear >= 1980 |
<= | 작거나 같다 | WHERE birthYear <= 1980 |
AND, OR 조건SELECT nameFirst, nameLast, birthYear, birthCountry
FROM players
WHERE birthYear = 1974 AND birthCountry != 'USA';
📌 AND : 두 조건을 모두 만족하는 데이터만 조회
📌 1974년 출생이면서, 출생지가 미국이 아닌 사람 조회
SELECT nameFirst, nameLast, birthYear, birthCountry
FROM players
WHERE birthYear = 1974 OR birthCountry != 'USA';
📌 OR : 하나의 조건만 만족해도 조회
📌 1974년 출생이거나, 출생지가 미국이 아닌 사람 조회
SELECT nameFirst, nameLast, birthYear, birthCountry
FROM players
WHERE birthYear = 1974 OR (birthCountry != 'USA' AND weight > 185);
📌 괄호 사용 (())
📌 AND의 우선순위가 OR 보다 높기 때문에, 명확한 조건을 위해 괄호를 사용
NULL 값 조회NULL은 데이터가 없음(none) 을 의미하며, = 연산자로 비교할 수 없다.
NULL 값 조회SELECT nameFirst, nameLast, birthYear, birthCountry FROM players WHERE deathYear IS NULL;
📌 IS NULL : deathYear 값이 없는 선수 조회
NULL이 아닌 값 조회SELECT nameFirst, nameLast FROM players WHERE birthCity IS NOT NULL;
📌 IS NOT NULL : birthCity 값이 존재하는 선수 조회
LIKE)LIKE 연산자SQL에서 특정 패턴을 만족하는 데이터를 조회할 때 LIKE 을 사용한다.
| 와일드카드 | 의미 |
|---|---|
% | 임의의 문자열 (0개 이상) |
_ | 특정 한 글자만 |
SELECT birthCity FROM players WHERE birthCity LIKE 'NEW%';
📌 NEW% : "NEW"로 시작하는 모든 데이터 검색 (예: NEW YORK, NEW HAVEN)
SELECT birthCity FROM players WHERE birthCity LIKE 'NEW_';
📌 NEW_ : "NEW" 다음에 한 글자가 있는 데이터 검색 (예: "NEWA", "NEWB")
SELECT birthCity FROM players WHERE birthCity LIKE 'NEW Yor_';
📌 NEW Yor_ : "NEW York" 다음 한 글자가 있는 데이터 검색 (예: "NEW YorkA")
ORDER BY (정렬)ASC 생략 가능)SELECT * FROM players WHERE birthYear IS NOT NULL ORDER BY birthYear;
📌 ORDER BY birthYear : 출생 연도를 기준으로 오름차순 정렬 (기본값)
DESC)SELECT * FROM players WHERE birthYear IS NOT NULL ORDER BY birthYear DESC;
📌 ORDER BY birthYear DESC : 출생 연도를 기준으로 내림차순 정렬
SELECT * FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear DESC, birthMonth DESC, birthDay DESC;
📌 ORDER BY birthYear DESC, birthMonth DESC, birthDay DESC
📌 출생 연도 → 월 → 일 순서로 정렬
TOP (상위 데이터 조회)TOP N : 상위 N개 데이터 조회SELECT TOP 1000 * FROM players WHERE birthYear IS NOT NULL ORDER BY birthYear DESC;
📌 TOP 1000 : 상위 1000개 데이터만 조회
TOP N PERCENT : 상위 N% 데이터 조회SELECT TOP 1 PERCENT * FROM players WHERE birthYear IS NOT NULL ORDER BY birthYear DESC;
📌 TOP 1 PERCENT : 상위 1%의 데이터만 조회
OFFSET & FETCH (중간 범위 조회)TOP은 상위 데이터만 가져올 수 있지만, 특정 범위(예: 100~200위)를 가져오려면 OFFSET과 FETCH를 사용해야 한다.
SELECT * FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear DESC
OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY;
📌 OFFSET 100 ROWS : 처음 100개 데이터를 건너뜀
📌 FETCH NEXT 100 ROWS ONLY : 다음 100개 데이터를 가져옴