SELECT 개요
- 관계 데이터베이스에서 정보를 검색하는 SQL 문
- 관계 대수의 실렉션과 의미가 완전히 다름
- 관계 대수의 실렉션, 프로젝션, 조인, 카티션 곱 등을 결합한 것
- 관계 데이터베이스에서 가장 자주 사용됨
SELECT문
SELECT문 형식
- SELECT절과 FROM절만 필수적인 절이고 나머지는 선택
- 순서는 변경 불가
- SQL문은 대문자와 소문자 구분하지 않음
- '[]'은 '선택사항', '|' 는 '또는'을 의미
SELECT [DISTINCT] 속성
SELECT EMPNAME, SALARY FROM EMPLOYEE;
- 질의 결과에서 자동적으로 중복된 튜플을 제거하지 않음
- 'DISTINCT'를 명시하면 중복 값을 제거함
FROM 릴레이션
- 질의에서 필요로 하는 릴레이션들의 리스트를 열거
- SELECT에서 열거한 속성을 포함하는 릴레이션 열거
- WHERE절의 프레디키트에 사용된 속성을 포함하는 릴레이션 열거
WHERE
- 관계 대수의 실렉선 연산의 프레디키트(조건식)
- FROM절에 열거한 릴레이션에 속하는 속성들만 사용
- WHERE절의 조건은 결과 릴레이션의 튜플들이 만족시켜야 하는 조건
- WHERE절의 프레디키트는 다음을 포함
- 비교 연산자 : =, <>, <, <=, >, >=
- 부울 연산자 : AND, ON, NOT
- 집합 연산자: IN, NOT IN, ANY, ALL
중첩질의
다른 질의의 WHERE절에 포함된 SELECT 문
- GROUP BY : GROUP BY로 명시된 속성에 동일한 값을 갖는 튜플들을 한 그룹으로 만듦
- HAVING : GROUP BY로 생성된 그룹들이 만족해야하는 조건을 명시
- ORDER BY : 결과 튜플들의 정렬 순서를 지정
별칭(ALIAS)
- 서로 다른 릴레이션에 동일한 이름을 가진 속성이 속해 있을 때 속성 이름을 구분하는 방법
- 속성 앞에 릴레이션의 명칭을 명시 EX) EMPLOYEE.DNO
- 튜플 변수 사용(별칭이라고 함)
- 질의 내에서 릴레이션 이름 대신 별칭을 사용
SELECT E.EMPNAME, D.DEPTNAME
FROM EMPLOYEE AS E, DEPARTMENT AS D
WHERE E.DNO = D.DEPTNO;
테이블에서 속성 검색
테이블의 모든 속성이나 일부 속성들을 검색
모든 속성 검색
SELECT * FROM DEPARTMENT;
일부 속성을 검색
SELECT DEPTNO, DEPTNAME
FROM DEPARTMENT;
중복 값들을 제외한 검색(DISTINCT)
중복된 행을 제거 후 결과 출력
# DISTINCT 사용하지 않았을 때
SELECT TITLE FROM EMPLOYEE;
# DISTINCT 사용 했을 때
SELECT DISTINCT TITLE FROM EMPLOYEE;
열 이름 변경하여 표시(AS)
결과 릴레이션에서 속성 이름을 변경하여 표시
SELECT DEPTNO AS 부서번호, DEPTNAME AS 부서이름 FROM DEPARTMENT
SELECT SUM(SALARY) AS 총급여, AVG(SALARY) AS 평균급여
FROM EMPLOYEE;
조건 부여 및 여러 연산자의 사용
조건 부여 검색
- WHERE절의 조건을 만족하는 튜플들만 검색
- 숫자 이외의 상수는 단일 인용기호 (')로 에워싸야 함
SELECT * FROM DEPARTMENT WHERE DNO = 2;
SELECT * FROM EMPLOYEE
WHERE SALARY >= 3000000;
문자열의 비교
LIKE
- LIKE 비교연산자는 문자열의 일부에 대하여 비교 조건을 명시
- LIKE 연산자는 도메인이 문자열 타입인 속성에 사용
SELECT EMPNAME, TITLE, DNO
FROM EMPLOYEE
WHERE EMPNAME LIKE '이%';
LIKE 부정은 NOT LIKE
SELECT EMPNAME, TITLE, DNO
FROM EMPLOYEE
WHERE EMPNAME NOT LIKE '이%';
패턴 매칭에 사용되는 기호들
기 호 | 사용 의미 | 보 기 |
_ | 하나의 문자를 대치 | 한_ (한종, 한1, 한2...) |
% | 한 문자도 없거나 하나 이상 모든 문자 | 한% (한종진, 한, 한123,...) |
[ ] | []내에 있는 문자만 | 한[AB] (한A, 한B) |
[ ^ ] | [ ] 내에 있는 문자 제외 | L[^O]VE (LAVE, LIVE) |
SELECT DEPTNO, DEPTNAME FROM DEPARTMENT
WHERE DEPTNAME LIKE '기_';
사용 예시들
SELECT EMPNAME, TITLE
FROM EMPLOYEE
WHERE TITLE LIKE '[과부]%';
SELECT EMPNAME, TITLE
FROM EMPLOYEE
WHERE TITLE LIKE '[^과부]%';
다수의 검색 조건
WHERE절에 여러 조건들을 논리 연산자로 결합해 표시
연산자의 우선 순위
- 비교 연산자
- NOT
- AND
- OR
잘못 사용된 예
SELECT FLOOR
FROM DEPARTMENT
WHERE DEPTNAME = '영업' AND DEPTNAME = '개발';
부울 연산자 사용
# 직급이 과장이면서 1번 부서에 근무하는 사원들의 이름과 급여를 검색
SELECT EMPNAME, SALARY
FROM EMPLOYEE
WHERE TITLE = '과장' AND DNO = 1;
비교 연산자 사용
SELECT * FROM EMPLOYEE WHERE SALARY > 2500000
비교 연산자와 논리 연산자 사용
SELECT * FROM EMPLOYEE
WHERE TITLE = '과장' AND SALARY > 2500000
부정 검색 조건, 사용자가 원하지 않는 튜플 제외
# 직급이 과장이면서 1번 부서에 근무하지 않는 사원들의 이름과 급여를 검색
SELECT EMPNAME, SALARY
FROM EMPLOYEE
WHERE TITLE = '과장' AND DNO <> 1;
범위를 사용한 검색
# 급여가 3000000원 이상이고 4500000원 이하인 사원들의 이름, 직급, 급여를 검색
SELECT EMPNAME, TITLE, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 3000000 AND 4500000;
SELECT EMPNAME, TITLE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3000000 AND SALARY <= 4500000;
리스트를 사용한 검색
집합연산자 IN은 리스트내의 값과 비교
# 1번 부서나 3번 부서에 소속된 사원들의 모든 정보를 검색
SELECT *
FROM EMPLOYEE
WHERE DNO IN (1,3);
IN 연산자의 부정 NOT IN
# 직급이 과장, 부장이 아닌 모든 사원 정보 검색
SELECT *
FROM EMPLOYEE
WHERE TITLE NOT IN ('과장', '부장');
SELECT절에서 산술 연산자(+, -, *, /) 사용
- SELECT에 산술 연산자를 사용 수식을 표현
- 실제 테이블 튜플이 변경되지는 않음
# 직급이 과장인 사원들의 이름과 현재 급여, 10% 인상된 급여를 검색
SELECT EMPNAME, SALARY, SALARY * 1.1 AS NEWSALARY
FROM EMPLOYEE
WHERE TITLE = '과장';
NULL 값의 검색
- NULL 값과 다른 값을 +, -등을 사용하여 연산하면 결과는 NULL이 됨
- COUNT(*)를 제외한 집단 함수들은 NULL 값을 무시함
- 특정 속성에 들어 있는 값이 NULL인가 비교하기 위해서 'DNO=NULL'를 사용해선 안됨
# 금지
SELECT EMPNO, EMPNAME
FROM EMPLOYEE
WHERE DNO = NULL;
NULL값의 비교 연산자는 'IS NULL'
SELECT EMPNO, EMPNAME
FROM EMPLOYEE
WHERE DNO IS NULL;
SALARY가 NULL인 튜플은 검색되지 않음
SELECT EMPNAME, SALARY
FROM EMPLOYEE
WHERE SALARY < 2000000 OR SALARY >= 2000000;
SALARY가 NULL인 튜플 검색하려면
SELECT EMPNAME, SALARY
FROM EMPLOYEE
WHERE SALARY < 2000000 OR SALARY >= 2000000 OR SALARY IS NULL;
NULL 값의 검색
반응형
'23년 이전 글 > 데이터베이스' 카테고리의 다른 글
SELECT 2 (0) | 2022.08.15 |
---|---|
SQL 개요와 데이터 정의어 (0) | 2022.08.06 |
Microsoft SQL Server, SSMS 설치 및 기본설정 (0) | 2022.08.04 |
관계 대수 확장, 해석, 관계 연산 정리 (0) | 2022.07.27 |
관계 연산자, 조인 (0) | 2022.07.27 |