혼자 공부하는 SQL - 2주차
- 2주차의 분량은 다음과 같습니다.
- 이번 장에서는 SQL 기본 문법, SELECT 문부터 입력, 수정, 삭제 뿐만 아니라 여러 건의 데이터를 그룹으로 묶는 방법을 알아보았습니다.
3-1. 기본 중에 기본 SELECT ~ FROM ~ WHERE
- SELECT 문에서 가장 핵심적인 것은 select ~ from ~ where 입니다.
- 모든 열을 가져오고 싶으면 select 뒤에 * 를 쓸 수 있으며, 특정 열을 가져오고 싶으면 열 이름을 줍니다.
- where 없이 조회하면 실제 서비스에서 수백만 건을 가져오는 것은 성능상 이슈가 생길 수 있어서, 기본적으로 select 문에서는 where 절과 함께 사용합니다.
WHERE 절!
- 관계 연산자, 논리 연산자
- 숫자로 표현된 데이터 범위를 관계 연산자를 사용(<=, >= 등)해 지정 가능합니다.
- 2가지 이상의 조건을 논리 연산자(AND, OR)를 사용해 조회가 가능합니다.
select mem_name, height, mem_number
from member
where height >= 165 and mem_number > 6;
- 범위에 있는 값을 구할 때에는 BETWEEN ~ AND도 사용 가능합니다.
select mem_name, height
from member
where height between 163 and 165;
- 문자에서는 in() 코드를 통해 포함되는 조건을 간결하게 사용 가능합니다.
select mem_name, addr
from member
where addr in('경기', '전남', '경남');
+--------------+--------+
| mem_name | addr |
+--------------+--------+
| 에이핑크 | 경기 |
| 블랙핑크 | 경남 |
| 잇지 | 경남 |
| 마마무 | 전남 |
| 여자친구 | 경기 |
+--------------+--------+
5 rows in set (0.00 sec)
- 문자열의 일부를 like를 사용해 조건 사용 가능합니다.
select * from member where mem_name like '우%';
+--------+--------------+------------+--------+--------+----------+--------+------------+
| mem_id | mem_name | mem_number | addr | phone1 | phone2 | height | debut_date |
+--------+--------------+------------+--------+--------+----------+--------+------------+
| SPC | 우주소녀 | 13 | 서울 | 02 | 88888888 | 162 | 2016-02-25 |
+--------+--------------+------------+--------+--------+----------+--------+------------+
1 row in set (0.00 sec)
서브쿼리
- select 안에 또다른 select가 들어가는 것을 말합니다.
select mem_name, height
from member
where height >
(select height from member where mem_name = '에이핑크');
+--------------+--------+
| mem_name | height |
+--------------+--------+
| 소녀시대 | 168 |
| 잇지 | 167 |
| 마마무 | 165 |
| 트와이스 | 167 |
| 여자친구 | 166 |
+--------------+--------+
5 rows in set (0.01 sec)
3-2. 좀 더 깊게 알아보는 SELECT 문
ORDER BY
- order by 로 결과 출력 순서를 조절할 수 있습니다. desc 는 내림차순, asc는 오름차순이며, 생략시 오름차순입니다.
- where 절과 함께 사용 가능하며, where 절 다음에 order by가 나와야 합니다.
- 또한, 한가지 조건이 동일할 때 다른 조건으로 정렬 조건을 붙힐 수 있습니다.
select mem_id, mem_name, debut_date, height
from member
where height >= 164
order by height desc, debut_date asc;
+--------+--------------+------------+--------+
| mem_id | mem_name | debut_date | height |
+--------+--------------+------------+--------+
| GRL | 소녀시대 | 2007-08-02 | 168 |
| TWC | 트와이스 | 2015-10-19 | 167 |
| ITZ | 잇지 | 2019-02-12 | 167 |
| WMN | 여자친구 | 2015-01-15 | 166 |
| MMU | 마마무 | 2014-06-19 | 165 |
| APN | 에이핑크 | 2011-02-10 | 164 |
+--------+--------------+------------+--------+
6 rows in set (0.00 sec)
출력의 개수를 제한 : LIMIT
- limit은 출력하는 개수를 제한합니다.
- limit의 형식은
limit 시작, 개수
로 하나만 쓸 경우 시작값은 0이 됩니다.
select mem_name, height from member order by height desc limit 3, 2;
+--------------+--------+
| mem_name | height |
+--------------+--------+
| 여자친구 | 166 |
| 마마무 | 165 |
+--------------+--------+
2 rows in set (0.00 sec)
중복된 결과를 제거 : DISTINCT
- distinct를 사용하면 중복 데이터를 1개만 남기고 제거합니다.
select distinct addr from member;
GROUP BY 절 + having 절
- group by 절은 그룹으로 묶어 주는 역할을 하는데, 주로 sum(), avg() 등 집계함수와 함께 사용됩니다.
- 또한, 조건문은 where 대신 having 절을 사용해야 합니다.
select mem_id "회원 아이디", sum(price * amount) "총 구매 금액"
from buy
group by mem_id
having sum(price * amount) >= 1000 order by sum(price * amount) desc;
+------------------+-------------------+
| 회원 아이디 | 총 구매 금액 |
+------------------+-------------------+
| MMU | 1950 |
| BLK | 1210 |
+------------------+-------------------+
2 rows in set (0.00 sec)
3.3 데이터 변경을 위한 SQL문
데이터 입력 : INSERT
- 데이터베이스 변경은 INSERT, UPDATE, DELETE를 통해 변경합니다.
- insert문의 기본 문법은 다음과 같고, 넣고 싶은 열만 골라 넣을 수 있으며, 모든 열을 insert할 시, 테이블명 뒤의 열이름을 생략할 수 있습니다. (단, values 내의 열의 순서가 알맞아야 함.)
insert into 테이블 [(열1, 열2, ...)] values (값1, 값2, ...);
- AUTO_INCREMENT는 열을 정의할 때 1부터 증가하는 값을 입력해줍니다. insert에서 해당 열이 없다고 생각하고 입력하면 됩니다.
데이터 수정 : UPDATE
- 기존 입력 값을 수정하는 명령으로 형식은 다음과 같습니다.
UPDATE 테이블_이름
SET 열1=값1, 열2=값2 ...
WHERE 조건 ;
데이터 삭제 : DELETE
- 테이블의 행 데이터를 삭제하는 경우도 delete 를 사용해 행 데이터를 삭제 가능합니다.
delete from 테이블이름 where 조건;
기본 미션!
- 138p. 2번
- 다음 보기 중에서 각 문항의 빈칸에 들어갈 것을 고르세요.
[like, desc, order by, distinct, asc, and, or, >=, limit]
- select * from member [order by] height;
- select * from member [limit] 5, 2;
- select [distinct] phone1 from member;
선택 미션!
데이터 입력 형식
insert into 테이블 [(열1, 열2, ...)] values (값1, 값2, ...)
- 모든 열을 insert할 시, 테이블명 뒤의 열이름을 생략할 수 있습니다. (단, values 내의 열의 순서가 알맞아야 함.)
삭제하는 기본 형식
delete from 테이블이름 where 조건;
이번 주 회고
- 블로그가 아직까지는 서툰 저는 내용 정리를 할 때, 공부한 내용을 다 쓰되, 간략하게 하고 싶다는 고민을 계속합니다. (현재까지는 너무 장황하다는 생각도 들고, 책의 내용을 너무 많이 내포하고 있다는 생각도 들었습니다:( )
- 글을 아직 많이 써보지 않아서 그렇다고 생각해서 블로그 글 또한, 개발을 할 때처럼 리팩토링(?)을 해나가면 되지 않을까....하는 생각이 듭니다(ㅎㅎㅎㅎ)
- sql 관련 책이다보니 sql문을 쓰고 결과문이 없으면 답답할 것 같아서 일단은 대부분 터미널로 실행 후 복사해 포함을 시켰지만, 굳이 다 포함을 시키지 않아도 되나...하는 생각도 듭니다. (나중에는 없어져 있을지도...?ㅎㅎㅎ)