전공/데이터베이스

[데이터베이스] #4 SQL II (SELECT, NULL 값)

Campus Coder 2024. 4. 8. 15:31
728x90
반응형

목차

  1.  Select
    1. select 절
    2. where 절
    3. from 절
    4. 실행 모델
    5. 조인
    6. 자연 조인
    7. 재명명 연산
    8. 스트링 연산
    9. order by 집합 연산
  2. Null 값
  3. +) 연습문제

1. Select

주어진 조건에 적합한 데이터를 검색하여 반환

6개의 절을 가질 수 있음

select 절과 from 절은 생략 불가능

나머지 절들은 반드시 위의 순서를 지켜야 함

  • select A1, A2, …, An
  • from R1, R2, …, Rn
  • where P
  • group by <grouping attributes>
  • having <conditions>
  • order by <ordering attributes>

select 문장의 결과는 관계이며 select 문장은 절의 구성요소로 나올 수 있음 (중첩 가능)

select 절

관계 대수의 투영 연산(Π)

select 절은 질의 결과에서 사용자가 보고 싶은 속성 리스트를 가짐

select 절에서는 DB 시스템이 제공하는 각종 함수 사용 가능 (sum, log 등)

    • 기호: 모든 속성을 의미
  • distinct 키워드: select 문장의 결과 테이블에 터플 중복을 허용하지 않음
  • all 키워드: 중복 결과 허용 (기본 값)
Select distinct deptName
from professor;

where 절

관계 대수의 선택 조건(σ)

결과 터플이 만족하여야 하는 조건을 명시

논리연산자 사용 가능

  • and
  • or
  • not
Select name
from professor
where deptName = 'CS' and salary > 8000;

where 절 연산자 between

Select name
from professor
where salary between 5000 and 6000;

from 절

관계 대수의 카티시안곱(×)

질의에 관련이 있는 테이블을 나열

Select *
from professor, teaches;

실행 모델

select 문장은 모두 6개의 절로 구성될 수 있음

  1. from 절에 명시된 각 테이블에서 한 개씩의 터플을 추출
  2. 이를 where 절에 명시되어 있는 조건에 적용
  3. 조건이 참인 터플을 group by 절로 보냄
  4. 같은 작업을 from 절에 명시된 테이블의 모든 터플에 적용
  5. group by 절에 명시된 속성을 이용하여 서브 그룹으로 나눔
  6. 각 서브 그룹에 대하여 having 조건을 적용
  7. 조건이 참인 서브 그룹에 대하여 order by 절을 적용

요약하자면 from → where → group by → having → order by

조인

SQL 문장에서 조인은 where 절에서 명시

Select name, cID
from professor, teaches
where professor.pID=teaches.pID

professor.pID와 teaches.pID 간 동등 조인

<, > 등을 사용하면 세타 조인도 가능함

자연 조인

Select *
from professor natural join teaches;
Select *
from professor, teaches
where professor.pID=teaches.pID;

두 문장은 같은 터플이 조인되지만

  • 위의 문장은 professor.pID와 teaches.pID가 동일하므로 하나의 속성으로 나오지만 (자연 조인)
  • 아래 문장은 professor.pID와 teaches.pID 속성이 각각 나온다 (카디티시안곱)

<aside> 📌 테이블에 대하여 자연 조인을 적용할 때에는 동일한 이름을 가진 속성으로 인하여 원하지 않는 조인 연산이 일어나지 않도록 주의하여야 함

</aside>

Select name, title
from (professor natural join teaches) join course using(cID);

using을 사용해 cID라는 속성에 대해서만 조인 속성으로 적용

재명명 연산

as 키워드 사용하여 재명명

as 키워드 생략 가능

Select sID, name myName, deptName
from student;
Select sID, name, myName, deptName
from student;

위의 문장은 name as myName으로 재명명한 것

아래의 문장은 myName이 student 테이블에 없는 속성이므로 잘못된 문장

Select distinct T.name
from professor as T, professor as S
where T.salary > S.salary and S.deptName = 'CS';

재명명 연산으로 professor 테이블을 두 개 사용하는 것과 같은 효과를 낼 수 있음

스트링 연산

like 연산자는 패턴을 활용하여 스트링에 대한 비교 연산을 제공

  • %: 길이에 무관한 임의 스트링
  • _: 임의의 한 문자
  • \%: %를 문자 ‘%’로 인식하도록 함

데이터베이스 시스템은 다양한 형태의 스트링 연산을 제공

  • 합성
  • 대소문자 변환
  • 스크링 길이
  • 일부 스트링 추출 등

order by

터플 정렬 연산

다른 테이블이 생성되는 것은 아님

기본 값은 오름차순 (알파벳 순서)

desc 키워드를 추가하여 내림차순 변경

Select distinct name
from professor
order by deptName desc, name;
  • deptName 값 기준으로 내림차순 1차 정렬
  • 동일한 deptName 값에서는 name 속성으로 오름차순 정렬

집합 연산

  • 합집합: 두 입력 테이블을 더함 (중복 무관)
  • 교집합: 두 입력 테이블에서 적게 나오는 횟수만큼 결과 터플이 나옴
  • 차집합
(select cID from teaches where semester = 'Fall' and year = 2009)
union
(select cID from teaches where semester = 'Fall' and year = 2010);
(select cID from teaches where semester = 'Fall' and year = 2009)
intersect
(select cID from teaches where semester = 'Fall' and year = 2010);
(select cID from teaches where semester = 'Fall' and year = 2009)
union
(select cID from teaches where semester = 'Fall' and year = 2010);

 


3. Null 값

터플의 속성 값으로 값이 존재하지 않는 null 값을 가질 수 있음

null ≠ “”

null = null + 5

null 값이 속한 비교 연산자의 결과는 → unknown

unknown를 포함한 AND, OR, NOR의 결과는 다음과 같음

  • OR
    • unknown or true = true
    • unknown or false = unknown
    • unknown or unknown = unknown
  • AND
    • true or unknown = unknown
    • false and unknown = false
    • unknown and unknown = unknown
  • NOT
    • not unknown = unknown

where 절 결과가 unknown일 경우 false와 같이 결과가 반환되지 않음

+) 연습문제

기호 모음: Π σ ⋈ ρ ×

 

728x90
반응형