JAVA를 잡아라!...

SQL - 2. SELECT 문 : 데이터 검색_WHERE, ORDER BY, LIKE, GROUP BY 본문

DBMS_SQL/Oracle

SQL - 2. SELECT 문 : 데이터 검색_WHERE, ORDER BY, LIKE, GROUP BY

onivv 2023. 12. 22. 14:09

#1 기본 문법

SELECT [열] FROM [테이블]
  • ~ 테이블의 ~ 열 검색
  • 여러 열 검색 : 쉼표(,)로 연결
  • 전체 열 검색 : * 입력  ;단, 불필요한 열의 데이터까지 검색하면 네크워크에 부담; 필요한 정보만 최소한으로 검색

 

#2 WHERE 문 : 조건에 맞는 데이터 검색

SELECT [열] FROM [테이블] WHERE [열] = [조건값]
  • WHERE 문에 열의 값이 조건값에 맞으면 ~ 테이블의 ~ 열 검색
  • NULL 데이터 검색 : 열의 값이 ' ' 공백이 들어있는 것과는 다름 (IS NULL, IS NOT NULL 을 사용해 필터링)

※ 연산자

< 조건보다 작은 값 검색 ALL 모든 비교 집합이 T이면 T
<= 조건보다 같거나 작은 값 검색 AND 양쪽 조건 모두 T이면 T
= 조건과 같은 값 검색 ANY 비교 집합 중 하나라도 T이면 T
> 조건보다 큰 값 검색 BETWEEN 범위에 해당하는 값 검색
>= 조건보다 같거나 큰 값 검색 EXISTS 하위 퀴리에 행이 포함되면 T
<>, != 조건과 같지 않은 값 검색 IN 하나라도 포함되면 T (OR 반복 사용시 대체사용)
!< 조건보다 작지 않은 값 검색 LIKE 피연산자가 패턴과 일치하면 T
!> 조건보다 크지 않은 값 검색 NOT 연산자를 반대로 실행
    OR 양쪽 조건 중 하나라도 T이면 T
    SOME 비교 집합 중 일부가 T이면 T

 

 

#3 ORDER BY 문 : 데이터 정렬

SELECT [열] FROM [테이블] WHERE [열] = [조건값] ORDER BY [열] [ASC, DESC]
  • ORDER BY 문을 SELECT 문의 가장 마지막에 추가해 사용
  • ASC - 오름차순, DESC - 내림차순
  • 2개 이상 기준으로 열을 정렬할 때는 쉼표(,)를 사용해 열 이름을 나열 (단, 열 입력 순서 주의)
  • SELECT TOP N
    • : 특정 조건에 해당하는 데이터 중 상위 N개의 데이터 검색 (정렬 우선순위 중요)
  • OFFSET ... FETCH NEXT
    • : 특정 구간의 데이터 검색
    • ex) SELECT * FROM 테이블명 ORDER BY ~ OFFSET ~ ROWS FETCH NEXT ~ ROWS ONLY
    • ~로 정렬된 값 중 ~행은 건너뛰고 ~개의 행만 출력

 

#4 와일드카드로 문자열 검색

SELECT [열] FROM [테이블] WHERE [열] LIKE [조건값]
  • 지정한 패턴과 일치하는 문자열, 날짜, 시간 등을 검색
  • NOT LIKE : 특정 문자열 제외
  • LIKE와 %로 특정 문자열을 포함하는 문자열 검색
    • A% : A로 시작하는 모든 문자열
    • %A : A로 끝나는 모든 문자열
    • %A% : A를 포함하는 모든 문자열
  • _로 특정 문자열 포함하는 특정 길이의 문자열 검색
    • A_ : A로 시작하면서 뒤의 글자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열
    • _A : A로 끝나면서 앞의 글자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열
    • _A_ : 세 글자 중 가운데 글자만 A이며 앞뒤로 무엇이든 상관없는 문자열
    •  
  • ESCAPE 문 : 특수 문자를 포함한 문자열 검색
    • 쿼리를 실행할 때 ESCAPE 문에 사용된 특수 문자를 제거 (단, 해당 문자가 실제 문자열에 쓰이면 안됨)
  • []로 문자나 문자 범위를 지정해 문자열 검색
    • [A, B, C]% or [A-C]% : 첫 글자가 A or B or C로 시작하는 모든 문자열 검색
    • %[A, B, C] or %[A-C] : 마지막 글자가 A or B or C로 끝나는 모든 문자열 검색
    • [^A, ^B, ^C]% or [^A-C]% : 첫번째 글자가 A or B or C가 아닌 모든 문자열 검색

 

#5 데이터 그룹화 다루기

SELECT [열] FROM [테이블] WHERE [열] = [조건값] GOURP BY [열] HAVING [열] = [조건값]
  • GROUP BY : 데이터를 그룹화하는 구문
  • [열] : 그룹화 기준의 열 이름을 지정, 1개 이상 그룹화 가능 (단, 열 순서에 따라 그룹화 우선순위)
  • HAVING : WHERE와 비슷한 기능을 하며, 그룹화된 결과의 필터링 기능
  • [조건값] : HAVING 필터에 적용할 조건값 입력

==> 그룹화는 중복된 결과를 제외하고 출력

==> GROUP BY 문에 사용한 [열]은 SELECT 문에 그대로 사용해야 함 (그룹 기준이 되는 열이 필요하니까)

  • 집계함수 COUNT로 그룹화된 열의 데이터(행) 개수 확인
    • ex) SELECT [열], COUNT(*) AS cnt FROM [테이블] GROUP BY [열]
    • 테이블의 열을 그룹화, 그룹화된 열 검색, 열의 행 개수를 cnt라는 이름의 열에 출력
    • 단, cnt는 실제 데이터 열이 아님
  • HAVING 문으로 그룹화한 데이터 필터링
    • WHERE 문은 테이블에 있는 열에 적용하지만,
    • HAVING 문은 SELECT 문이나 GROUP BY 문에 사용한 열에만 적용 가능
    • ex) SELECT [열1, 열2] FROM 테이블 GROUP BY [열1, 열2] HAVING [열1 = ' ~~~']
    • 테이블의 열1, 열2 그룹화, 단 열1이 ~~~인 것만 출력
  • DISTINCT 문으로 중복 데이터 제거 
    • GROUP BY 문은 중복 데이터를 제거
    • GROUP BY 문을 사용하지 않고 중복을 제거할 경우 DISTINCT 문 사용
    • 단, DISTINCT문은 중복을 제거할 뿐, 집계하거나 계산은 불가
SELECT DISTINCCT [열] FROM [테이블]

 

'DBMS_SQL > Oracle' 카테고리의 다른 글

SQL - 6. 서브 쿼리 (Subquery)  (0) 2023.12.25
SQL - 5. 조인 (Join)  (0) 2023.12.25
SQL - 4. 자료형  (0) 2023.12.23
SQL - 3. 테이블 생성 & 데이터 조작 (DDL & DLC)  (0) 2023.12.22
SQL - 1. 데이터베이스와 SQL의 기초  (2) 2023.12.21