- 공유 링크 만들기
- X
- 이메일
- 기타 앱
비교연산 < , >, =, !=, <> , <=, >=
연산자
1 + 5
피연산자 연산자 피연산자
자바에서 a++ -> 단항연산자
int a = b > 5 ? a : b ----> 자바에서 삼항연산자
BETWEEN AND : WHERE 비교대상 BETWEEN 시작값 AND 종료값
비교대상이 시작값부터 종료값까지의 값을 가지냐? -> 참 -> 그부분 출력
만약 이게 거짓 --> 출력이 없음
IN : WHERE 비교대상 IN (A, B, ...)
OR의 의미로 AD이거나 B이거나.....
LIKE : WHERE 비교대상 LIKE '매칭문자열 % _ '
NULL 비교
NULL 값은 =, != 등의 비교연산으로 비교가 불가능
비교연산을 사용할 수가 없다. = 도 비교연산.. !!!!
EX : EMP 테이블에는 comm컬럼의 값이 NULL인 데이터가 존재
comm이 NULL인 데이터를 조회하기 위해 = , != 등이 연산자로 실행할 경우 정상적으로 작동하지 않음
SELECT *
FROM emp
WHERE comm IS NULL;
comm 컬럼값이 null 이 아닐때 =, !=, <>을 사용할 수 있다.
IN <-----> NOT IN
사원중 소속 부서가 10번이 아닌 사원 조회
select *
FROM emp
WHERE deptno NOT IN (10) ;
논리연산 : AND, OR, NOT
AND, OR : 조건을 결합
- WHERE 절에 AND 조건을 사용하게 되면 : 보통 행은 줄어든다
-WHERE 절에 OR 조건을 사용하게 되면 : 보통 행이 더 많다.
NOT : 부정 연산
다른 연산자와 함께 사용되며 부정형 표현으로 사용됨
EX) 과제 : emp 테이블의 사원중에 mgr 가 7698, 7839가 아닌 직원
SELECT *
FROM emp
where mgr != 7968
AND mgr != 7839;
SELECT *
FROM EMP
where mgr NOT IN ( 7668, 7839 );
결론 : IN은 OR 연산자로 대체하는게 가능
WHERE mgr NOT IN (7698, 7839);
==> mgr != 7698 AND mgr != 7839
NULL
IN 연산자 사용시 NULL 데이터 유의점
요구사항 : mgr가 7698, 7839, Null 이 아닌 사원만 조회
SELECT *
FROM emp
WHERE mgr IN ( 7698, 7839, NULL) ;
WHERE mgr NOT IN ( 7698, 7839);
====> mgr != 7698, AND mgr != 7839
NULL
IN 연산자 사용시 NULL 데이터 유의점
NULL 비교는 연산자 + = 이런거로 못한다.
문제 : NULL 비교는 IS라는 특수 연산자를 이용한다.
WHERE mgr NOT IN (7698, 7839, NULL);
---> 해석 : mgr != 7698 AND mgr != 7839 AND mgr != NULL
mgr != NULL 은 항상 false 왜냐면 != 이 연산자가 아니라 is라는 연산자를 사용해야 하기 때문
SELECT *
FROM emp
WHERE job = 'SALESMAN'
SALESMAN은 데이터라서 대소문자를 구분함 그리고 데이터이기 때문에 ' '이랑 쓰임
/date 타입에 대한 표현 잘 알아놓기 TO_DATE('1982/01/01', 'YYYY/MM/DD')
. AND와 OR 중에 AND 가 더 우선순위가 높다.
따라서
조건 1 OR 조건2 AND 조건3 이면
이걸 실제로 들어가봤을때 AND연산자가 우선이기 때문에 조건1 OR (조건2 AND 조건3 ) 이렇게 조건2와 조건 3 먼저 해줘야한다.
만약 조건 OR 조건2를 먼저 해주고 싶으면 괄호를 묶어야 한다
/정렬
아래 SQL의 실행결과, 데이터의 조회 순서는 보장되지 않는다.
지금은 7369, 7499....조회가 되지만
내일 동일한 SQL을 실행하더라도 오늘 순서가 보장되지 않는다 ( 바뀔 수 있다. )
*데이터는 보편적으로 데이터를 입력한 순서대로 나온다 ( 보장은 아님)
테이블에는 순서가 없다.
시스템을 만들다 보면 데이터의 정렬이 중요한 경우가 많다.
게시판 글 리스트 : 가장 최신글이 가장위로
매우 중요함.
** 즉 SELECT 결과 행의 순서를 조정할 수 있어야 한다.
==> ORDER BY 구문
문법
SELECT *
FROM 테이블명
WHERE
ORDER BY column1, column2 ....
column1로 정렬이 됬는데 두개가 같을때는 column2로 정렬이 된다.
오름차순 (ASC) : 값이 작은 순서부터 큰 데이터 순으로 나열
내림차순 (DESC) : 값이 큰 데이터부터 작은 데이터 순으로 나열
ORACLE에서는 기본적으로 오름차순이 기본 값으로 적용됨.
내림차순으로 정렬을 원할 경우 정렬 기준 컬럼 뒤에 DESC를 붙여주기
/참고
1. ORDER BY 절에 별칭 사용 가능
EX ) SELECT empno eno, enam enm
FROM emp
ORDER BY enm;
2. ORDER BY 절에 SELECT 절의 컬럼 순서 번호로 간략하게 할 수 있다
SELECT empno, ename
FROM emp
ORDER 2 ; --> 의미 : ORDER BY ename
? by안붙이는건가??
3. EXPRESSION도 가능하다.
SELECT empno, enma, sal * 500
FROM emp
ORDER BY sal * 500
도 가능하다는 얘기 * sal * 500 을 select 에서 별칭으로 놓고 ORDER BY 에 별칭으로 넣어도 된다.
SELECT *
FROM emp
WHERE (deptno 10 OR 30) ------> or를 먼저 연산하려고
AND sal > 1500
ORDER BY ename DESC;
* 참고 연산자 우선 순위
1. 산술연산자 ( * , /, +, - )
2. 문자열 결합 (|| )
3. 비교연산( =, <= , < , >=, > )
4. IS, [NOT ] NULL , LIKE, [NOT] IN
5. [NOT] BETWEEN
6. NOT
7. AND
8. OR
일반 수학과 마찬가지로 괄호() 를 통해 우선순위를 변경할 수 있다.
댓글
댓글 쓰기