HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📩
캐글 데이터로 살펴보는 데이터분석 With Python and SAS
/
📋
6.2 SQL 함수
📋

6.2 SQL 함수

SQL 함수란?(실습) SQL 함수(실습) SUBSTR(컬럼, START, LENTH) : 슬라이싱(실습) 문제(실습) 날짜(실습) 통계(실습 안함) 문자열 변환(실습) 문제 풀이
 
 

SQL 함수란?

미리 정의된 기능 모음, 단일 행 함수와 그룹 함수가 있습니다. 모든 함수를 나열한 것은 아니지만, 전체적으로 어떤 기능들이 구현되어 있는지 보기에는 수월할 것입니다.

데이터 타입 함수
  • 문자 : CHAR(값) : 문자 타입 지정 2000바이트
  • 문자 : VARCHAR2(값) : 문자 타입 지정 4000바이트
  • 숫자 : Oracle에서는 NUMBER(정수 자릿수, 소수 자릿수), MySQL은 INT사용
  • 날짜 : DATE()
  • 시간 : TIME()

문자열 처리
  • CONCAT('abc', 'def') → 'abcdef' : 문자열을 연결합니다.
  • LOWER('ABC') → 'abc'
  • UPPER('abc') → 'ABC'
  • INITCAP('abc') → 'Abc' : 앞문자만 대문자
  • SUBSTR('hello world', 1, 5) → 'hello' : 문자열을 자를 때 많이 사용합니다. 숫자는 시작위치, 자를 문자열의 길이를 나타냅니다.
  • REPLACE('hello world', 'world', 'SQL') → 'hello SQL' : 바꾸고 싶은 값으로 대상 값을 교체합니다.
  • LENGTH('hello') → 5 : 문자열의 길이를 출력합니다. COUNT와 비교해서 기억해주세요.
  • COUNT : 행의 개수를 출력합니다.
  • INSTR('ABCDEF', 'B') → 2 : 문자열의 위치를 구합니다. 여기서 INDEX는 1부터 시작합니다. 프로그래밍 언어는 0부터 시작하니, 이 차이를 꼭 기억해두세요.

  • ROUND(반올림할 숫자, 자릿수) : 숫자를 반올림, 0이 소숫점 첫째자리
  • TRUNC(절삭할 숫자, 자릿수) : 숫자를 절삭, 0이 소숫점 첫째자리
  • MOD(수, 나누는 값) : 나머지
  • POWER(수, 승수) : 제곱 출력
  • SQRT : 제곱근 출력

(실습) SQL 함수

AS를 사용하지 않아도 동일하게 출력합니다. 대문자와 소문자로 바꾸어 보았어요.

(실습) SUBSTR(컬럼, START, LENTH) : 슬라이싱

(실습) 문제

  1. 이름의 문자열의 길이를 출력해주세요.
  1. 이름의 앞 5자리를 *로 처리해주세요.
여기서 사용한 SUBSTR 같은 경우
  • Oracle은 SUBSTR, SUBSTRB
  • MsSQL은 SUBSTRING
  • MySQL은 SUBSTRING, SUBSTR, MID
을 사용합니다.

(실습) 날짜

날짜와 시간이 어떻게 더해지는지 확인해보세요.

(실습) 통계

통계관련된 함수를 실습해봅니다. 하나씩 사용해보세요. 보통은 분산과 표준편차 함수도 제공합니다. W3School에서는 분산과 표준편차가 작동하지 않습니다.

(실습 안함) 문자열 변환

실습은 안하지만 해당함수는 간혹 SQL Injection 공격에 사용되곤하니, 혹시 정보보안을 공부하는 학생이라면 기억해주시기 바랍니다.
 

(실습) 문제 풀이

  1. 전체 제품의 개수를 구해주세요.
    1. 아래 1번 쿼리처럼 구문을 작성하시면 안됩니다. 이유는 아래 코드를 실행해보시면 알 수 있습니다.
  1. 값의 평균을 구해주세요. (함수를 사용해주세요.)
  1. 제품 이름이 'A'로 시작하면서 가격이 평균 이상인 제품을 구해주세요. 아래와 같이 작성하면 애러가 발생됩니다. 이유를 설명하고, 코드를 작성하세요.
 
SELECT CustomerID, CustomerName, LOWER(CustomerName) AS 소문자, UPPER(CustomerName) AS 대문자 FROM Customers;
SELECT SUBSTR('hello world', 1, 5);
SELECT CustomerID, CustomerName, LENGTH(CustomerName) AS 이름길이, SUBSTR(CustomerName, 6) AS 자른이름, REPLACE(CustomerName, SUBSTR(CustomerName, 0, 6), '******') AS 별표채운이름 FROM Customers;
SELECT DATE();
SELECT DATE() + 10;
SELECT TIME() + 10;
SELECT MAX(CustomerID) AS 최댓값 FROM Customers; SELECT SUM(CustomerID) AS 전체합 FROM Customers; SELECT MIN(CustomerID) AS 최솟값 FROM Customers; SELECT COUNT(CustomerID) AS 전체행의수 FROM Customers; SELECT AVG(CustomerID) AS 평균 FROM Customers;
SELECT CHAR(65) || CHAR(65)); SELECT CONCAT(CHAR(65), CHAR(65)); SELECT ASCII('A');
SELECT * FROM Products;
/* SELECT COUNT(ProductID) FROM Products; */ SELECT COUNT(*) FROM Products;
INSERT INTO Products (Price) VALUES ('500');
SELECT COUNT(ProductName) FROM Products;
SELECT AVG(Price) FROM Products;
/* SELECT * FROM Products WHERE ProductName LIKE 'A%' AND Price > AVG(Price); */