SQL II

eunheelog·2024년 5월 17일
0

Beyond SW

목록 보기
4/15

SQL 기본


4. GROUP BY

  • DISTINCT 와 GROUP BY 의 결과는 같지만 동작 방식은 다르다 !!!
  • 집계 함수를 GROUP BY 절과 함께 사용해 하나 이상의 행을 그룹으로 묶어 연산 가능
    ex) employee 테이블에서 부서별 급여의 합계 조회(부서별 오름차순 정렬)

    ex) 사용자별 구매한 물품의 개수의 합계 조회

    ex) 사용자별 구매한 총 금액

    ex) 전체 구매자가 구매한 물품 개수의 평균

    ex) 가장 큰 키와 작은 키의 회원 이름과 키 조회

    → 서브쿼리가 먼저 실행되고 서브쿼리의 실행결과를 가지고 메인쿼리 실행 !
    ex) 휴대폰이 있는 사용자의 수

    ex) employee 테이블에서 부서별 사원 수, 보너스를 받는 사원 수, 급여의 합, 평균 급여, 최고 급여, 최저 급여 조회(부서별 내림차순 정렬)

5. HAVING

ex) 총 구매액이 1000 이상인 회워의 아이디, 구매 금액 조회


→ FROM > WHERE > GROUP > SELECT 순으로 실행됨
→ HAVING 절은 반드시 GROUP BY 절 다음에 작성 !

[ 실습 문제 ]

1. EMPLOYEE 테이블에서 부서별로 급여가 300만원 이상인 직원의 평균 급여 조회


→ 소수점 버리려면 FLOOR 함수 쓰기 !

2. EMPLOYEE 테이블에서 부서별 평균 급여가 300만원 이상인 부서의 부서 코드, 평균 급여 조회

3. EMPLOYEE 테이블에서 직급별 총 급여의 합이 10,000,000 이상인 직급만 조회

4. EMPLOYEE 테이블에서 부서별 보너스를 받는 사원이 없는 부서만 조회

⛧ SELECT 문 실행 순서 ⛧

: FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT

데이터 변경


1. INSERT

  • 테이블에 데이터를 삽입하는 구문

    → ⛧ 값을 입력하지 않으면 NULL 로 채움

    • 데이터 순서를 바꿔서 넣을 경우

      → 순서가 바꼈는데 데이터 타입이 달라서 오류

      → 순서가 바꼈지만 데이터 타입이 일치해서 insert(insert 할 때 주의 해야함 !!!)
    • 기본키 값을 지정하지 않은 경우

      → 기본키 값은 NULL 이면 안되기 때문에 오류
    • column 명을 생략할 경우

      → column 명을 생략할 경우에는 모든 column 의 값을 입력해줘야함 !

      * CURDATE : 현재 년, 월, 일 정보를 가져옴

  • 한 번에 여러 개의 행 삽입 가능

  • 다른 테이블의 데이터를 가져와서 대량으로 입력 가능

    → SELECT 결과 테이블 삽입

    • 데이터 개수가 맞지 않을 경우


      → 옆에 괄호로 적어줘야함 !
  • 테이블 복사(키는 복사 X)

    → WHERE 1 = 0 은 false 이기 때문에 빈 테이블 생성하는 것 !

2. UPDATE

  • 기존에 입력되어 있는 값 변경
    ex) userid가 hong123인 회원의 이름을 고길동으로 변경
  • WHERE 절 생략 가능 → 테이블 전체의 행이 변경됨(주의!!)

    → 이렇게 WHERE 절 없는 UPDATE 구문 실행 시 확인하는 창이 뜸

3. DELETE

  • 행 단위로 데이터 삭제(테이블에서 우클릭으로도 삭제 가능 !)
    ex) userid가 hong123인 회원 삭제

    → SELECT 로 먼저 확인 후 안전하게 DELETE 하기 !

  • WHERE 절 생략 가능 → 데이터 전체의 행이 삭제됨(주의!!)

  • 조건을 만족하는 결과 중에서 상위 몇 건만 삭제하려면 LIMIT 구문과 함께 사용 !
    ex) height가 NULL인 회원들 중 상위 2명 삭제

  • 테이블 삭제

  • 테이블의 모든 데이터 삭제
    TRUNCATE TABLE 테이블명;

조건부 데이터 입력, 변경

  • 기본 키 중복으로 에러 발생
  • 기본 키 중복으로 인한 에러 발생하지 않고 경고만 출력
  • userid가 BBK인 회원이 없으면 INSERT, 있으면 UPDATE 수행 !

데이터 형식


함수


1. 형 변환 함수

  • 숫자 데이터를 문자 데이터로 형 변환

    → 콤마도 사라지고 색도 바뀜 !

  • buytbl에서 평균 구매 개수를 조회

    → CONVERT(AVG(amount), INT) 도 가능 !

  • 문자 데이터를 숫자 데이터로 형 변환

    → 둘 다 같은 결과

  • 자리수 표현된 문자 데이터를 숫자 데이터로 형 변환

    → SELECT CAST(REPLACE('1,000,000', ',', '') AS INT); 도 같은 결과 !

아래의 쿼리가 정상적으로 연산되도록 쿼리문을 작성하시오.

1. SELECT '1,000,000' - '500,000'; 결과가 500,000이 되도록

2. employee 테이블에서 emp_id를 숫자 형식으로 변환해서 조회

SELECT emp_id, emp_name
FROM employee;

  • 문자 데이터를 날짜 데이터로 형 변환

    → /, -, % 다 가능 !

  • 숫자 데이터를 날짜 데이터로 형 변환

  • 모든 데이터 타입 변환이 가능한 것은 아님(오류 상황)

  • 암시적인 형 변환

    → + 연산자는 숫자로만 됨,,

2. 제어 흐름 함수

  • IF(수식, 참, 거짓)

    ex) 고객별 전체 구매 개수의 합계(10개 이상이면 VIP, 아니면 일반 고객)

  • IFNULL(수식 1, 수식2) = NVL

    → 첫번째 값이 NULL 이면 두번째 값, 아니면 첫번째 값 !
    ex) employee 테이블에서 보너스를 0.1 동결하여 직원명, 보너스율, 동결된 보너스율, 보너스가 포함된 연봉 조회

  • NULLIF(수식 1, 수식2) → 두 개의 값이 같으면 NULL 반환 !

    - 다르면 첫번째 값 반환

  • CASE 연산자

    → 마지막은 END로 끝내야함
    ex) employee 테이블에서 직원명, 급여, 급여 등급(1 ~ 4) 조회
    급여가 500만원 초과일 경우 1등급
    급여가 500만원 이하 350만원 초과일 경우 2등급
    급여가 350만원 이하 200만원 초과일 경우 3등급
    그 외 4등급

3. 문자열 함수

  • BIT_LENGTH(), CHAR_LENGTH(), LENGTH()

    CHAR_LENGTH는 글자수만 세기 때문에 같은데 LENGTH는 Byte 수를 세기에 영어랑 한글은 다르다 !
profile
⛧1일 1알고리즘⛧

0개의 댓글