SQL-2

원종서·2021년 10월 10일
0

LIKE , _ , %

  • 맴버 중 '박%' 으로 매치되는 것 검색함
SELECT * FROM MEMBER WHERE NAME ='박%'
  • 박으로 시작하는 이름을 찾아봄
SELECT * FROM MEMBER WHERE LIKE NAME ='박%'
  • 맴버 중 외자인 박씨를 찾아봄
SELECT * FROM MEMBER WHERE NAME LIKE '박_'
  • 맴버 중 박** 를 찾음
SELECT * FROM MEMEBER WHERE NAME LIKE '박__'

-- 맴버 중 박씨 제외

SELECT * FROM MEMBER WHERE NAME NOT LIKE ='박%'

-- 맴버 이름중 '박' 이 들어간 것

SELECT * FROM  MEMEBETR WHERE NAME LIKE ='%박%'

오라클 SQL 에서 정규식 사용하기

기본 정규식을 이용한 패턴 비교

  • 전화번호 찾기

정규식

  1. 0~9 중 하나, [0~9] == \d
    -> 01[0169]-\d\d\d\d-\d\d\d\d == 01[0169]-\d{4}-\d{4}
    가운대 숫자는 3개 혹은 4개
    -> 01[0169]-\d\d\d\d-\d\d\d\d == 01[0169]-\d{3,4}-\d{4}
  2. [a-zA-Z_0-9] == \w 글자 하나

전화번호'만'을 검색하기 위해선 맨 처음에 ^ 기호와 맨 끝에 $ 기호를 붙여줌

Oracle SQl.

REGEXP_LIKE 키워드

SELECT * NOTICE WHERE REGEXP_LIKE(TITLE, 01[016-9]-\d{3,4}-\d{4})
// NOTICE 테이블에서 TITLE 열 내용에 전화번호 규칙이 들어간 행을 찾음
  • 이메일 찾기 = 하나 이상의 문자 + @ 하나 이상의 문자 + . + org || com ||net
\w+@\w+.(org|net|com)

ROWNUM 그리고 행 제한하기

  • 회원 목록 중 상위 5명만 조회하기
SELECT * FROM MEMBER WHERE ROWNUM BETWEEN 1 AND 5 = O 
SELECT * FROM MEMBER WHERE ROWNUM BETWEEN 6 AND 10 = X

ROWNUM은 연산 결과 중 자동적으로 부여되는 수 이기 때문에 BETWEEN 6 AND 10 을하면 아무것도 출력되지 않는다 왜냐 1부터 차례대로 쌓이는데 6부터 쌓은다니 조건에 맞지 않기 때문이다

SELECT * FROM (SELECT ROWNUM AS NUM, NOTICE.* FROM NOTICE) WHERE NUM BETWEEN 1 AND 5
SELECT * FROM (SELECT ROWNUM AS NUM, NOTICE.* FROM NOTICE) WHERE NUM BETWEEN 6 AND 10

SELECT ROWNUMB AS NUM , NOTICE.* FROM NOTICE 를 () 로 감싸주었기에 먼저 연산결과 값이 나오고 그 나온 연산결과값 즉 NUM 으로 출력하니 정상적으로 출력된다.

중복 값 제거하기 DISTINCT

  • 중복된 나이 제외
SELECT DISTINCT AGE FROM MEMBER

SELECT 구문

구문 순서

  • SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY (단 WHERE와 GROUP BY는 함께 사용 불가)

FROM에서 격자형 데이터를 준비하고 WHERE에서 필터링 하고 GROUP BY에서 집계하고 집계된 이후 정렬할 것이 있으면 HAVING그런 작업..

  • 이름을 기준으로 역순으로 정렬하시오
 SELECT * FROM MEMBER ORDER BY NAME DESC
  • 회원 중에서 '박'씨 성을 가진 회원을 정렬
 SELECT * FROM MEMBER WHERE LIKE '박%' ORDER BY AGE ASC

HIT라는 컬럼을 내림차순으로 정렬 후 중복되는 행이 있을 경우, REGDATA를 기준으로 내림차순

SELECT * FROM NOTICE ORDER BY HIT DESC, REGDATA DESC

0개의 댓글