SQL[03] - 연산자(비교, 논리, 조건)
*오라클 oracle 기준
*예제의 테이블은 전부 emp 기준으로 한다
- 조건연산자
∙ WHERE 절 : 조건 주기 - 비교 연산자
∙ > >= < <= ! != : 크다, 같거나크다, 작다, 같거나작다, 값이 동일할때, 값이 다를때 - 논리 연산자
∙ AND : 값1 그리고 값2
∙ OR : 값1 또는 값2
∙ NOT : 값이/조건이 아닐때, ~이외의 값 - SQL 연산자
∙ BETWEEN A AND B : A와 B사이의 값
∙ IN(값 나열) : 포함된 값
∙ LIKE '비교문자열' %_ : 문자열과 같을때
∙ IS NULL : 값이 NULL일때
∙ IS NOT NULL : 값이 NULL이 아닐때
* NOT 연산자를 SQL 연산자와 같이 쓸때는 연산자(절) 앞에 오면된다.
Ex) NOT IN / NOT LIKE / NOT BETWEEN / WHERE에는 뒤에! WHERE NOT 조건
where 절
• 원하는 조건만 골라낼 수 있음
• where 절은 from절 뒤에 작성함
• > >= < <= = is not ⋯
• 조건 여러개 이을려면 and 나 or
select [컬럼명 또는 표현식] from [테이블명 또는 뷰명] where 조건;
⒈ 기본 산술연산자 사용하기 (+ - / *)
• 칼럼명에 산술할 연산 함께 써주면 된다.
• 산술연산자이기 때문에 문자는 불가능하고 숫자만 가능하다. (숫자외에 사용하면 부적합한 식별자라고 오류가 뜸)
Ex) emp 테이블의 ename과 sal칼럼 데이터에 1.1곱하여 출력
SELECT ename, sal*1.1 FROM emp WHERE deptno = 10;
⒉ 비교연산자 사용하기
• 숫자 문자 모두 사용가능
문자열은 '' 홑따옴표~!
-- sal값이 4000이상인 칼럼 출력하는데 empno,ename,sal 이렇게 칼럼 조회하기
SELECT empno, ename, sal FROM emp WHERE sal >= 4000;
-- 값은 대소문자 주의하여 넣어주기! 대소문자 구별
-- 대문자는 대문자끼리, 소문자는 소문자끼리만 비교된다
-- R보다 크다 > R 이후 순서의 알파벳 / R보다 작다 > R 이전 순서의 알파
SELECT empno, ename, sal FROM emp WHERE ename >= 'R';
-- 날짜도 가능하다. 홑따옴표로 묶어주고 년-월-일 또는 년/월/일
-- MAC은 01-JAN-82 / 일-달 영어약자-년
SELECT empno, ename, hiredate FROM emp WHERE hiredate >= '82-01-01';
⒊ between절
• [조건을 줄 컬럼명] ?? AND ?? ▸ 두개의값 사이에 있는 값 조회 (두개의 값도 포함)
Ex) sal 칼럼에서 2000~3000의 값을 가지고 있는 데이터의 ename, sal 조회하기
**숫자**
SELECT ename, sal FROM emp WHERE sal BETWEEN 2000 AND 3000;
SELECT ename, sal FROM emp WHERE sal >= 2000 AND sal <= 3000; -- 이게 속도가 더 빠르다
**문자**
Ex) ename 칼럼에서 JAMES와 MARTINE 포함 사이의 값을 가지고 있는 데이터의 ename 조회하기
SELECT ename FROM emp ORDER BY ename; -- 오름차순 정렬
SELECT ename FROM emp WHERE ename BETWEEN 'JAMES' AND 'MARTINE' ORDER BY ename;
⒋ in절
• 말그대로 칼럼안에 들어있는 원하는 데이터를 조회하는 것이다.
• in절 괄호안의 값과 일치하는 데이터 조회하기
Ex) deptno 칼럼에 값이 20 또는 30과 일치하는 데이터의 empno,ename,deptno을 조회하기
SELECT empno, ename, deptno FROM emp WHERE deptno in(20, 30); --괄호안의 값과 일치하는 데이터
5. like절
• % _ 두개의 기호와 같이 사용
• % : 글자수 제한 없고 어떤 글자가 와도 상관없다
• _ : 글자수는 한글자만 올 수 있고 어떤 글자가 와도 상관 없다
SELECT empno, ename FROM emp WHERE ename LIKE 'A%'; -- A로 시작하는
SELECT empno, ename FROM emp WHERE ename LIKE '%R'; -- R로 끝나는
SELECT ename, sal FROM emp WHERE sal LIKE '1%'; -- 1로 시작하는
SELECT ename, sal FROM emp WHERE ename LIKE '%N%'; -- N을 포함하는
SELECT ename, hiredate FROM emp WHERE hiredate LIKE '82%'; -- 82로 시작하는
SELECT ename, hiredate FROM emp WHERE hiredate LIKE '___12%'; -- 4,5번째가 12인
SELECT ename, hiredate FROM emp WHERE ename LIKE '_L%'; == 두번째가 L인
⒍ IS NULL / IS NOT NULL
• 값이 무엇인지 모를 경우 사용한다
Ex) comm 칼럼에 값이 없는 데이터의 ename,comm를 조회한다
select ename, comm from emp where cpmm is null;

[null] 이라고 나오지만 아예 값이 없는 상태이다.
null이라는 값이 있는것도 아님.! 값 데이터가 아예 없을무 이다.
⒎ order by 절 - 정렬
• 정렬 order by [정렬기준의 컬럼명 또는 컬럼번호] [옵션(오름차순,내림차순)];
• 정렬하여 조회해준다.
• 오름차순 ASC (default로 생략 가능), 내림차순 DESC
• order by 절은 sql 쿼리문장의 가장 마지막에 위치해야 한다
• 데이터의 양이 많을때 처리속도가 현저히 떨어진다
--#1
SELECT ename, sal, hiredate FROM emp ORDER BY ename DESC;
--#2
SELECT deptno, sal, ename FROM emp
ORDER BY deptno ASC, sal DESC; -- 첫번째 정렬하고 그안에서 두번째 기준으로 정렬함
--#3
SELECT deptno, sal, ename FROM EMP
ORDER BY 1,2 DESC; -- 인덱스번호
/*
#2와 #3은 같은 결과가 나온다.
선택한 컬럼에서 첫번째는 오름차순, 두번째는 내림차순으로 정렬해서 조회하라는 뜻
*/
-- sql의 인덱스 번호는 1부터 시작하고 차례로 지정된다.
-- ;까지 한문장이다.



SQL 처음 배웠는데 생각보다 재미지다!!!
처음에 데이터베이스 얘기하고, 데이터 연결하고, 데이터 가져오고 할때는 아찔한 기분이였는데 생각보다 들어가니까 괜찮은듯ㅎㅎㅎ 아직 초반이라서 그런것 같지만 (자바때도 이랬다가 삼일뒤에 바로 멘붕옴 ㅋㅎ) 열심히 잘 따라가봐야지 아자아자 화이팅