본문 바로가기
SQL

기초 문법 - SELECT문으로 데이터 조회하기(WHERE, ORDER)

by d22pinsights 2024. 7. 17.

SELECT 열
FROM 테이블
WHERE 조건
ORDER BY 열

 

SELECT 문으로 열 조회하기

 

sakila 데이터베이스의 customer 테이블을 사용

 

USE saklia;

# 하나의 열 조회하기
SELECT first_name FROM customer;

# 2개의 열 조회하기
SELECT first_name, email FROM customer;

# 모든 열 조회
SELECT * FROM customer;

2개 이상의 열 조회할 때는 열 이름을 쉼표(,)로 구분해서 나열하면된다

모든 열을 조회할 때는 (*) 곱하기 기호를 사용하면 된다

SHOW COLUMNS FROM sakila.customer;

 

select * from을 통해 모든 열을 조회할 수도 있지만, 데이터의 양이 많아지면 속도가 느려진다

열 정보를 확인하고 싶다면 SHOW COLUMNS를 통해 확인하는 것이 좋다

 

WHERE 문으로 데이터 조회하기
# WHERE문, =연산자 사용
SELECT * FROM customer WHERE first_name = 'LINDA';

customer 테이블에서 first_name열이 LINDA인 데이터만 조회된다

 

=연산자 뿐만 아니라 비교연산자를 이용하여 데이터를 조회할 수도 있다

# address_id가 200 미만인 행 조회
select * from customer where address_id < 200;

# 데이터가 알파벳순으로 MARIA보다 앞에 위치한 행 조회
select * from customer where first_name<'MARIA';

#payment_date가 2005년 7월 9일 이전 날짜인 행 조회
select * from payment
where payment_date < '2005-07-09';

숫자, 문자, 날짜에도 비교 연산자를 사용할 수 있다

문자 데이터에 비교 연산자를 사용하면 알파벳 순으로 비교된다

 

 논리 연산자 사용하기
ALL 모든 비교 집합이 참일 경우 해당 데이터 조회
AND AND기준으로 양쪽의 bool 표현식이 모두 참이면 해당 데이터 조회
ANY 비교 집합 중 하나라도 참이면 해당 데이터 조회
BETWEEN 피연산자가 범위 내에 있으면 데이터 조회
EXISTS 하위 쿼리에 행이 포함되면 데이터 조회
IN 피연산자가 리스트 중 하나라도 포함되어 있으면 데이터 조회
LIKE 피연산자가 패턴과 일치하는 경우 데이터 조회
NOT 부울 연산자를 반대로 실행해 데이터 조회
OR OR를 기준으로 한쪽의 bool 표현식이 참이면 해당 데이터 조회
SOME 비교 집합 중 일부가 참인 경우 데이터 조회

 

 

# address_id가 5와 10 사이인 데이터 행 조회
select * from customer 
where address_id 
between 5 and 10;

#between 안 쓴 버전
select * from customer 
where (address_id >= 5) and (address_id <=10);

# 6월 17일과 6월 18일 사이인 데이터 행 조회
select * from payment
where payment_date
between '2005-06-17' and '2005-06-18';

# m~o 범위의 값을 제외한 데이터 조회
select * from customer
where first_name 
not between 'm' and 'o';

# OR연산자 사용
select * from customer
where first_name = 'maria' 
or first_name = 'linda';

 

여러 데이터를 조회하기 위해 OR를 여러번 사용할 수 있지만

그것보단 IN연산자를 사용하여 코드를 효율적으로 쓸 수 있다

select * from customer
where first_name = 'maria' 
or first_name = 'linda'
or first_name = 'nancy';

select * from customer
where first_name in ('maria','linda','nancy');

괄호 안에 쉼표를 사용해 조건을 나열한다

 

NULL 데이터 조회하기

NULL이란 데이터가 없는 상태를 말한다. 아예 정의되지 않은 값

#null이 있는 테이블 조회
select * from address;

# =연산자를 통해 null 찾기 > 결과는 찾을 수 없다
select * from address
where address2 = null;

# is null을 통해 address2 열에서 null데이터 조회
select * from address 
where address2 is null;

# null이 아닌 데이터는 is not null사용
select * from address 
where address2 is not null;

# 공백인 데이터 조회
select * from address 
where address2  = '';

address 테이블에는 address2 열이 null값을 가지고 있다

=연산자를 통해서는 null 데이터를 찾을 수 없다

null 데이터에는 is null 또는 is not null을 사용해야한다

공백은 null 값이 아니기 때문에 ' '으로 표현해야한다

 

ORDER BY문으로 데이터 정렬하기

 

오름차순 : ASC

내림차순 : DESC

정렬할 이름을 ORDER BY 문 뒤에 입력하면 된다

SELECT [열] FROM [테이블] WHERE [열] = [조건값] ORDER BY [열] [ASC 또는 DESC]
# first_name 기준으로 정렬
select * from customer 
order by first_name;

# store_id 기준 정렬 후, 같은 값이 있으면 first_name으로 정렬
select * from customer
order by store_id, first_name;

2개 이상의 열을 기준으로 정렬할 때는 입력 순서에 따라 정렬 우선순위가 정해진다

 

# 오름차순 정렬
select * from customer 
order by first_name asc;

# 내림차순 정렬
select * from customer 
order by first_name desc;

# store_id는 내림차순, first_name은 오름차순
select * from customer 
order by store_id desc, first_name asc;

order by 열 이름 뒤에 오름차순/ 내림차순을 작성하면 된다

각 열 뒤에 asc/desc 를 쓰고 쉼표로 연결해주면 각 열마다 정렬을 다르게 할 수 있다

 

LIMIT 상위 10개의 데이터 조회하기
select * from customer
order by store_id desc, first_name asc
limit 10;

limit 뒤에 숫자를 바꿔서 5개 7개 등 원하는 만큼 뽑을 수 있다

python과 R에서 쓰는 head와 같은 역할

 

select * from customer
order by customer_id asc
limit 100, 10;

limit 뒤에 숫자가 두개가 오면

limit a,b;

상위 a 다음 행부터, b개의 행을 조회하게 된다

위 예시는 101번째 행부터 10개 행을 조회함

 

select * from customer
order by customer_id asc
limit 10 offset 100;

OFFSET으로 특정 구간의 데이터를 조회할 수 있다

LIMIT 10 OFFSET 100이라고 쓰면

100개를 건너뛰고 101번째 데이터부터 행 10개를 조회하는 데이터이다

OFFSET은 반드시 LIMIT문과 함께 써야한다

 


SELECT 열 FROM 테이블 WHERE 조건 ORDER BY 열 LIMIT 개수;

 

 

참고 - Do it! MySQL로 배우는 SQL 입문(~4장 133p까지)