본문 바로가기

sesac

SeSAC 전z전능 분석가 성동2기 데이터 분석가 | SQL 교육(2)_메타 문자 ORDER BY, OFFSET, 함수

SQL 기초 이해-2 /현업자 특강

SQL 사용 전 설정

SQL 문 작성할 때

새 SQL 편집기 클릭

Choose catalog/schema 설정

사용할 스키마 설

 

 

패턴 매칭에 의한 검색

  • ‘LIKE’를 사용해 문자열 일부분을 비교하는 ‘부분 검색’해보기 • Syntax 열 LIKE 패턴 • = 연산자로 검색하는 경우 셀의 데이터 값이 완전히 동일한지 확인하는데, ‘특정 문자나 문자열을 포함하는지‘ 검색하기를 배울 것
  • LIKE 술어를 사용하면 열 값이 부분적으로 일치하는 경우에도 ‘참‘
  • LIKE 술어는 이항 연산자처럼 항목을 지정합니다. 왼쪽에는 매칭 대상을 지정하고, 오른쪽은 패턴을 문자열로 지정
  • 단, 수치형(숫자) 상수는 지정 불가
  • 패턴을 지정할때 “메타문자(와일드카드)”를 사용 가능

LIKE 술어의 메타문자

메타문자
  • 와일드카드라고 불림
  • 임의의 문자 또는 문자열을 나타냄
  • % : 임의의 문자열
  • _(언더바): 임의의 문자 (하나)

→이메일을 검색할 때 특정 도메인을 찾거나 제품명 찾을 때 활용 가능

만약에

select * from SAMPLE25 where TEXT like 'SQL%'; 라는 식을 작성할 경우

이 값이 나옴

3행이 나오지 않는 이유: SQL 앞에도 문자가 있기 때문

3행도 함께 검색하고 싶다면 “%SQL%”로 와일드 카드를 검색해야 함

  • ‘%’는 빈 문자열에도 매치됨 → SQL 앞이나 뒤에 아무것도 없어도 해당이 됨
  • ‘%SQL%라고 해도 1번 문장이 추출되는 이유임

이스케이프 문자

만약 LIKE로 % 문자를 검색하고 싶다면? -이스케이프 문자

WHERE text LIKE ‘%\%%’

**주의할 점

  • (’) 단일 콤마를 써야 함

‘% /%%’; → 오른쪽 왼쪽 짝 콤마로 나오면 오류가 나옴

  • 이스케이프 문자 사용

(\) 백슬래시를 이스케이프 문자로 사용함

\ + 문자

이스케이프란?

특정 문자가 특별한 의미를 갖지 않고 문자 그대로 해석되는 것 %가 와일드 연산자가 아닌 “%”그대로 검색하려면 \이스케이프 문자를 사용해야 함

문자열 상수’의 이스케이프

메타문자를 검색할 때처럼 문자열 상수를 검색할 때도 같은 문제 발생

  • 표준 SQL에서는 ‘를 연속해서 사용하는 것으로 이스케이프 처리

정렬과 연산

ORDER BY

ORDER BY 구를 통해 검색 결과의 행 순서를 바꿀 수 있음

  • SYNTAX
  • 순서를 지정하지 않은 경우에는 데이터베이스 내부에 저장된 순서대로 반환
  • odrer by 는 where 뒤에 지정함 (where 구가 없다면, from 구 뒤에 지정)
오름차순
  • select * from 테이블 order by age asc;
  • asc가 디폴트라 생략 가능
내림차순
  • select * from 테이블 order by age desc;

정렬할 때 애트리부트 타입이 문자형(VAR)인지, 수치형(INT)인지 확인하고 정렬해야 함

✅order by 문자열 데이터는 영어라면 알파벳순/ 한글은 자음, 모음순으로 비교해 정

ORDER BY구는 실제 저장된 순서에 영향을 주지는 않음 (출력만 정렬돼서 나오는 것)

SELECT는 데이터를 검색하는 명령어로 데이터를 참조해 출력해서 보여줄 뿐, 변경은 할 수 없음

NULL 값에 항상 주의해야 함→전처리할 때 결측치, 이상치 처리를 해야 함

  • 보통 NULL값이 맨 위(가장 작은 값 ASC하면 상단)에 올라가거나 맨 아래에 올라감
  • 데이터 처리를 하기 전 WHERE 구를 통해 ISNULL로 결측치 처리를 해야 함

ORDER BY 복수 열 지정

부터 정리하렴 ^^

데이터의 양이 많을 경우에는, 하나의 열만으로는 행을 특정짓기 어려울 때 ex) “상품코드와 해당 상품의 하위번호“ 까지 고려해야 하는 경우

SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명1 [ASC|DESC], 열명2 [ASC|DESC]

→ 복수의 열을 (콤마)를 통해 지정하면, 먼저 온 열부터 정렬하고 값이 같은 부분은 다음 열을 통해 정렬

LIMIT - 반환할 행의 최대 수 지정

SELECT 명령문에서 결과값으로 반환되는 행을 제한

• Syntax

 

SELECT 열명 FROM 테이블명 LIMIT 행수 [OFFSET 시작행]

 

SELECT * FROM SAMPLE33 LIMIT 3;

→ 상위 3건만 취득

 

LIMIT으로 지정하는 것은 ‘최대 행수’로 만약 갖고 있는 행보다 큰 수를 입력한다면 지닌 행수만 반환됨

Where 구를 통해서 WHERE no <= 3 과 같은 조건을 붙인다면 동일한 결과를 얻을 수도 있음

 

✅하지만, WHERE 과는 내부 처리 순서가 전혀 다름

(WHERE 구로 검색한 후, ORDER BY로 정렬한 뒤에, 최종적으로 LIMIT를 처리함)

 

*MY SQL 과 오라클의 LIMIT 방식이 다름

  • SQL Server 에서는 SELECT TOP 3 * from smaple33;
  • • Oracle 에서는 SELECT * FROM sample33 WHERE ROWNUM <= 33;

OFFSET 지정 - 건너뛸 행의 수 지정

Copy
SELECT * FROM SAMPLE33 LIMIT 3 OFFSET 0;
-> 123 이 답으로 나옴
'LIMI 3': 최대 3개의 행을 반환
'OFFSET 0' : 결과의 처음부터(0번쨰 행) 3개의 행을 반환
Copy
SELECT * FROM SAMPLE33 LIMIT 3 OFFSET 3;
-> 456 이 답으로 나옴
'LIMI 3': 최대 3개의 행을 반환
'OFFSET 3' : 결과의 3개의 행을 건너뛰고 4번째부터 3개의 행을 반환

수치연산

산술연산자

SELECT 구를 통한 연산하기

  • 가격*수량으로 금액 계산해보기

열에 별명 짓기

새로 나온 값(어트리부트) 이름 짓기

price * qunatity를 amount라고 짓기

SELECT *, price * quantity as amount from sample34;

Select 구에서는 ,(콤마)로 구분하여서 복수의 식을 지정할 수 있고 각각의 식에 별명을 붙일 수 있dma • 기본적으로 중복되지 않도록 별명을 붙입니다. • 키워드 AS는 생략 가능 대신 큰 따옴표 필요

SELECT *, price * quantity "amount" from sample34;

  • as는 에일리어스, 알리아스(alias)라고 불림
  • 별명을 한글로 지정하는 경우에 여러가지 오작동을 할 수 있으므로 “”로 감싸거나, 영어로 짓기를 권장

더블 쿼트 (큰따옴표”)로 감싸면 → 데이터 베이스 객체명을 의미

싱글 쿼트 (작은 따옴표 ‘)로 감싸면 → 문자열 상수를 의미

WHERE 구에서 연산하기

SELECT구 뿐만 아니라 WHERE구에서 연산 가능

ex. 가격 * 구량으로 금액을 계산해, 2000원 이상에 해당하는 행을 검색할 수 있음