반응형
1. 개요
"SELECT 1 FROM table" 구문은 주어진 테이블의 각 행에 대해 숫자 1을 반환한다.
만약 테이블에 N개의 행이 있다면, 결과로 N개의 1이 반환된다.
ex) users라는 3개의 행을 가지는 데이터베이스 테이블이 있다고 가정해보자.
id | name | age |
1 | Alice | 30 |
2 | Bob | 25 |
3 | Carol | 28 |
이 테이블이 있을 때 "SELECT 1 FROM users" 구문을 실행하면 다음과 같은 결과가 반환된다.
1 |
1 |
1 |
1 |
2. 시사점
- SQL에서 1은 TRUE를 의미하므로, "SELECT 1 FROM ..." 형식의 구문은 논리식으로 사용될 수 있다.
3. 사용 예시 - EXISTS 조건
- 보통 이 구문은 WHERE 절의 (NOT) EXISTS 안에 있는 서브쿼리로 사용된다.
-- 예시 쿼리 1: 특정 사용자가 존재하는지 확인
SELECT
1
FROM
users
WHERE
id = 1;
-- 예시 쿼리 2: 데이터의 존재 유무에 따라 동작
SELECT
*
FROM
orders
WHERE
EXISTS (
SELECT
1
FROM
users
WHERE
users.id = orders.user_id
);
첫 번째 예시 쿼리에서, 특정 사용자의 존재 여부를 확인하기 위해 사용할 수 있다. id가 1인 사용자가 존재하면 1을 반환한다. 두 번째 예시 쿼리에서, orders 테이블의 각 주문이 users 테이블의 사용자에 의해서 이루어졌는지 확인하기 위해 사용할 수 있다. EXISTS 조건문은 orders 테이블의 각 행에 대해 users.id = orders.user_id 조건을 만족하는 행이 존재하면 TRUE를 반환한다. 이때 "SELECT 1 FROM users" 로 존재 여부만 확인하므로, 더 간단하게 쓸 수 있다.
4. 장점
- 특정 조건을 만족하는 데이터가 존재하는지 여부만 중요할 때, "SELECT * FROM ..." 대신 "SELECT 1 FROM ..."을 사용하면 더 간단하다.
- 불필요한 데이터를 모두 조회하지 않고 존재 여부만 판단할 수 있어 효율적이다.
반응형
'Dev > Database' 카테고리의 다른 글
[MSSQL] MSSQL 쿼리문에서 NOLOCK 사용해야하는 이유 (2) | 2024.10.02 |
---|---|
[Oracle] 데이터 중복처리 막는법, for update 사용 (0) | 2024.08.28 |
[Oracle/MSSQL] 인덱스 종류, 인덱스 종류별 속도, 인덱스 스캔 종류, 인덱스 스캔 종류별 속도 (0) | 2024.07.09 |
[Oracle/MSSQL] WHERE 조건절 순서에 따른 속도차이, 조건절 순서 속도, WHERE 절 속도차이 (0) | 2024.07.04 |
[DBeaver] dbeaver 여러줄 동시편집, dbeaver 전체 대문자, dbeaver 전체 소문자, 쿼리 대소문자 변경 단축키, 쿼리 여러줄 동시편집, mssql, oracle (1) | 2024.06.21 |