SQL LIKE 숫자 - SQL LIKE susja

< 논리연산자 >

-- EMP 테이블에서, 부서코드가 30이면서 급여가 1000이상인 사원 조회 SELECT * FROM EMP WHERE DEPTNO = 30 --WHERE 절 뒤에 **AND 연산자로 조건 추가** AND SAL >= 1000 -- EMP 테이블에서 급여가 2000이상이면서, JOB이 MANAGER인 사원 모든 칼럼 조회 SELECT * FROM EMP WHERE SAL >= 2000 --WHERE 절 뒤에 AND 연산자로 조건 추가 AND JOB = 'MANAGER' ; --EMP 네이블에서 급여가 2000이상이면서 4000이하인 사원의 사번, 사원명, 부서코드, 급여 조회 SELECT EMPNO, ENAME, DEPTNO, SAL FROM EMP WHERE SAL >= 2000 --WHERE 절 뒤에 AND 연산자로 조건 추가 AND SAL <= 4000;

< BETWEEN AND >

💡 **[문법]** WHERE 비교대상칼럼 BETWEEN A AND B

  • **WHERE 절에서 사용되는 구문**으로 범위에 대한 조건을 제시알 때 사용
  • 비교대상 칼럼 값이 A 이상이고 B 이하인 경우 TRUE를 리턴
  • 초과 연산은 불가. 이상 이하에서만 사용 가능.
--EMP 테이블에서 급여가 2000이상이면서 4000이하인 사원의 사번, 사원명, 부서코드, 급여 조회 SELECT EMPNO, ENAME, DEPTNO, SAL FROM EMP WHERE SAL BETWEEN 2000 AND 4000 --AND --DEPTNO BETWEEN 20 AND 40 -- BETWEEN ; -- EMP 네이블에서 급여가 2000이상이면서 4000이하가 아닌 사원의 사번, 사원명, 부서코드, 급여 조회 SELECT EMPNO, ENAME, DEPTNO, SAL FROM EMP WHERE SAL NOT BETWEEN 2000 AND 4000 -- NOT 은 칼럼 앞 또는 BETWEEN 앞에 작성 가능 ; -- EMP 테이블에서, 입사일이 81/01/01 ~ 81/12/31이 아닌 사원 모든 칼럼 조회 SELECT * FROM EMP WHERE HIREDATE NOT BETWEEN '81/01/01' AND '81/12/31' ORDER BY HIREDATE DESC -- ORDER BY 값정렬! 기본적으로는 ASC(오름차순) -- DESC 내림차순 ; SELECT * FROM EMP WHERE SAL < 1000 OR NOT SAL >4000 ;

< LIKE>

💡 [문법] WHERE 비교칼럼 LIKE '패턴';

  • 비교하려는 칼럼이 지정된 특정 패턴에 만족할 경우 TRUE 리턴-
  • 특정 패턴에는 '%' , '' 를 와일드 카드로 사용 가능.
    % : 0글자 이상일 때. / : 1글자

비교칼럼 LIKE '안녕%' => 비교칼럼 값 중 '안녕' 으로 시작하는 모든 행을 조회.

비교칼럼 LIKE '%안녕' => 비교칼럼 값 중 '안녕' 으로 끝나는 모든 행을 조회.
비교칼럼 LIKE '%안녕%' => 비교칼럼 값 중 '안녕' 을 포함하는 모든 행을 조회.

비교칼럼 LIKE '_안녕' => 비교칼럼 값 중 '안녕' 앞에 한 글자가 오는 행을 조회.

비교칼럼 LIKE '안녕_' => 비교칼럼 값 중 '안녕' 뒤에 한 글자가 오는 행을 조회.

비교칼럼 LIKE '안녕__' => 비교칼럼 값 중 '안녕'뒤에 두 글자가 오는 행을 조회.

비교칼럼 LIKE '__' => 비교칼럼 값 중 두 글자가 오는 행을 조회.

--EMP테이블에서 이름이 J로 시작하는 사원의 사번, 사원명, 부서코드 SELECT EMPNO, ENAME, DEPTNO FROM EMP WHERE ENAME LIKE **'J%'** ; --EMP테이블에서 이름이 N로 끝나는 사원의 사번, 사원명, 부서코드 SELECT EMPNO, ENAME, DEPTNO FROM EMP WHERE ENAME LIKE '%N'; --EMP테이블에서 이름이 E가 포함되는 사원의 사번, 사원명, 부서코드 SELECT EMPNO, ENAME, DEPTNO FROM EMP WHERE ENAME LIKE '%E%'; --EMP테이블에서 이름이 5글자인 사원의 사번, 사원명 SELECT EMPNO, ENAME FROM EMP WHERE ENAME LIKE '_____'; --EMP테이블에서 사원번호의 두 번째 자리가 '5'인 사원의 사번, 사원명 SELECT EMPNO, ENAME FROM EMP WHERE EMPNO LIKE '_5%'; -- 뒷자리에는 어떤게 들어올지 모르므로 '%' 붙여주기! ----------------------실습----------------------------- --EMP테이블에서 이름의 첫 글자가 S 가 아닌 사원의 사번 이름 조회 SELECT EMPNO, ENAME FROM EMP WHERE ENAME NOT LIKE 'S%'; -- NOT 은 LIKE 앞 또는 칼럼명 앞에 쓸 수 있음.

💡 [문법] WHERE 비교칼럼 IN( 값, 값, 값, 값, ... 값); - 값 목록 중 일치하는 값이 있을 경우 TRUE 리턴

--EMP 테이블에서 JOD이 SALESMAN 이거나 MANAGER인 사원의 모든 칼럼 SELECT * FROM EMP WHERE JOB IN ('SALESMAN', 'MANAGER');-- OR로도 쓸 수 있음.

💡

  • SQL 마지막에 추가하여 정렬 기능-
  • ASC, DESC로 오름차순, 내림차순 정렬 가능
  • 기본적으로는 ASC로 설정되어 있음.
  • 마지막에 추가하면 됨.
SELECT * FROM EMP ORDER BY COMM ORDER BY COMM **ASC -- 오름차순** ORDER BY COMM **DESC -- 내림차순** ORDER BY COMM DESC NULLS **FIRST** -- 배열 시 NULL값을 처음 위치시킴. ORDER BY COMM ASC NULLS LAST --EMP 테이블의 EMPNO, ENAME, HIREDATE 데이터 조회 SELECT EMPNO 사번, ENAME 사원명, HIREDATE 입사일 FROM EMP --ORDER BY HIREDATE ORDER BY 입사일 -- **별칭 이용해서 조회 가능!**

함수

<함수>

💡 칼럼값을 읽어서 계산 결과를 반환

  • 단일행 함수 : N개의 값을 읽고 N개의 결과 리턴(매 행마다, 함수 실행 -> 결과 반환)

  • 그룹 함수 : N개의 값을 읽고 1개의 결과 리턴(하나의 그룹 별로 함수 실행 -> 결과 반환)

    : SELECT절에 단일행 함수와 그룹 함수를 **함께 사용할 수 없음**.(결과 행의 갯수가 다르므로)
    : 함수를 기술할 수 있는 위치는 SELECT, WHERE, ORDER BY, HAVING 절에 기술할 수 있음.

단일행 함수

< 문자 관련 함수 >

LENGTH / LEGNTHB

💡 LENGTH (칼럼 | '문자열') : **`글자 수`** 반환 LENGTHB (칼럼 | '문자열') : 글자의 `**바이트 수**` 반환 한글 : 3BYTE 영문자, 숫자, 특수문자 : 1BYTE

*** DUAL 테이블**

  • SYS 사용자가 소유하는 테이블
  • SYS 사용자가 소유하지만, 모든 사용자가 접근이 가능한다.
  • 한 행, 한 칼럼을 가지고 있는 DUMMY 테이블이다.
  • 사용자가 함수를 사용할 때 임시로 사용하는 테이블.
SELECT LENGTH('안녕'),LENGTHB('안녕') FROM DUAL ; SELECT LENGTHB('안녕') FROM DUAL ; SELECT LENGTH (EMPNO), LENGTHB(ENAME) FROM EMP;

INSTR

💡

  • INSTR (칼럼 | '문자열', 찾을값 [ POSITION(==어떤 위치에서 시작할지 지정 가능)] , [OCCURENCE==몇번째 타겟인지]])
  • 칼럼 | 문자열 과 찾을 값은 무조건 들어가야하며 나머지 뒤의 내용은 선택사항
  • 지정한 위치부터 지정된 숫자 번째로 나타나는 문자의 시작 위치를 반환
SELECT INSTR('AABAACAABBAA', 'B') FROM DUAL; --3 : **B의 위치** SELECT INSTR('AABAACAABBAA', 'B', 1) FROM DUAL; --3 : B의 위치 SELECT INSTR('AABAACAABBAA', 'B', 1,2) FROM DUAL; --9 : **B의 위치(2번째 B)** SELECT INSTR('AABAACAABBAA', 'B',-1) FROM DUAL; --10 : **B의 위치(뒤에서부터 첫번째)** SELECT INSTR('AABAACAABBAA', 'B',-1,3) FROM DUAL; --3 : B의 위치(뒤에서부터 세번째) SELECT INSTR('AABAACAABBAA', 'B',5) FROM DUAL;-- 5는 다섯번째무터 탐색을 하겠다는 뜻 SELECT INSTR('AABAACAABBAA', 'B',5,2) FROM DUAL; SELECT INSTR('AABAACAABBAA', 'B',-4) FROM DUAL;--**B를 찾을건데 뒤에서부터 4번째의 값부터 찾겠다**는 뜻

LPAD / RPAD

💡 [문법]

LPAD | RPAD (칼럼|문자열 , 길이(바이트) [, 문자] )

  • 문자에 대해 통일감 있게 표시하고자 할 때 사용한다.
  • 제시된 칼럼|문자값에 임의의 문자를 왼쪽 또는 오른쪽에 덧붙여 최종 N 길이 만큼의 문자열 반환
-- 20만큼의 길이 중 ENAME 값은 오른쪽 정렬, **왼쪽은 공백으로** 채우기 SELECT LPAD(ENAME, 20) FROM EMP; -- 20만큼의 길이 중 ENAME 값은 오른쪽 정렬, **왼쪽은 '#'으로** 채우기 SELECT LPAD(ENAME, 10,'#') FROM EMP; -- 10만큼의 길이 중 ENAME 값은 왼쪽 정렬, **오른쪽은 공백**으로 채우기 SELECT RPAD(ENAME, 10) FROM EMP; -- 10만큼의 길이 중 ENAME 값은 왼쪽 정렬, **오른쪽은 '@'**으로 채우기 SELECT RPAD(ENAME, 10,'@') FROM EMP;

SUBSTR

💡 [문법]

SUBSTR(칼럼 | 문자값, POSITION [,LENGTH])

  • 문자 데이터에서 지정한 위치부터 지정한 갯수만큼의 문자열 추출해서 변환
SELECT 'HELLO WORLD' FROM DUAL; SELECT SUBSTR('HELLO WORLD',3) FROM DUAL; SELECT SUBSTR('HELLO WORLD',3, 5) FROM DUAL; -- **3번째부터 5개** 리턴 SELECT SUBSTR('HELLO WORLD',-5) FROM DUAL; --뒤에서부터 5번째 부터 리턴 SELECT SUBSTR('HELLO WORLD',-5,3) FROM DUAL;--(**'값 ', 자르기 시작할 위치, 자를 개수**)

CONCAT

💡 [문법]

  • CONCAT (칼럼 | 문자값, 칼럼|문자값)

  • 문자데이터 두 개 받아서 합쳐줌

  • || <- 사용하는게 더 편함!

SELECT CONCAT ('AAA', 'DDD') FROM DUAL; SELECT 'AAA'||'DDD' FROM DUAL;

REPLACE

💡 [문법]

REPLACE (칼럼 | 문자값 , TARGET , STR)

  • 칼럼 또는 문자값에서 TRARGET 을 STR로 변경하여 반환
SELECT '서울시 강남구 역삼동' FROM DUAL; SELECT REPLACE ('서울시 강남구 역삼동', '서울시', '서울특별시') FROM DUAL; SELECT '안녕하세요 안녕히가세요' FROM DUAL; -- 중간에 있는 특정 글자 지우고 싶을 때! SELECT REPLACE ('안녕하세요 안녕히가세요', '안녕','') FROM DUAL; -- 안녕 찾아서 빈 문자열로 바꿔버림.

< 숫자관련 함수 >

ABS(NUMBER)

💡 [문법]

ABS (NUMBER)

절댓값 구하는 함수

SELECT ABS(-7) FROM DUAL;

MOD

💡 [문법]

MOD
MOD(NUMBER, NUMBER)

  • 나머지 구하고 싶을 때 이용.
SELECT MOD(10,3) FROM DUAL;

ROUND

💡 [문법]

ROUND (NUMBER[, 위치])

  • 반올림
  • 위치 : 기본값 0 ( 0 = 생략 가능
SELECT ROUND(123.456) FROM DUAL; -- ROUND는 반올림 SELECT ROUND(123.456, 1) FROM DUAL; -- ,1 는 어디 자리에서 반올림을 할 건지 SELECT ROUND(123.456, 4) FROM DUAL; SELECT ROUND(123.456,-1) FROM DUAL;-- 소수점 기준으로 왼쪽부터 반올림 SELECT ROUND(123.456,-2) FROM DUAL; SELECT ROUND(123.456,-3) FROM DUAL; SELECT ROUND(345.345,-3) FROM DUAL;

CEIL / FLOOR / TRANC (소수점 관련 함수)

💡 [문법]

  1. CEIL
    CEIL(NUMBER)
  • (소수점 이하 내용을)무조건 올림
  1. FLOOR
  • FLOOR(NUMBER)
  • (소수점 이하 내용을)무조건 버림
  1. TRANC
  • TRANC
  • 위치 지정하여 (그냥) 버림.
  • 음수로 지정도 가능
SELECT CEIL(123.456) FROM DUAL; SELECT FLOOR(123.987) FROM DUAL; SELECT TRUNC(123.456) FROM DUAL; SELECT TRUNC(123.456, 1) FROM DUAL;-- 소수점 아래 **위치를 지정할 수 있음.** SELECT TRUNC(123.456, 2) FROM DUAL; SELECT TRUNC(123.456, -2) FROM DUAL;

< 날짜 관련 함수 >

CEIL / FLOOR / TRANC

💡 [문법]

  1. SYSDATE
  • 시스템의 현재 날짜와 시간 반환
  1. MONTHS_BTWEEN
  • 두 날짜 사이의 개월 수를 리턴
  • 리턴값은 NUMBER
  1. ADD_MONTHS
  • 특정 개월 수를 더해줌.
  • 리턴값 : DATE
  1. NEXT_DAY
    [문법]
    NEXT_DAY(DATE, 요일(문자|숫자))
  • DATE 기준 가장 가까운 다음 요일 리턴
  1. LAST_DAY
  • 해당 달의 마지막 날짜 리턴
  1. EXTRACT
  • EXTRACT( YEAR | MONTH | DAY FROM DATE )
  • 리턴타입은 NUMBER
SELECT ENAME, FLOOR( MONTHS_BETWEEN (SYSDATE,HIREDATE)) 근무개월수, HIREDATE 입사일 FROM EMP; SELECT ADD_MONTHS(SYSDATE, 6) FROM DUAL; SELECT ADD_MONTHS('2002/12/31', 6) FROM DUAL; SELECT SYSDATE, NEXT_DAY(SYSDATE, '목요일') FROM DUAL; SELECT SYSDATE, NEXT_DAY(SYSDATE, '수요일') FROM DUAL; SELECT SYSDATE, NEXT_DAY(SYSDATE, '금') FROM DUAL; SELECT SYSDATE, NEXT_DAY(SYSDATE, 1) FROM DUAL;-- '1'이 일요일로 설정 되어있음 -- SELECT SYSDATE, NEXT_DAY(SYSDATE, 'SUNDAY') FROM DUAL;-- 영어로 하려면 언어 설정 변경해야 함 ALTER SESSION SET NLS_LANGUAGE = AMERICAN;-- 언어변경 SELECT SYSDATE, NEXT_DAY(SYSDATE, 'SUN') FROM DUAL; SELECT SYSDATE, NEXT_DAY(SYSDATE, 'FRI') FROM DUAL; ALTER SESSION SET NLS_LANGUAGE = KOREAN;-- 언어변경 SELECT SYSDATE, NEXT_DAY(SYSDATE, '금') FROM DUAL; SELECT LAST_DAY (SYSDATE) FROM DUAL; -- 이번 달의 마지막 날짜 SELECT LAST_DAY ('2002/03/01') FROM DUAL; SELECT LAST_DAY ('2022/08/01') FROM DUAL; SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL; -- 날짜 포맷 변경 SELECT SYSDATE FROM DUAL; ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH:MI:SS AM'; ALTER SESSION SET NLS_DATE_FORMAT = 'RR/MM/DD';

< 형변환 함수 >

TO_CHAR / TO_DATE / TO_NUMBER

💡 [문법]

  1. TO_CHAR
    • 숫자, 날짜를 문자로 변경.
  2. TO_DATE
    • 숫자, 문자를 날짜로 변경.
  3. TO_NUMBER
    - 문자열 데이터를 숫자로 변경.
SELECT 1234 FROM DUAL; -- **숫자는 오른쪽정렬** 됨 SELECT TO_CHAR(1234, '999999')FROM DUAL; -- 6칸의 **공간 확보, 빈칸은 공백**으로 채움 SELECT TO_CHAR(1234, '000000')FROM DUAL; -- 6칸의 공간 확보, 빈칸은 0으로 채움 SELECT TO_CHAR(1234, 'L999999')FROM DUAL; -- **현재 설정된 나라의 화폐**단위 SELECT TO_CHAR(1234, '$999999')FROM DUAL; -- 달러로 표시 SELECT TO_CHAR(1234, 'L999,999')FROM DUAL; -- 6짜리 숫자 들어오고, 콤마찍기 -- 사원 테이블 급여 조회 SELECT EMPNO, ENAME, TO_CHAR(SAL, 'L99,999,999') FROM EMP ; -- 날짜 -> 문자 SELECT SYSDATE FROM DUAL; SELECT TO_CHAR(SYSDATE) FROM DUAL; -- 내가 **원하는 형태의 포멧으로** 쓰고싶을 때 사용 SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS AM') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS AM') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'MON DY , YYYY') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'MON DAY , YYYY') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD(DY)') FROM DUAL; -- 숫자 > 날짜 SELECT TO_DATE(20220706) FROM DUAL; -- 문자 > 날짜 SELECT TO_DATE('20220706') FROM DUAL; SELECT TO_DATE('2022/07/06') FROM DUAL; SELECT TO_DATE('2022-07-06') FROM DUAL; SELECT TO_DATE('2022.07.06') FROM DUAL; SELECT TO_NUMBER('123456789') FROM DUAL; --**오른쪽정렬 되면 숫자**! SELECT '123' + '456' FROM DUAL; -- 둘 다 문자열이지만 자동으로 숫자타입으로 형변환 후 연산처리 --SELECT '123' + '456A' FROM DUAL;-- 에러 : 숫자만 있을 땐 자동처리 되지만 문자 있으면 에러남 SELECT '10,000' + '20,000' FROM DUAL; SELECT TO_NUMBER('10,000', '99,999,999') + TO_NUMBER('20,000','99,999') FROM DUAL;

Toplist

최신 우편물

태그