[혼공학습단, 혼공SQL] 2주차 Chap 03. SQL 기본 문법

Jihun Kim·2023년 7월 14일
0
post-thumbnail

혼자 공부하는 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 테이블_이름
    SET1=1,2=2 ...
    WHERE 조건 ;

데이터 삭제 : DELETE

  • 테이블의 행 데이터를 삭제하는 경우도 delete 를 사용해 행 데이터를 삭제 가능합니다.
delete from 테이블이름 where 조건;

기본 미션!

  • 138p. 2번
  • 다음 보기 중에서 각 문항의 빈칸에 들어갈 것을 고르세요.
[like, desc, order by, distinct, asc, and, or, >=, limit]
  1. select * from member [order by] height;
  2. select * from member [limit] 5, 2;
  3. select [distinct] phone1 from member;

선택 미션!

  • 데이터 입력, 삭제하는 기본 형식 작성하기.

데이터 입력 형식

insert into 테이블 [(1,2, ...)] values (1,2, ...)
  • 모든 열을 insert할 시, 테이블명 뒤의 열이름을 생략할 수 있습니다. (단, values 내의 열의 순서가 알맞아야 함.)

삭제하는 기본 형식

delete from 테이블이름 where 조건;
  • delete는 행 단위로 삭제합니다.

이번 주 회고

  • 블로그가 아직까지는 서툰 저는 내용 정리를 할 때, 공부한 내용을 다 쓰되, 간략하게 하고 싶다는 고민을 계속합니다. (현재까지는 너무 장황하다는 생각도 들고, 책의 내용을 너무 많이 내포하고 있다는 생각도 들었습니다:( )
  • 글을 아직 많이 써보지 않아서 그렇다고 생각해서 블로그 글 또한, 개발을 할 때처럼 리팩토링(?)을 해나가면 되지 않을까....하는 생각이 듭니다(ㅎㅎㅎㅎ)
  • sql 관련 책이다보니 sql문을 쓰고 결과문이 없으면 답답할 것 같아서 일단은 대부분 터미널로 실행 후 복사해 포함을 시켰지만, 굳이 다 포함을 시키지 않아도 되나...하는 생각도 듭니다. (나중에는 없어져 있을지도...?ㅎㅎㅎ)
profile
backend studying

0개의 댓글