[MYSQL] 검색 (LIKE, %, _ 연산자) , 집계함수 (MIN, MAX, AVG, SUM)

yellowbutter·2024년 5월 14일
0

MYSQL

목록 보기
5/10
post-thumbnail

✔️ 위 내용은 코딩애플 SQL & DATABASE 강의를 듣고 스스로 정리한 내용입니다.

LIKE

특정 단어가 들어있는지 검색하려면 LIKE

1. (✨%✨) 과자명이 '초코'가 들어있는걸 찾기

SELECT * FROM COOKIE WHERE 과자명 LIKE '%초코%'

  • % 기호를 안 붙이면 '초코'만 정확히 들어있는 행만 찾아준다.
  • %를 붙여야 '아무글자 + 초코 + 아무글자' 조합에 일치하는 행을 전부 찾아준다.

2. (✨%✨) 과자명이 '초코'로 시작하는 것 찾기

SELECT * FROM COOKIE WHERE 과자명 LIKE '%초코'

3. (✨%✨) 과자명이 '초코'로 끝나는 것 찾기

SELECT * FROM COOKIE WHERE 과자명 LIKE '초코%'

참고) 문자검색 문법이라 문자가 저장된 컬럼에서만 검색가능

  • CHAR(6) 데이터타입의 경우 총 6자를 저장할 수 있는데 4자만 입력해도 나머지 뒷부분 2자를 공백으로 꽉 채워준다.
  • 예를 들어서 '딸기초코'를 저장해도 '딸기초코(공백공백)' 이렇게 저장된다.
  • 그래서 CHAR 컬럼은 % 써서 검색시 의도와 다르게 동작할 수 있음.
    '%초코' 이렇게 검색해도 '딸기초코 ' 이건 못찾음

3. (✨_✨) 과자명이 '초코'로 끝나는 네글자 찾기

정확히 글자수까지 포함해서 검색하고 싶을때 사용
%와 마찬가지로 아무 글자인데, %는 글자수 제한이 없다. (0자 포함)
_ 는 아무글자 1개를 뜻한다.(글자 수 지정)

SELECT * FROM COOKIE WHERE 과자명 LIKE 'ㅣ__초코'

% 기호 많이 쓰면 성능저하가 일어날 수 있다.

4. 과자명이 'red'으로 시작해서 'bread'로 끝나는 것을 검색하려면?

SELECT * FROM COOKIE WHERE 과자명 LIKE 'red%bread'

5. 과자명에 'red' 가 들어있거나 'bread'가 들어있는 것을 검색해봅시다.

SELECT * FROM COOKIE WHERE 과자명 LIKE '%red%' OR 과자명 LIKE '%bread%'

6. 과자명에 'red'는 들어있는데 'bread'는 들어있지 않은 것을 검색해봅시다.

SELECT * FROM COOKIE WHERE 과자명 LIKE '%red%' AND NOT 과자명 LIKE '%bread%'

MIN, MAX, AVG, SUM

  1. MIN() : 최소
  2. MAX() : 최대
  3. AVG() : 평균
  4. SUM() : 함계

1. KOREA 테이블에서 가장 재산이 많은 사람을 찾아보자.

SELECT MAX(재산) FROM KOREA

2. KOREA 테이블에서 가장 재산이 많은 사람을 찾아보자.

SELECT MIN(재산) FROM KOREA

3. KOREA 테이블에서 재산 평균을 찾아보자.

SELECT AVG(재산) FROM KOREA

4. KOREA 테이블에서 사람들 재산 합계를 찾아보자.

SELECT SUM(재산) FROM KOREA

COUNT, AS, DISTINCT, LIMIT

  1. COUNT() : 행의 개수를 세고 싶을 때

  2. AS : 컬럼명 바꿀 때

  3. DISTINCT : 중복 데이터 제거

  4. LIMIT: MIN, MAX 대신에 사용 가능

    5. KOREA 테이블에서 테이블 수를 찾아보자.

    SELECT COUNT(*) FROM KOREA

    6. KOREA 테이블에서 등급이 vip인 사람의 평균 재산을 찾고 "부자"로 출력하세요.

    SELECT AVG(재산) AS 부자 FROM KOREA WHERE 등급 = "vip"

  • AS로 치환하는 것을 allias라고 한다.

  • 주의점은 AS 뒤에 작명할 때 실제 있는 컬럼명 말고 다른 단어를 작명하는게 좋다.

    7. card 테이블에서 "연체횟수"를 중복을 제거해서 그 평균을 출력하세요.

    SELECT AVG(DISTINCT 연체횟수) FROM card

    8. card 테이블에서 "연체횟수"를 중복을 제거해서 그 평균을 출력하세요.

  • 같은 의미

  • 데이터가 많을 경우 테스트 해보고 더 빠른걸 쓰면 된다.

  • LIMIT로 하면 출력되는 행의 갯수를 제한을 두고 싶으면 맨 뒤에 LIMIT 행갯수

SELECT MAX(연체횟수) FROM card
SELECT * FROM card ORDER BY 연체횟수 DESC LIMIT 1;

9. 연체횟수가 1회 이하인 사람은 몇명일까요?

SELECT COUNT (연체횟수) FROM card
WHERE 연체횟수 <= 1

profile
기록은 희미해지지 않는다 🐾🧑‍💻

0개의 댓글