Additional Operation: 두 판 사이의 차이

youngwiki
58번째 줄: 58번째 줄:
where building like '%Watson%';
where building like '%Watson%';
</syntaxhighlight>
</syntaxhighlight>
패턴에 %나 _과 같은 특수 문자 자체를 포함하고자 할 경우, SQL은 이스케이프 문자(escape character) 를 지정할 수 있도록 허용한다. 이스케이프 문자는 특수 문자 앞에 붙여, 해당 문자를 일반 문자로 취급하도록 한다. like 비교에서 이스케이프 문자를 지정하려면 escape 키워드를 사용한다. 예를 들어, 백슬래시(\)를 이스케이프 문자로 사용할 경우 다음과 같다:
패턴에 %나 _과 같은 특수 문자 자체를 포함하고자 할 경우, SQL은 '''이스케이프 문자(escape character)''' 를 지정할 수 있도록 허용한다. 이스케이프 문자는 특수 문자 앞에 붙여, 해당 문자를 일반 문자로 취급하도록 한다. like 비교에서 이스케이프 문자를 지정하려면 escape 키워드를 사용한다. 예를 들어, 백슬래시(\)를 이스케이프 문자로 사용할 경우 다음과 같다:
<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
like 'ab\%cd%' escape '\' --"ab%cd"로 시작하는 모든 문자열과 일치
like 'ab\%cd%' escape '\' --"ab%cd"로 시작하는 모든 문자열과 일치

2025년 4월 2일 (수) 08:42 판

상위 문서: SQL

개요

SQL은 그 기본적인 문법을 바탕으로 다양한 여러 연산들을 지원한다.

Rename 연산

SQL 내에서 사용되는 relation의 이름들과 속성(attribute)의 이름들은 from 절에 있는 relation으로부터 유도된다. 하지만 이러한 방식으로 relation과 속성의 이름들을 사용할 때에는 예기치 못한 문제나 불편함이 발생할 수 있다. 따라서 SQL은 relation과 속성(attribute)의 이름을 "as" 구문을 사용하여 이름을 바꾸는 것을 하용한다.

old_name as new_name

이때 as는 select 절과 from 절 양쪽에서 사용될 수 있다.

as 절은 relation의 이름을 바꾸는 데 특히 유용하다. relation의 이름을 바꾸는 한 가지 이유는 긴 릴레이션 이름을 더 짧고 질의의 다른 부분에서 사용하기 더 편한 이름으로 바꾸기 위함이다. 예를 들어, “대학에서 어떤 과목이든 가르친 적이 있는 모든 교수들의 이름과 그들이 가르친 과목의 ID를 구하라.”와 같은 질의는 아래와 같이 간단하게 나타낼 수 있다.

select T.name, S.course_id
from instructor as T, teaches as S
where T.ID = S.ID;

relation 이름을 바꾸는 또 다른 이유는 같은 relation 내의 튜플들을 서로 비교하고자 할 때이다. 이 경우, 하나의 relation과 자기 자신과의 데카르트 곱(Cartesian product) 을 수행해야 하므로, 두 튜플을 구분하기 위해 다른 이름을 사용해야 한다. 예를 들어, “급여가 생물학(Biology) 학과에 속한 어떤 교수보다 높은 교수들의 이름을 구하라.”와 같은 질의는 아래와 같이 나타낼 수 있다.

select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept_name = 'Biology';

이때 키워드 as는 사용하는 것이 선택적이며, 누락될 수도 있다. 이는 아래 예시가 잘 보여준다.

instructor T --instructor as T와 같은 뜻

String Operation

SQL에서는 문자열을 작은따옴표로 감싸서 지정한다. 예를 들어 'Computer'는 문자열을 의미한다. 문자열 내에 작은따옴표 문자가 포함되어야 하는 경우, 작은따옴표를 두 번 연속으로 써서 지정할 수 있다. 예를 들어 문자열 'Its right'는 다음과 같이 표현한다:

'It''s right'


또한 SQL은 SQL은 문자열에 대해 다양한 함수를 허용한다. 예를 들어 다음과 같은 작업들이 가능하다:

  • 문자열 연결(concatenation): ∥ 연산자를 사용
  • 부분 문자열 추출(substring)
  • 문자열 길이 측정
  • 문자열을 대문자로 변환: upper(string)
  • 소문자로 변환: lower(string)
  • 문자열 끝의 공백 제거: trim(string)

Pattern matching

SQL에서는 like 연산자를 사용하여 문자열에서 패턴 매칭(pattern matching) 을 수행할 수 있다. 이때 패턴매칭은 대소문자를 구분한다. 패턴은 두 가지 특수 문자를 이용해 정의된다:

  • 퍼센트 기호(%): 어떤 길이의 문자열이든 부분 문자열로 일치함.
  • 언더스코어(_): 아무 문자 하나와 일치함.

패턴 매칭의 예시는 다음과 같다:

  • 'Intro%': “Intro”로 시작하는 문자열과 일치
  • '%Comp%': “Comp”라는 부분 문자열이 포함된 문자열과 일치
  • '_ _ _': 정확히 세 글자인 문자열과 일치 (_가 3개)
  • '_ _ _%': 최소 세 글자 이상인 문자열과 일치

SQL에서는 like 비교 연산자를 사용하여 패턴 매칭을 사용한다. 예를 들어, “건물 이름에 ‘Watson’이 포함된 모든 학과의 이름을 찾아라.”와 같은 query(질의)는 아래와 같이 작성된다.

select dept_name
from department
where building like '%Watson%';

패턴에 %나 _과 같은 특수 문자 자체를 포함하고자 할 경우, SQL은 이스케이프 문자(escape character) 를 지정할 수 있도록 허용한다. 이스케이프 문자는 특수 문자 앞에 붙여, 해당 문자를 일반 문자로 취급하도록 한다. like 비교에서 이스케이프 문자를 지정하려면 escape 키워드를 사용한다. 예를 들어, 백슬래시(\)를 이스케이프 문자로 사용할 경우 다음과 같다:

like 'ab\%cd%' escape '\' --"ab%cd"로 시작하는 모든 문자열과 일치
like 'ab\\cd%' escape '\' --"ab\cd"로 시작하는 모든 문자열과 일치

또한 SQL에서는 like 대신 not like 연산자를 사용하여 일치하지 않는 문자열을 찾을 수도 있다.

Attribute Specification in the Select Clause

select 절에서는 별표 기호( * ) 를 사용하여 "모든 속성" 을 의미할 수 있다.

select instructor.*
from instructor, teaches
where instructor.ID = teaches.ID;

위 질의는 instructor.*는 instructor 릴레이션의 모든 속성을 선택한다는 의미이다. 또한 select *과 같은 표현은, from 절에서 추출한 모든 테이블에서 모든 속성을 선택한다는 의미이다.

Ordering the Display of Tuples

SQL은 사용자가 릴레이션에서 튜플이 출력되는 순서를 어느 정도 제어할 수 있도록 한다. order by 절은 질의 결과에 포함된 튜플들이 정렬된 순서로 나타나게 만든다.

각주