● 함수?
    : 컬럼값이나 지정된 값을 읽어 연산한 결과를 반환하는 것
  ○ 단일 행 함수 : N개의 행의 컬럼 값을 전달하여 N개의 결과가 반환
  ○ 그룹 함수 : N개의 행의 컬럼 값을 전달하여 1개의 결과가 반환
                       (그룹의 수가 늘어나면 그룹의 수만큼 결과를 반환)              
    : 함수는 SELECT절, WHERE절, ORDER BY절, GROUP BY절, HAVING절에서 사용 가능

  ○ SELECT절 : 찾는 기준이 아닌, 눈으로 표기되는 총합, 계산 결과 등에 대한 것을 눈으로  봤을 때
                       정리해놓은 컬럼
                       -> 정리해서 보여주자!

  ○ WHERE절 : 찾는 조건이 되는 행을 작성해줌
                        길이, 크기, 결과가 조건에 부합하는 결과만 볼 수 있도록 설정
                       -> 내가 원하는 조건만 보여줘!

 

●단일행 함수

 ○ 문자열 관련 함수
   --1) LENGTH (문자열 | 컬럼명) : 문자열의 길이 반환
     SELECT 'HELLO WORLD', LENGTH('HELLO WORLD')
     FROM DUAL;
     -> 'HELLO WORLD'의 길이가 나옴, 결과 : 11

 ex) EMPLOYEE 테이블에서 사원명, 이메일 , 이메일 길이 조회
       이메일 길이 오름차순 조회


SELECT EMP_NAME, EMAIL, LENGTH(EMAIL) AS "이메일 길이"
FROM EMPLOYEE
WHERE LENGTH(EMAIL) <=12
ORDER BY "이메일 길이" ASC;



● INSTR(문자열 | 컬럼명, '찾을 문자열' [, 찾는 것을 시작할 위치 [, 순번] ] )
   : 찾을 시작 위치부터 지정된 순번째 찾은 문자열의 시작 위치를 반환

  ○ LIKE와 INSTR 차이점
     -- LIKE같은 경우 @ 들어갔는지 검색
     -- INSTR @ 몇번째에 있습니까?

-- 문자열에서 맨 앞에 있는 'B'의 위치를 조회
SELECT 'AAB AAC AA BB AA', INSTR('AAB AAC AA BB AA', 'B')
FROM DUAL; -- DUAL 존재하지 않는 테이블로 어떤 값을 테스트할 때 사용
-- ↑B가 처음부터 쭉 글자를 봤을 때 몇 번째에 위치해 있는가? 처음 B가 나타나는 위치는?


-- 문자열에서 5번째 부터 검색해서 처음 찾은 'B'의 위치 조회
SELECT 'AAB AAC AA BB AA', INSTR('AAB AAC AA BB AA', 'B' ,5)
FROM DUAL;
-- AAB A 5번째부터 B를 찾기 시작
-- AAB AAC AA B12번째 자리에서 B가 처음 나타났기 때문에 B는 12번째 자리에 위치한다 표시된 것


-- 문자열에서 5번 부터 검색 시작해서 2번째로 찾은 'B'의 위치 조회
SELECT 'AAB AAC AA BB AA', INSTR('AAB AAC AA BB AA', 'B' ,5, 2)
FROM DUAL;
-- AAB A 5번째부터 B를 찾기 시작
-- AAB AAC AA BB 13번째 자리에서 B가 두번째로 나타났기 때문에 B는 13번째 자리에 위치한다 표시된 것


● SUBSTR(문자열 | 컬러명, 시작위치 [,길이])
   : 문자열을 시작 위치부터 지정된 길이만큼 잘라내서 반환
   : 길이를 작성하지 않은 경우 시작 위치부터 끝까지 잘라내서 반환

-- 시작 위치, 자를 길이 지정
SELECT SUBSTR('ABCDE', 2, 3)
FROM DUAL;
--> 2번째 자리에 존재하는 B부터 시작해서
---> 총 3가지를 가지고 오겠다
----> B C D를 가지고 오는 것


-- 시작위치만 지정 하고 자를 길이는 미지정
SELECT SUBSTR('ABCDE', 4)
FROM DUAL;
--> ABCDE 에서 4번째 자리에 위치한 D부터 시작해서
---> 마지막까지 모두 가지고 오겠다는 것
----> D 다음에 있는 E까지 모두 가지고 온 것
-----> DE


-- EMPLOYEE 테이블에서
-- 사원명, 이메일 아이디에서 @ 앞에 있는 아이디만
-- 가지고 오고
-- 이메일 아이디를 오름차순 조회
-- -> 외우기 손으로 작성할 때 한글자도 틀리지 않고 작성
SELECT EMP_NAME, SUBSTR(EMAIL, 1, INSTR(EMAIL, '@') -1) AS "이메일 아이디"
FROM EMPLOYEE
ORDER BY "이메일 아이디" ASC;


-- INSTR(EMAIL, '@') 이메일 주소에서 @ 위치를 찾음
-- 찾은 다음에 @ 가 표시되면 안되기 때문에 -1 설정을 해서 @ 제거

SELECT EMP_NAME, SUBSTR(EMAIL, 1, INSTR(EMAIL, '@')) AS "이메일 아이디"
FROM EMPLOYEE
ORDER BY "이메일 아이디" ASC;


-- SUBSTR(EMAIL, 1) 을 작성하게 되면 나타나는 결과
SELECT EMP_NAME, SUBSTR(EMAIL, 1) AS "이메일 아이디"
FROM EMPLOYEE
ORDER BY "이메일 아이디" ASC;


-- 앞에서 부터 값을 가지고 올 때는 +를 작성해주지만
-- 뒤에서 부터 값을 가지고 오길 원할 때는 -를 작성
SELECT EMP_ID, PHONE, SUBSTR(PHONE, -4) AS "마지막_네자리" FROM EMPLOYEE;

'SQL' 카테고리의 다른 글

Oracle-함수2  (0) 2024.07.30
SELECT 5(LIKE)  (2) 2024.07.24
SELECT 4  (1) 2024.07.22
SELECT 3  (0) 2024.07.18
SELECT (1)  (0) 2024.07.11

+ Recent posts