basic/sql

SQL[03] - 연산자(비교, 논리, 조건)

못지(Motji) 2021. 5. 27. 22:52

*오라클 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부터 시작하고 차례로 지정된다.
-- ;까지 한문장이다.
더보기
#1 조회
#2 조회
#3 조회

 


SQL 처음 배웠는데 생각보다 재미지다!!!

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