SQL

[SQL] 데이터 생성과 조회 : 03. 테이블 조회(SELETE, WHERE, ORDER BY, 집계함수, GROUP BY, HAVING)

zzheng 2024. 10. 10. 19:10

 SQL 순서

SELECT   5
FROM     1
WHERE    2
GROUP BY 3
HAVING   4
ORDER BY 6

SQL을 수행할 때는 위 순서대로 입력해야되며, SQL에서 실행되는 순서는 FROM --> WHERE --> GROUP BY --> HAVING --> SELETE --> ORDER BY 이렇게 실행되서 출력된다. 

 

SELETE 문

  • 테이블의 모든 칼럼 조회 명령어
SELECT * FROM 테이블;
  • 테이블의 컬럼1을 조회 명령어
SELECT 칼럼1 FROM 테이블;
  • 중복 데이터 제거하고 조회 명령어
SELECT DISTINCT 컬럼1 FROM 테이블명;
  • 중복 데이터 제거한 수 조회 명령어
SELECT COUNT(DISTINCT 컬럼1) FROM 테이블명;
  • ALIAS(별칭, 약어)으로 간결하게 헤더 출력하기
SELECT COUNT(DISTINCT 컬럼1) as 출력하고 싶은 컬럼명 FROM 테이블명;
  • ALIAS(별칭, 약어)으로 간결하게 헤더 한글로 출력하기: "" 붙이면 됨.
SELECT COUNT(DISTINCT 컬럼1) as "출력하고 싶은 컬럼" FROM 테이블명;
  • 조건절로 출력하기
SELECT 컬럼1, 컬럼2 FROM 테이블명 WHERE 컬럼1 = '값1';
  • AND 로 조건이 연결되면 TRUE 이고 TRUE 인거만 출력된다.
  • OR로 조건이 연결되면 둘중 한개만 TRUE 여도 출력된다. 
SELECT * FROM 테이블명 WHERE 컬럼1 = '값1' AND 컬럼2 < 6;
SELECT * FROM 테이블명 WHERE 컬럼1 = '값1' OR 컬럼2 = '값2';
  • 원하는 만큼만 출력하기(랜덤으로 3줄까지 나오기)
SELECT * FROM 테이블명 LIMIT 3;

 

WHERE 문

SELECT * FROM 테이블명 WHERE 컬럼1 = '값1';
  • 여러 개 출력하고 싶을때
    • IN 사용해서 출력
SELECT * FROM 테이블명 WHERE 컬럼1 IN ('값1', '값2', '값3');

 

    • OR 사용해서 출력
SELECT * FROM 테이블명 WHERE 컬럼1 = '값1' OR 컬럼1 = '값2' OR 컬럼1 = '값3';
  • AND 와 OR 사용해서 출력시, AND가 OR 보다 우선순위가 높음.
EX)
SELECT * FROM MELON_CHART WHERE SONG = 'I AM' OR SONG = 'SUPER SHY' OR SONG = 'SPICY' 
AND SINGER = 'NEWJEANS';

따라서 SONG이 SPICY이고 SINGER가 NEWJEANS는 없으므로, 출력 결과는 'I AM' 과 'SUPER SHY'만 출력함.

  • OR 조건이 먼저 출력되기 위해서는 ( )를 치면 됨.
EX)
SELECT * FROM MELON_CHART WHERE (SONG = 'I AM' OR SONG = 'SUPER SHY' OR SONG = 'SPICY') 
AND SINGER = 'NEWJEANS';
  • 키워드 검색하기
SELECT * FROM MELON_CHART WHERE SONG LIKE '이브%';

이브로 시작하는 노래 제목 ROW가 출력됨

SELECT * FROM MELON_CHART WHERE SONG LIKE '%말해요';

말해요로 끝나는 노래 제목 ROW가 출력됨

SELECT * FROM MELON_CHART WHERE SONG LIKE '%S%';

노래 제목에 S가 들어가는 모든 ROW가 출력됨

SELECT * FROM MELON_CHART WHERE SINGER LIKE '정_';

SINGER가 정으로 시작하고 2글자인 ROW가 출력됨

SELECT * FROM MELON_CHART WHERE SINGER LIKE '__정';

SINGER가 3글자이고 맨 뒤가 정인 ROW가 출력됨

SELECT * FROM MELON_CHART WHERE SONG LIKE '_카%';

SONG열에서 두번째가 카인 노래 제목 ROW출력됨

  • %와 _가 포함된 ROW를 찾고 싶을때는 ESCAPE문 이용하기
SELECT * FROM LIKE_TEST WHERE COL LIKE '%#%%' ESCAPE '#';

SELECT * FROM LIKE_TEST WHERE COL LIKE '%$_%' ESCAPE '$';
  • BETWEEN 문  이용해서 출력하기
SELECT * FROM 테이블명 WHERE 컬럼1 BETWEEN 100000 AND 150000;

컬럼1 100000에서 150000 사이 출력된다.

 

ORDER BY 문

SELECT * FROM 테이블명 ORDER BY 컬럼1;

EX) 
SELECT * FROM MELON_CHART ORDER BY RANKING;

- 역순으로 정리하고 싶을 때는 DESC를 붙이면 된다. 

EX) 
SELECT * FROM MELON_CHART ORDER BY RANKING DESC;

- RANKING으로 정리한 다음, SONG열과 SINGER열 출력하기

EX) 
SELECT SONG, SINGER FROM MELON_CHART ORDER BY RANKING;

- 정국과 박재정 ROW를 제외한 ROW출력하기 : NOT IN  이용하기

EX) 
SELECT * FROM MELON_CHART WHERE SINGER NOT IN ('정국', '박재정') ORDER BY SONG;

- SINGER 열은 오름차순 정렬하고, LIKE_NO는 내림차순 정렬해서 출력하기(왼쪽부터 정렬해서 출력된다.)

EX) 
SELECT * FROM MELON_CHART ORDER BY SINGER ASC, LIKE_NO DESC;

- 제한해서 출력하기(LIMIT 이용하기)

EX) 
SELECT * FROM MELON_CHART ORDER BY LIKE_NO DESC LIMIT 3;

- 4번째 데이터 부터 5개 ROW출력하기

EX) 
SELECT * FROM MELON_CHART ORDER BY LIKE_NO DESC LIMIT 3, 5;

 

집계함수

  • COUNT 함수
    • 테이블 전체 건수 출력하기
SELECT * FROM 테이블명;
SELECT COUNT(*) FROM 테이블명;

예시) 테이블

 

  • SUM 함수
SELECT SUM(COL1), SUM(COL2) FROM 테이블명;

 

  • AVG 함수 

(NULL은 아예 없는 취급을 함.)

SELECT AVG(COL1), AVG(COL2) FROM 테이블명;

  • MIN 함수
SELECT MIN(COL1), MIN(COL2) FROM 테이블명;
  • MAX함수
SELECT MAX(COL1), MAX(COL2) FROM 테이블명;
  • WHERE와 집계함수 같이 사용해서 출력
SELECT COUNT(*) FROM 테이블명 WHERE 컬럼명 > 100000;

 

GROUP BY 함수

  • 월별 매출, 회원 연령대별 가입현황에서 많이 쓰임
EX) 
SELECT ANIMAL, SUM(AGE), AVG(AGE) FROM 테이블명 GROUP BY ANIMAL;

EX)
SELECT ANIMAL, TYPE, COUNT(*) FROM 테이블명 GROUP BY ANIMAL, TYPE ORDER BY ANIMAL;

 

HAVING 절

  • 두마리보다 많은 종(TYPE) 출력하기
EX) 
SELECT ANIMAL, TYPE, COUNT(*) FROM 테이블명 GROUP BY ANIMAL, TYPE HAVING COUNT(*) >2;
SELECT ANIMAL, TYPE, MAX(AGE)
FROM ANIMAL_INFO
GROUP BY ANIMAL, TYPE
HAVING MAX(AGE) > 10;