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까지)
'SQL' 카테고리의 다른 글
기초 문법 - 되새김 문제 (0) | 2024.07.26 |
---|---|
기초 문법 - 테이블 생성 및 조작 (0) | 2024.07.21 |
기초 문법 - GROUP BY문으로 데이터 조회하기 (0) | 2024.07.20 |
기초 문법 - 와일드 카드로 조회하기 : Like[조건값] (0) | 2024.07.18 |
기초 문법 - DDL과 DML (0) | 2024.07.15 |