💃 개프로 불공단 체험단 : 영진닷컴 그림으로 배우는 데이터베이스 도서
일반적인 SELECT문 조회 시, 모든 레코드를 대상으로 가져오게 된다.
LIMIT
: 조회하는 레코드의 상한을 정해 그 이상의 데이터가 조회되지 않도록 할 수 있다.
ex) ORDER BY age LIMIT 3;
→ age 컬럼의 값을 작은 순서대로 정렬하여, 거기에서 3건의 레코드를 조회
OFFSET
: 취득 시작 위치를 지정할 수 있다.
SELECT *
FROM users(테이블명)
LIMIT 1 OFFSET 2;
- OFFSET에서는 0이 기점이기 때문에, 0은 1행째, 1은 2행째, 2는 3행째를 표시한다.
예를 들어 11번부터 20번까지, 중간의 데이터를 여러 건 추출할 수도 있다.
SELECT COUNT(
*
) FROM users;
SELECT COUNT(
*
) FROM users WHERE age >= 30;
COUNT(컬럼이름)
COUNT(age)
로 지정하면, age 컬럼 값이 NULL인 데이터를 제외하고 카운트 할 수 있다. MAX
: 해당 컬럼에 저장되어 있는 값의 최댓값MIN
: 해당 컬럼에 저장되어 있는 값의 최솟값SELECT MIN(age) FROM users WHERE name LIKE '홍%';
SUM
: 해당 컬럼에 저장되어 있는 값의 합계AVG
: 그 컬럼에 저장되어 있는 값의 평균SELECT SUM(age) FROM users;
SELECT AVG(age) FROM users;
SELECT SUM(age)
FROM users
WHERE name LIKE '홍%';
- ex) 책의 카테고리마다 책의 개수를 집계하는 것
- ex) 등록일자를 그룹으로 날짜별 입고된 건수를 집계
SELECT gender(컬럼값)
FROM users(테이블명)
GROUP BY gender;
SELECT gender(컬럼명), COUNT(
*
)
FROM users
GROUP BY gender;
COUNT 함수 대신 MAX나 MIN, SUM, AVG 함수도 동일하게 사용할 수 있다.
콤마(,)로 구분하면 여러 컬럼을 지정한 그룹화가 가능하다.
ex) GROUP BY gender, age
로 지정하면
gender와 age 컬럼의 값이 모두 일치하는 레코드로 그룹화가 가능하다.
HAVING
SELECT gender(컬럼명), COUNT(
*
)
FROM users
GROUP BY gender
HAVING COUNT(*
) >= 3;
WHERE
에서 지정한 조건은 그룹화 전에
수행되는데 반해,HAVING
에서 지정한 조건은 그룹화 이후에
실행된다.SELECT age, COUNT(
*
)
FROM users
WHERE gender = 'man'
GROUP BY age
HAVING COUNT(*
) >= 3;
① WHERE를 사용하여 '남성' 레코드만을 추출
② GROUP BY 와 COUNT(*
)에서 연령별 그룹화와 집계
③ HAVING에서 레코드 건수가 3건 이상인 연령의 데이터만을 추출
테이블 결합
: 두 개 이상의 테이블을 결합해서 한 번에 데이터를 얻는 것
명령어 JOIN
을 사용하여 테이블을 결합하는 것은
결합 주체가 되는 테이블에 결합 객체가 되는 테이블을 붙이는 개념이다.
그 때 결합주체와 결합 객체 각각의 테이블명과,
2개의 테이블 간에 공통 키(KEY)가 되는 값을 저장해 두는 컬럼 이름이 필요하다.
- 결합주체 테이블명 : 대출이력/결합주체 컬럼명 : 책ID
- 결합객체 테이블명 : 책 정보/결합객체 컬럼명 : ID
내부 결합
과 외부 결합
내부결합
: 테이블끼리 키가 되는 컬럼의 값이 일치하는 데이터만을 결합하여 얻는 방법
외부결합
: 테이블끼리 키가 되는 컬럼의 값이 일치하는 데이터를 결합하고, 여기에 더하여 원래 테이블에만 존재하는 데이터도 얻는 방법
SELECT *
FROM users(결합주체 테이블명)
INNER JOIN
items (결합객체 테이블명)
ON
users.item_id(결합주체 컬럼명) = items.id(결합객체 컬럼명);
INNER JOIN
뒤에 결합할 테이블 이름, ON
뒤에 결합의 키가 될 컬럼 이름을 결합주체 컬럼 이름 = 결합 객체 컬럼 이름
같은 형태로 지정한다.
이 때 컬럼명은 테이블명.컬럼명
과 같이 지정한다.
✅ 이 때 상품ID가 5(사용자명: 홍두깨)인 레코드도 결과에 같이 표시된다.
- 단지 대응하는 레코드가 items 테이블에 없기 때문에, 상품명과 가격의 값은 없다.
외부결합
: 결합주체 테이블의 데이터와,SELECT *
FROM users
LEFT JOIN
items
ON
users.item_id = items.id;
LEFT JOIN
을 RIGHT JOIN
이라고 고쳐 쓰면,