그림으로 배우는 데이터베이스(3-14~3-22)

prana·2022년 12월 10일
0

database

목록 보기
24/38

💃 개프로 불공단 체험단 : 영진닷컴 그림으로 배우는 데이터베이스 도서

3-14 LIMIT, OFFSET

  • 조회하는 데이터의 건수를 지정하다

1. 조회하는 레코드의 개수 지정

  • 일반적인 SELECT문 조회 시, 모든 레코드를 대상으로 가져오게 된다.

  • LIMIT : 조회하는 레코드의 상한을 정해 그 이상의 데이터가 조회되지 않도록 할 수 있다.

2. ORDER BY 를 조합한 예

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번까지, 중간의 데이터를 여러 건 추출할 수도 있다.


3-15 데이터의 건수를 조회 : COUNT 함수

1. 레코드 건수 카운트

  • 테이블에 저장되어 있는 레코드의 건수를 카운트하여 그 값을 가져온다.

SELECT COUNT(*) FROM users;

2. WHERE을 조합한 예시

  • 조건에 일치하는 레코드 건수를 조회

    SELECT COUNT(*) FROM users WHERE age >= 30;

3. 데이터가 없는 레코드를 제외하여 카운트하다.

  • COUNT(컬럼이름)
  • 값이 없는 필드는 NULL로 표현되지만 NULL 데이터를 제외하고 카운트 할 수도 있다.
  • SELECT 뒤를 COUNT(age)로 지정하면, age 컬럼 값이 NULL인 데이터를 제외하고 카운트 할 수 있다.

3-16 데이터의 최댓값, 최솟값 (MAX, MIN 함수)

1. MAX와 MIN 함수

  • MAX : 해당 컬럼에 저장되어 있는 값의 최댓값
  • MIN : 해당 컬럼에 저장되어 있는 값의 최솟값

SELECT MIN(age) FROM users WHERE name LIKE '홍%';

  • → name 컬럼 값의 맨 앞에 '홍'으로 시작하는 레코드 중에서 age의 컬럼 값의 최솟값을 구할 수 있다.

3-17 합계 SUM 함수, 평균 AVG 함수

1. SUM 함수와 AVG 함수

  • SUM : 해당 컬럼에 저장되어 있는 값의 합계
  • AVG : 그 컬럼에 저장되어 있는 값의 평균

    SELECT SUM(age) FROM users;
    SELECT AVG(age) FROM users;

2. WHERE을 조합한 예

SELECT SUM(age)
FROM users
WHERE name LIKE '홍%';


3-18 레코드를 그룹화한다 : GROUP BY

1. 레코드를 그룹으로 묶어서 조회한다

  • 테이블에 저장되어 있는 컬럼의 값이 동일한 레코드를 그룹으로 묶어서 출력할 수 있다.
  • ex) 책의 카테고리마다 책의 개수를 집계하는 것
  • ex) 등록일자를 그룹으로 날짜별 입고된 건수를 집계

SELECT gender(컬럼값)
FROM users(테이블명)
GROUP BY gender;

2. 그룹별 레코드 건수를 조회하다

SELECT gender(컬럼명), COUNT(*)
FROM users
GROUP BY gender;

  • COUNT 함수 대신 MAX나 MIN, SUM, AVG 함수도 동일하게 사용할 수 있다.

  • 콤마(,)로 구분하면 여러 컬럼을 지정한 그룹화가 가능하다.

  • ex) GROUP BY gender, age로 지정하면
    gender와 age 컬럼의 값이 모두 일치하는 레코드로 그룹화가 가능하다.


3-19 HAVING : 그룹화된 데이터에 추출 조건을 지정한다

1. 그룹화된 결과의 범위 축소

  • 그룹화된 후의 결과로부터 필요한 데이터만 추려서 조회할 수 있다.
  • HAVING

SELECT gender(컬럼명), COUNT(*)
FROM users
GROUP BY gender
HAVING COUNT(*) >= 3;

⭐ 2. WHERE와 HAVING의 차이점

  • WHERE 에서 지정한 조건은 그룹화 전에 수행되는데 반해,
  • HAVING에서 지정한 조건은 그룹화 이후에 실행된다.

SELECT age, COUNT(*)
FROM users
WHERE gender = 'man'
GROUP BY age
HAVING COUNT(*) >= 3;

① WHERE를 사용하여 '남성' 레코드만을 추출
② GROUP BY 와 COUNT(*)에서 연령별 그룹화와 집계
③ HAVING에서 레코드 건수가 3건 이상인 연령의 데이터만을 추출


3-20 JOIN : 테이블을 결합해서 데이터를 가져온다

⭐⭐⭐ 1. 테이블 결합에 필요한 요소

  • 테이블 결합 : 두 개 이상의 테이블을 결합해서 한 번에 데이터를 얻는 것

  • 명령어 JOIN을 사용하여 테이블을 결합하는 것은
    결합 주체가 되는 테이블에 결합 객체가 되는 테이블을 붙이는 개념이다.

  • 그 때 결합주체와 결합 객체 각각의 테이블명과,
    2개의 테이블 간에 공통 키(KEY)가 되는 값을 저장해 두는 컬럼 이름이 필요하다.

  • 결합주체 테이블명 : 대출이력/결합주체 컬럼명 : 책ID
  • 결합객체 테이블명 : 책 정보/결합객체 컬럼명 : ID

2. 테이블 결합의 종류

  • 내부 결합외부 결합

  • 내부결합 : 테이블끼리 키가 되는 컬럼의 값이 일치하는 데이터만을 결합하여 얻는 방법

  • 외부결합 : 테이블끼리 키가 되는 컬럼의 값이 일치하는 데이터를 결합하고, 여기에 더하여 원래 테이블에만 존재하는 데이터도 얻는 방법


⭐ 3-21 내부결합, INNER JOIN

1. 값이 일치하는 레코드만 조회

  • 키가 되는 컬럼 값이 테이블 간에 일치하는 레코드만을 결합하여 얻는 방식

2. 내부결합 명령어

SELECT *
FROM users(결합주체 테이블명)
INNER JOIN items (결합객체 테이블명)
ON users.item_id(결합주체 컬럼명) = items.id(결합객체 컬럼명);

  • INNER JOIN 뒤에 결합할 테이블 이름, ON 뒤에 결합의 키가 될 컬럼 이름을 결합주체 컬럼 이름 = 결합 객체 컬럼 이름 같은 형태로 지정한다.

  • 이 때 컬럼명은 테이블명.컬럼명 과 같이 지정한다.


⭐⭐⭐ 3-22 외부결합, LEFT JOIN, RIGHT JOIN

  • 기준이 되는 데이터와 거기에 일치하는 데이터를 취득한다

1. 결합주체 데이터와 값이 일치하는 결합객체 데이터를 조회

✅ 이 때 상품ID가 5(사용자명: 홍두깨)인 레코드도 결과에 같이 표시된다.

  • 단지 대응하는 레코드가 items 테이블에 없기 때문에, 상품명과 가격의 값은 없다.
  • 외부결합 : 결합주체 테이블의 데이터와,
    거기에 더해 키가 되는 컬럼의 값이 일치하는 결합객체 데이터를 결합하여 조회하는 방법

2. 외부결합 명령어 (LEFT JOIN)

SELECT *
FROM users
LEFT JOIN items
ON users.item_id = items.id;

  • LEFT JOINRIGHT JOIN이라고 고쳐 쓰면,
    결합주체와 결합객체의 테이블을 반대로 할 수 있다.

0개의 댓글

관련 채용 정보