23일차 SQL
LIKE 연산자와 와일드카드(%)
값을 정확히 모를때에도 사용하기 위한 연산자.
형식
SELECT *
FROM emp
WHERE ename LIKE 'F%';
******F는 대소문자를 구문짓는 값을가지고 있기때문에 대문자 이어야한다.
% 문자가 없거나 또는 하나이상의 문자 (어떤 아무런 값)
_ 하나의 문자가 어떤문자가 와도 상관없다.
예제 - 이름중에 A를 포함하는 사원을 검색해봅시다.
SELECT *
FROM emp
WHERE ename LIKE '%A%';
'%A' - A가 마지막에 포함된 값을 검색
IS, IS NOT 비교
특정 컬럼 값이 NULL 값인지를 비교할 경우 비교연산자가 아닌 IS를 붙여 비교를 한다.
SELECT *
FROM emp
WHERE comm IS NULL;
= COMM이 NULL인 값들 출력
SELECT *
FROM emp
WHERE mgr IS NULL;
= 상관(MANAGER) 이 없는 사원을 검색
정렬을 위한 order by 절
기본 정렬은 오름차순이며 ASCENDING = ASC 을 사용하고
내림차순으로 정렬하려면 DESCENDING = DESC 를 사용한다.
SELECT *
FROM emp
ORDER BY SAL ; (여기서 SAL 뒤에 ASC가 생략되어있는거다)
내림차순 정렬을 하는 방법.
SELECT *
FROM emp
ORDER BY SAL DESC;
문자열도 비교 가능
SELECT *
FROM emp
ORDER BY ename ASC;
정렬 방식에 여러가지 조건을 제시하는 경우
SELECT *
FROM emp
ORDER BY sal DESC, ename ASC;
앞에 조건부터 정렬하고 뒤의 내용을 정렬한다.
DUAL 테이블
DUAL 테이블은 변수 라고 생각하면 된다.
즉 산술 결과를 저장하고 있는 임시 테이블 이다.
SELECT * FROM DUAL; < 빈 값이 들어가 있는 임시 테이블
emp 테이블에 넣어도 값이 변한다거나 하진 않는다.
SELECT -10, ABS(-10) FROM DUAL;
(ABS - 절대값을 구함)
SELECT 34.5678, FLOOR(34.5678) FROM DUAL;
(FLOOR - 뒤의 소수점을 잘라버림)
SELECT 34.5678, ROUND(34.5678) FROM DUAL;
(ROUND - 반올림)
SELECT 34.5678, ROUND(34.5678,2) FROM DUAL;
(ROUND - 소수 2쨰 자리에서 반올림)
SELECT 34.5678, ROUND(34.5678,-1), TRUNC(34.5678,-1) FROM DUAL;
(ROUND - 소수 -1번쨰 자리(34.5678에서 4 << 이부분)에서 반올림과
TRUNC - 버림 -1번째 에서 버림)
SELECT MOD (27,2), MOD(27,5), MOD(27,7) FROM DUAL;
(MOD - 나머지연산자 27을 2로 나눈 나머지, 27을 5로 27을 7로 나눈 ~~)
예제- 사원번호가 홀수인 사원을 검색해보시오.
문자열 DUAL;
SELECT 'Welcome to oracle',
UPPER('Welcom to oracle'), LOWER('Welcom to oracle')
FROM DUAL;
(UPPER, LOWER 를 이용한 문자 변환)
LENGTH. 문자열 길이 출력
SELECT LENGTH('ORACLE'), LENGTH('오라클') FROM DUAL;
LENGTHB. 문자열 길이 출력(Byte형식으로)
SELECT LENGTHB('ORACLE'), LENGTHB('오라클') FROM DUAL;
한글은 인코딩 때문에 기본적으로 +1Byte 되서 3Byte.
SUBSTR(대상, 시작위치, 추출갯수)
SELECT SUBSTR ('Welcome to oracle',4,3) FROM DUAL;
예제 - 09월에 입사한 사원검색.
SELECT * FROM emp WHERE SUBSTR(HIREDATE,4,2)='09';
예제2 - 입사년도 맨마지막이 2년도인 사원
SELECT * FROM emp WHERE SUBSTR(HIREDATE,1,2) LIKE '_2';
함수는 DB안에 들어가있는 형태를 가지고 비교한다.
그래서 HIREDATE 에서 1,2 로 지정해놨어도 앞에 ‘19’를 뽑아내지 않는 이유이다
SUBSTR 과 SUBSTRB
SELECT 'Welcome to oracle',
SUBSTR('웰콩오오옴오라클',3,4), SUBSTRB('웰퀌투오라클',3,4)
FROM DUAL;
한글이 인코딩 때문에 3Byte가 됨을 기억하자.
INSTR
형태 - INSTR(대상,찾을글자,시작위치,몇번째발견)
SELECT INSTR('Welcome to oracle','o',1,2) FROM DUAL;
첫번째 자리부터(W) ‘o’를 찾는데, 2번째 ‘o’ 를 찾는다 =
Welcome to oracle ='Welcome t”o” oracle
예제 - 이름 세번째 자리가 R로 끝나는 사원을 검색.
SELECT * FROM emp WHERE INSTR(ename,'R',3,1)=3;
특정기호로 채우는 LPAD RPAD
SELECT LPAD('Welcome',20,'@') FROM DUAL;
20자리 마련 후 오른쪽에 대상 문자열을 출력하고 빈 공간을 @ 로 채운다
그리고
RPAD
공백을 삭제하는 TRIM,LTRIM, RTRIM
SELECT
LTRIM(' Welcome') 앞쪽공백,
RTRIM('Welcome ')뒤의공백,
TRIM ('Welcome ')그냥공백
FROM DUAL;
'휴지통 > 휴지통1' 카테고리의 다른 글
JAVA 채팅 프로그램 해설 및 주석하며 리뷰 (0) | 2015.12.24 |
---|---|
JAVA - 채팅프로그래밍. (0) | 2015.12.23 |
SQL 3일차 - 데이터 추출하기 (논리연산자...) (0) | 2015.12.22 |
SQL 2일차 - 명령어 (0) | 2015.12.22 |
SQL 2일차 - SELECT (0) | 2015.12.22 |
댓글