본문 바로가기
postgreSQL

[PostgreSQL] 연산자 활용하기

by 똘이토스 2023. 8. 2.

SQL에서 비교, 논리, 산술 연산자란?

 

SQL에서는 다양한 연산자를 사용하여 데이터를 조작하고 비교할 수 있습니다. 이러한 연산자는 크게 비교 연산자, 논리 연산자, 산술 연산자로 나눌 수 있습니다.

 

비교 연산자는 두 값을 비교하는 데 사용되며, 결과는 참 또는 거짓입니다. 주요 비교 연산자에는 =, <>, <, >, <=, >= 등이 있습니다.

논리 연산자는 논리적인 연산을 수행하는 데 사용되며, 결과는 참 또는 거짓입니다. 주요 논리 연산자에는 AND, OR, NOT 등이 있습니다.

산술 연산자는 수학적 연산을 수행하는 데 사용되며, 결과는 숫자입니다. 주요 산술 연산자에는 +, -, *, / 등이 있습니다.

 

AND 연산자

 

AND 연산자는 두 조건이 모두 참일 때 참을 반환하는 논리 연산자입니다. 만약 두 조건 중 하나라도 거짓이면, AND 연산자는 거짓을 반환합니다.

 

SELECT 
  * 
FROM 
  movies
WHERE
  movie_lang = 'English'
  AND age_certificate = '18';

 

OR 연산자

 

OR 연산자는 두 조건 중 하나라도 참일 때 참을 반환하는 논리 연산자입니다. 만약 두 조건이 모두 거짓이면, OR 연산자는 거짓을 반환합니다.

 

SELECT
  *
FROM
  movies
WHERE
  movie_lang = 'English'
  OR movie_lang = 'Japanese';

 

AND, OR 연산자를 함께 사용하기

 

AND 연산자는 OR 연산자보다 우선 순위가 높습니다. 따라서 AND와 OR를 함께 사용할 때는 AND 연산이 먼저 수행됩니다. 하지만 괄호를 사용하여 연산의 순서를 변경할 수 있습니다.

 

SELECT
  *
FROM
  movies
WHERE
  (movie_lang = 'English'
  OR movie_lang = 'Chinese')
  AND age_certificate = '12';

 

WHERE 절에서 열 별칭 사용 가능한가?

 

일반적으로 WHERE 절에서는 열 별칭을 사용할 수 없습니다. 이는 SQL이 WHERE 절을 SELECT 절보다 먼저 처리하기 때문입니다. 따라서 WHERE 절이 처리되는 시점에는 열 별칭이 아직 정의되지 않았습니다. 

 

-- 에러 발생
SELECT 
  employee_id AS id, first_name AS name 
FROM 
  employees 
WHERE 
  name LIKE 'J%';

 

WHERE, SELECT, ORDER BY 절의 실행 순서

 

SQL 문의 실행 순서는 다음과 같습니다

  1. FROM 절: 테이블을 선택합니다.
  2. WHERE 절: 행을 필터링합니다.
  3. GROUP BY 절: 행 그룹을 만듭니다.
  4. HAVING 절: 그룹을 필터링합니다.
  5. SELECT 절: 출력 열을 선택하고 계산합니다.
  6. ORDER BY 절: 결과를 정렬합니다.

따라서 WHERE 절은 SELECT 절과 ORDER BY 절보다 먼저 실행됩니다.

 

비교 연산자 사용하기

 

PostgreSQL에서 비교 연산자는 두 개의 피연산자를 비교하고 논리적인 값을 반환하는데 사용됩니다. 주로 WHERE, HAVING, JOIN 등의 SQL 문에서 사용됩니다. 다음은 PostgreSQL에서 사용되는 주요 비교 연산자입니다

 

연산자 설명
= 두 피연산자가 같은지 확인합니다.
<> 또는 != 두 피연산자가 다른지 확인합니다.
> 왼쪽 피연산자가 오른쪽 피연산자보다 큰지 확인합니다.
< 왼쪽 피연산자가 오른쪽 피연산자보다 작은지 확인합니다.
>= 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같은지 확인합니다.
<= 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같은지 확인합니다.

 

SELECT * FROM employees WHERE NOT (salary > 50000 AND age < 30);

 

LIMIT와 OFFSET 사용하기

 

LIMIT 절은 반환되는 행의 최대 수를 지정하는 데 사용됩니다. OFFSET 절은 반환되는 행의 시작점을 지정하는 데 사용됩니다. LIMIT와 OFFSET을 함께 사용하면 특정 수의 행을 건너뛴 후 일정 수의 행을 반환하는 페이징 쿼리를 작성할 수 있습니다

 

-- 반환되는 행의 수를 최대 5개로 제한하고
-- 첫 4개의 행을 건너뛰고 그 다음부터의 행을 반환합니다.

SELECT
  *
FROM
  movies
ORDER BY
  movie_id
LIMIT 
  5 
OFFSET 
  4;

 

FETCH 사용하기

 

FETCH 는 SQL 쿼리의 결과를 제한하는데 사용됩니다. 이는 LIMIT 절과 유사하게 작동합니다. FETCH FIRST n ROWS ONLY 구문을 사용하여 반환되는 행의 수를 제한할 수 있습니다.

 

SELECT
  *
FROM
  movies
FETCH FIRST 5 ROW ONLY;

 

IN, NOT IN 사용하기

IN 연산자는 특정 열의 값이 여러 가능한 값 중 하나에 해당하는지를 확인하는 데 사용됩니다. NOT IN 연산자는 특정 열의 값이 여러 가능한 값 중 어느 것에도 해당하지 않는지를 확인하는 데 사용됩니다

 

SELECT
  *
FROM
  movies
WHERE
  movie_lang IN ('English', 'Japanese');

 

BETWEEN, NOT BETWEEN 사용하기

BETWEEN 연산자는 특정 열의 값이 두 값 사이에 있는지를 확인하는 데 사용됩니다. NOT BETWEEN 연산자는 특정 열의 값이 두 값 사이에 있지 않은지를 확인하는 데 사용됩니다

 

SELECT
  *
FROM
  actors
WHERE
  date_of_birth BETWEEN '1991-01-01' AND '1995-12-31'
ORDER BY
  date_of_birth;

 

LIKE, ILIKE 사용하기

LIKE 연산자는 특정 패턴과 일치하는 문자열을 찾는 데 사용됩니다. ILIKE 연산자는 대소문자를 구분하지 않는 LIKE 연산자입니다.

 

LIKE 연산자는 두 가지 와일드카드를 사용할 수 있습니다: 

% : 0개 이상의 임의의 문자와 일치합니다. 

_ : 단 하나의 임의의 문자와 일치합니다.

 

SELECT
  *
FROM
  actors
WHERE
  first_name LIKE 'A%';

 

SELECT
  *
FROM
  actors
WHERE
  first_name LIKE '_____';

 

IS NULL, IS NOT NULL 사용하기

IS NULL 연산자는 열의 값이 NULL인지를 확인하는 데 사용됩니다. IS NOT NULL 연산자는 열의 값이 NULL이 아닌지를 확인하는 데 사용됩니다

 

SELECT
  *
FROM
  actors
WHERE
  date_of_birth IS NULL
  OR first_name IS NULL;

 

연결 기법

SQL에서는 여러 문자열을 연결하여 하나의 문자열을 만드는 데 사용할 수 있는 여러 가지 방법이 있습니다. 이에는 || 연산자, CONCAT 함수, CONCAT_WS 함수 등이 있습니다

 

|| 연산자를 사용한 연결

 

SELECT 
  first_name || ' ' || last_name AS full_name 
FROM
  employees;

 

CONCAT 함수를 사용한 연결

 

SELECT
  CONCAT(first_name, ' ', last_name) AS "Actor Name"
FROM
  actors
ORDER BY
  first_name;

 

CONCAT_WS 함수를 사용한 연결

 

SELECT
  CONCAT_WS(',', first_name, last_name, date_of_birth)
FROM
  actors
ORDER BY
  first_name;