2019년 9월 5일 목요일

SQL: JOIN

animal_outs 테이블에는 있지만 animal_ins 테이블에는 없는 데이터를 조회하고 싶은 경우 아래 코드를 실행하면 된다.

1
2
3
4
5
SELECT outs.animal_id, outs.name
FROM animal_ins ins
RIGHT JOIN animal_outs outs ON ins.animal_id = outs.animal_id
WHERE ins.animal_id is null
-- animal_outs에는 있지만 animal_ins에는 없는 데이터를 추출하는 조건
ORDER BY outs.animal_id;
cs

2019년 9월 4일 수요일

SQL: HAVING

아래의 코드는 animal_ins 테이블에서 name 열을 기준으로 name count가 2 이상인 경우에만 그룹핑을 한 다음  name열과 name count를 조회한다.

1
2
3
4
SELECT name, count(name) count
FROM animal_ins
GROUP BY name
HAVING count > 1;
cs

'name count가 2 이상' 조건을 사용하기 위해 WHERE 절을 사용할 수 있겠다고 생각하여 아래의 코드를 작성하였습니다.

1
2
3
4
SELECT name, count(name) count
FROM animal_ins
WHERE count > 1
GROUP BY name;
cs

하지만 아래의 에러가 발생하였습니다. WHERE 절에서는 SELECT 절에서 설정한 열의 별명을 사용할 수 없었습니다.

SQL 실행 중 오류가 발생하였습니다.
Unknown column 'count' in 'where clause'

그래서 별명 count를 사용하지 않고 count(name)을 사용하여 아래의 코드를 작성하였습니다.

1
2
3
4
SELECT name, count(name) count
FROM animal_ins
WHERE count(name) > 1
GROUP BY name;
cs

하지만 아래의 에러가 발생하였습니다. WHERE 절에서는 count와 같은 그룹핑 함수를 사용할 수 없었습니다.

SQL 실행 중 오류가 발생하였습니다.
Invalid use of group function

위와 같은 과정을 통해 HAVING 절과 WHERE 절의 역할을 이해할 수 있었습니다. 그룹핑 함수를 이용하여 조건을 적용하고 싶다면 HAVING을 사용해야 합니다.

2019년 9월 3일 화요일

SQL: 최솟값 구하기

아래의 코드는 datetime의 최솟값을 조회합니다.
1
2
SELECT min(datetime)
FROM animal_ins;
cs

SELECT 절에서 min(열의 이름)을 사용하여 특정 열의 최솟값을 조회할 수 있습니다.

SQL: 특정 열의 NULL 조회하기

아래 코드는 animal_ins 테이블에서 name이 NULL인 데이터의 animal_id를 조회할 수 있다.
1
2
3
SELECT animal_id
FROM animal_ins
WHERE name is null
cs

특정 열의 NULL 값을 조회하려면 WHERE 절에서
'열 이름 is null'
을 작성하면 된다.
1
2
3
SELECT *
FROM 테이블의 이름
WHERE 열의 이름 is null
cs

만약 NULL 값을 제외한 데이터를 조회하려면
'열 이름 is not null'
을 작성하면 된다.
1
2
3
SELECT *
FROM 테이블의 이름
WHERE 열의 이름 is not null
cs