MySQL로 데이터베이스를 관리하는 기본적인 개념에 대해서 살펴보자.
목차
데이터베이스(Database)
1. 행 개수 구하기 count
SQL : "데이터 집합"을 다루는 언어
집계함수 : Aggregation Func
1.1. count()
select count(*) from 테이블;
- 주어진 집합의 개수를 반환
- “select count(*) from 테이블” 에서 * 표시는 모든 열을 대상으로 행 개수를 반환
- 또한 count 집계함수로 행의 개수를 구할 수 있음
◆ count 와 where 구로 조건에 맞는 집합의 개수를 반환할수도 있음.
◆ Null의 경우
- count 집계함수의 인수로 컬럼을 지정할 경우 NULL 값이 있으면 제외하고 집계처리
- *를 인수를 사용할 경우 특정 컬럼에 NULL이 있어도 무시하고 전 테이블의 행의의 개수를 반환
◆ 중복 여부
- 집합을 다룰 때, 집합 안에 중복 값의 여부를고려해야 하는 경우가 있음
- 집합 안에 유일한 값을 갖기 위하여 distinct 키워드를 사용
- 중복을 포함하여 모든 집합을 조회하려면 all 키워드를 사용하지만 default가 all 이므로 일반적으로는 생략하고 사용
1.2 count 이외의 집계함수
◆ sum() : 집합의 값을 합산하는 함수
- 수치형만 가능
- 문자형이나 날짜형 사용불가
- NULL 값은 제거하고 합산
◆ avg() : 산술평균을 구하는 함수
- 수치형만 가능
- 문자형이나 날짜형은 사용불가
- NULL 값은 제거하고 산술평균
- 만약 NULL을 0으로 간주해서 평균을 계산할 경우에는 case 문으로 변환
◆ min() max() : 최대, 최소
- 숫자, 문자, 날짜형 모두 사용가능
- NULL 값은 제외
2. 그룹화(Group by)
2.1. 그룹화(Group by)
select * from 테이블 group by 컬럼1, 컬럼2 ...;
보고 싶은 컬럼을 그룹화해서 보는 것.
◆ 집계함수는 where 구의 조건식에서 사용할 수 없음!
select name, count(name) from sample51 where count(name)=1 group by name;
→ 오류
- 오류 발생의 원인은 구의 실행 순서에 기인
- where 구 -> group by 구 -> select 구 -> order by 구
- having 구를 사용하면 집계함수를 사용해서 조건식 지정이 가능
- having 구는 group by 구의 뒤에 기술하여 where 구와 동일하게 조건식 지정이 가능
- 조건식에는 그룹별로 집계된 열의 값이나 집계함수의 계산결과가 전달
- 이때 조건식 참의 그룹값만 클라이언트에 반환
- 따라서 where 구와 having 구에 지정된 조건으로 검색하는 2단 구조
2.1.1. select 문의 실행순서
- where 구 -> group by 구 -> select 구 -> order by 구
- 구 실행 순서에 따라 order by에 alias 적용 가능
즉 having 구로 추가 조건을 마지막에 걸어준다고 이해
3. 서브쿼리
- 서브쿼리는 SQL 명령문 안에 지정하는 하부 select 명령으로 괄호로 묶어 지정
- 서브쿼리는 select 구, from 구, where 구 등을 모두 기술 가능
- 다른 구에서도 사용되나 특히 서브쿼리는 SQL 명령의 where 구에서 주로 사용
단순하게 SQL 명령문 안에 SQL 명령문을 추가로 집어넣는 개념으로 이해
이걸 소괄호로 이용한다고 생각.
주로 Where 구로 조건을 걸 때
DELETE FROM sample54 WHERE a = (SELECT MIN(a) FROM SAMPLE54);
변수를 이용한 서브쿼리 활용
set @a = (select min(a) from sample54);
select @a;
delete from sample54 where a=@a
@a라는 변수를 선언해서 서브쿼리를 활용하는 경우
3.1. 서브쿼리 사용 패턴
- 하나의 값을 반환하는 패턴
- 복수의 행이 반환되지만 열은 하나인 패턴
- 하나의 행이 반환되지만 열이 복수인 패턴
- 복수의 행, 복수의 열이 반환되는 패턴
※ 하나의 값을 반환하는 패턴에서 단일 값을 ‘스칼라 값’
- 서브쿼리에서 스칼라 값의 반환은 많이 사용
- 보통 select 구에서 하나의 열을 지정하고 group by를 지정하지 않은 채 집계합수를 사용하면 단일 값 반환
- where 구의 조건으로 하나의 행만 검색된다면 스칼라 값 반환이 가능
- where 구에서 스칼라 값의 서브쿼리는 “=“와 같은 연사자를 이용하여 비교
- 단일 값 서브쿼리를 “스칼라 서브쿼리”라고 부르기도 함
3.2. 상관 서브쿼리
- exists(select 명령)
- exists 술어는 select 명령의 반
- 값이 있으면 참, 없으면 거짓을 반환
- not exists(select 명령)
- not exists 술어는 select 명령의반환 값이 있으면 거짓, 없으면 참을 반환
- 컬럼 in (집합)
- 컬럼 not in (집합)
마무리
SQL로 집계함수를 사용하는 방법
더 잘 활용하기 위해 서브쿼리를 활용하는 방법을 배워봄.
댓글