SQLD/SQL
[DML]SELECT-연산자
김귤🐵
2023. 8. 30. 17:31
연산자
1.산술 연산자
연산자 | 의미 | 우선 순위 |
() | 괄호로 우선 순위를 조정 | 1 |
* | 곱하기 | 2 |
/ | 나누기 | 2 |
+ | 더하기 | 3 |
- | 빼기 | 3 |
- NUMBER,DATE 자료형에 적용되는 사칙 연산 기능을 가진 연산자
- 산술 연산자에서 NULL값은 NULL을 반환한다.
- 나누기 연산을 할 때 분모가 0값이면 에러가 발생한다
2.합성 연산자
오라클 ( || ) |
SQL-Server ( + ) |
SELECT 'S'||'Q'||'L'||'D' | SELECT S+Q+L+D |
- 문자와 문자를 연결할 때 사용하는 연산자
- CONCAT함수를 사용해도 똑같은 결과를 얻는다.
3.비교 연산자와 부정 비교 연산자
👉🏻비교 연산자
연산자 | 의미 | 예시 |
= | 같음 | col = 10 |
< | 작음 | col < 10 |
<= | 작거나 같음 | col <= 10 |
> | 크다 | col > 10 |
>= | 크거나 같음 | col >= 10 |
👉🏻부정 비교 연산자
연산자 | 의미 | 예시 |
!= | 같지 않음 | WHERE 성별 != '남' |
^= | 같지 않음 | WHERE 성별 ^= '남' |
<> | 같지 않음 | WHERE 성별 <> '남' |
NOT 컬럼명 >,=,< | 같지 않음 작지 않음 크지 않음 |
WHERE NOT 성별 = '남' WHERE NOT 점수 < 90 WHERE NOT 점수 > 90 |
4.다중행 비교 연산자
- 서브쿼리에서 결과가 2건 이상 반환될 수 있다면 반드시 다중 행 비교 연산자와 함께 사용해야한다.
연산자 | 설명 |
IN(서브쿼리) | 서브쿼리 결과에 존재하는 값이 하나라도 포함되어 있는지 확인(OR) |
비교연산자(=,<,<=,>,=>) ALL(서브쿼리) |
서브쿼리 결과에 존재하는 값이 모두 만족하는 값을 가져온다.(AND) WHERE AGE > ALL(SELECT AGE FROM STUDENT WHERE DEPARTMENT = 'Math') -서브쿼리의 결과값인 수학과 학생들의 나이보다 큰 AGE를 가진 조건을 반환 |
비교연산자(=,<,<=,>,=>) ANY(서브쿼리) |
서브쿼리 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미 WHERE price > ANY (SELECT price FROM product WHERE color='red'); *SOME과 ANY모두 동일한 동작을 한다. *IN과 ANY의 비교 -IN은 비교연산자와 함께 사용 불가능 -ANY는 비교연산자와 함께 사용 가능 |
EXISTS(서브쿼리) | 서브쿼리의 결과에 존재하는 값이 존재하는지(TRUE,FLASE) 여부를 확인하는 조건 *IN과 EXISTS비교 -IN은 서브쿼리 결과를 모두 수행하고,EXITST는 일치 결과가 있다면 더 이상 수행하지 않는다. -서브쿼리 데이터량이 많다면 성능상 EXITST가 좋다. |
5.SQL연산자와 부정 SQL 연산자
👉🏻SQL연산자
연산자 | 의미 | 예시 |
BETWEEN A AND B | A부터 B까지 | WHERE COL BETWEEN 1 AND 10 |
LIKE '비교 문자열' | 비교 문자열과 형태 일치하는지 | WHERE signup_date LIKE '2023%' 23년도 조회 WHERE user_name LIKE '김%' 김씨를 조회 % : 0개 이상의 문자를 의미 _ : 1개인 단일 문자를 의미 |
IN(LIST) | LIST값 중 하나와 일치 | WHERE 주소 IN('수원','서울') 수원,서울인 사람만 조회 |
IS NULL | NULL값을 조회 | WHERE 주소 IS NULL 주소가 NULL인 사람 조회 *NULL은 비교연산자로 조회할 수 없다. EX) 주소 = NULL ❌ |
👉🏻부정 SQL 연산자
연산자 | 의미 | 예시 |
NOT BETWEEN A AND B | A와 B사이에 있지 않은 값 (A,B값은 포함하지 않음) |
WHERE COL BETWEEN 1 AND 10 1~10사이의 값인 2-9를 제외한 값 |
NOT IN(LIST) | LIST중 일치하지 않는 값 | WHERE 주소 NOT IN('수원','서울') 주소가 수원,서울이 아닌 사람 조회 |
IS NOT NULL | NULL이 아닌 값을 조회 | WHERE 주소 IS NOT NULL 주소가 NULL이 아닌 사람을 조회 |
6.논리 연산자
연산자 | 의미 | 예시 |
AND | 모든 조건이 TRUE | WHERE 성적 > 90 AND 과목 = '수학' |
OR | 하나 이상의 조건이 TRUE | WHERE 주소 = '서울' OR 나이 < 34 |
NOT | TRUE면 FALSE를 FALSE면 TRUE를 반환 | NOT COL > 10 |
❗️논리 연산자의 처리 순서
NOT → AND → OR
예제 34회-기출복원
다음 데이터를 가진 테이블에서 SQL의 결과를 작성
EMP_ID | MGR_ID | CODE | SALARY |
1 | 2 | A | 100 |
2 | 5 | B | 300 |
3 | NULL | CODE | 150 |
4 | 1 | D | 400 |
5 | 7 | E | 500 |
SELECT COUNT(*)
FROM TEST
WHERE SALARY > 100
OR MGR_ID IS NULL
AND CODE = 'B';
답 : 3
7.집합 연산자
- 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회할 수 있다.
- 2개 이상의 질의 결과를 하나의 결과로 만들어준다.
*관계 대수
관계형 데이터베이스의 이론을 수립한 E.F.Codd박사의 논문에 언급되어있는 데이터를 검색하고 조작하는데 사용되는 연산자와 규칙의 집합이다.
관계 대수는 총 8개로 크게 순수 관계 연산자와 일반집합 연산자로 나뉜다.
일반 집합 연산자는 현재 집합연산자로 나타내며 다음 테이블과 같다.
관계 대수 | 현재 SQL | 설명 |
UNION | UNION UNION ALL |
합집합을 제공한다. UNION은 중복을 포함하여 출력한다. UNION ALL은 중복을 제거하고 출력한다. *둘의 출력이 같다면 속도,자원 효율화 측면에서 UNION ALL사용 권고 |
INTERSECTION | INTERSECT | 교집합을 제공한다. 중복을 제거하여 출력한다. |
DIFFERENCE | EXCEPT/MINUS | 차집합을 제공한다. 중복을 제거하고 출력한다. 대다수 벤더는 EXCEPT로, 오라클에서는 MINUS를 사용한다. |
PRODUCT | CROSS JOIN | 곱집합을 제공한다. JOIN조건이 없는 경우 생길 수 있는 모든 데이터의 조합 |