이번 글에서는 저번 글에서 설명했던 내용 중 하나인 DML의 Select 대해서 설명해보려고 한다.
SQL을 직접 작성하면서는 처음 써보는 글이라 많이 어색하거나 부족한 부분도 있지만 열심히 써봐야겠다.
처음으로는 조회를 할 수 있는 Select 문에 대해서 정리를 해보려고 한다.
SQL문을 조금이라도 다뤄보았다면, 한번쯤은 사용해보았거나 봤을 것이다.
기본적인 문법은 다음과 같다.
SELECT (조회할 목록들) FROM (테이블 이름)
(부가적인 요소들)
WHERE (조건이 될 필드) = (조건 데이터)
GROUP BY (그룹화할 필드)
HAVING (그룹화 기준으로 조건이 될 필드) = (조건 데이터)
ORDER BY (정렬 기준 필드) [DESC, ASC];
SQL문의 각 요소들은 각자 정해져 있는 위치가 있으며 이를 잘 준수해서 작성해야한다.
이렇게만 보면 이해가 안될 것 같아 가장 많이 쓰이기도 하면서 간단한 다음 구문을 보고 확실히 이해해보자.
select * from member;
Member 테이블 결과 값
하나씩 살펴보도록 하자.
Select = 조회하겠다.
* = 모든 요소들을
from = ~ 로 부터
member = member 테이블 안
위와 같이 해석하여 합쳐보면, 이 구문의 뜻은 "member 테이블 안에 있는 모든 내용을 조회하겠다." 가 된다.
그렇다면 이번엔 뒤에 부가적인 요소들을 추가해서 더 자세하게 조회를 해보자.
WHERE (조건식)
where은 조건식이라고 생각하면 된다.
사용할 수 있는 요소들로는 between, in, like, = 이 있고 or이나 and 같은 것들도 사용가능하다.
정말 조건식 처럼 값을 비교하거나 비슷한 내용을 찾을 수 있다.
예시를 들어보자
select * from member where id = 0 and value = 300; // member 테이블 안에서 id가 0이고 value가 300인 모든 내용을 조회하겠다.
select * from member where name like '%_GG'; // member 테이블 안에서 name의 끝이 _GG 끝나는 모든 내용를 조회하겠다. ( %는 어떤 내용이든 올 수 있음 ex_ %d% 는 중간에 d가 들어가는 요소를 찾음 )
select * from member where value >= 200; // member 테이블 안에서 value 가 200보다 크거나 같은 모든 내용을 조회하겠다.
select * from member where value in(0, 100, 300); // member 테이블 안에서 value가 0, 100, 300인 모든 내용을 조회하겠다.
위와 같이 where 절을 통해서 우리는 조건을 추가해 요소들을 조회할 수 있다.
다음으로는 Group by와 Having 이다.
GROUP BY, HAVING (그룹별, 그룹 조건식)
group by와 having을 통해서는 데이터를 그룹으로 묶고 where과는 다른 그룹만을 위한 조건식을 추가 할 수 있다.
select * from member group by id; // member 테이블 안에서 id 컬럼을 기준으로 그룹화 하여 모든 내용을 조회하겠다.
select * from member group by id having id > 3; // member 테이블 안에서 id 컬럼을 기준으로 그룹화하는데 id가 3보다 큰 요소들을 골라 모든 내용을 조회하겠다
위와 같이 Group by를 통해 속성들을 그룹화 할 수 있으며, 그룹 조건 또한 추가 가능하다.
*** having과 where의 차이
각 구절은 둘 다 조건을 거는 역할을 하지만, 차이가 있다.
where 절은 select 문 뿐이 아니라 다른 곳에서도 사용이 되지만 having은 그렇지 않다.
또한 where 절은 필터를 먼저 설치한 후 조회를 하는 거라면, having은 그룹화를 먼저 한 후 필터를 거치게한다.
이는 각 구절의 순서로 생각하면 편하다.
where -> group by -> having 이기 때문에 구조를 알고 있다면 헷갈리지는 않을 것이라 생각된다.
***
ORDER BY (정렬)
Order by는 조회한 요소들을 정렬해주는 기능을 가지고 있다.
사용가능한 요소로는 DESC(내림차순)과 ASC(오름차순)이 있다.
select * from member order by id desc; // member 테이블 안에서 id를 기준으로 내림차순으로 모든 내용을 조회하겠다.
select * from member order by name asc; // member 테이블 안에서 name를 기준으로 오름차순으로 모든 내용을 조회하겠다.
참고로 asc는 기본 값이라 적지 않는다면 자동으로 적용된다는걸 알고있으면 좋을 것 같다.
위와 같이 Order by를 통해 내용들을 정렬하여 볼 수가있다.
이외에도 Join이라는 두 테이블을 함께 조회할 수 있는 것도 있지만 이는 좀 내용이 어렵기에 다음 글에서 집중적으로 다루도록 하겠다.
'오늘의 공부 > DB, SQL' 카테고리의 다른 글
서브쿼리 (이중SQL) (0) | 2022.04.14 |
---|---|
[SQL] DML - DELETE (0) | 2022.03.23 |
[SQL] DML - UPDATE (0) | 2022.03.20 |
[SQL] SELECT - JOIN (0) | 2022.03.20 |
[SQL] DB와 SQL (0) | 2022.03.20 |