본문 바로가기
[ CS 전공 ]

[ DB ] 6. SQL (1) : rename, string, ordering operation | MySQL

by 불주먹고양이 2022. 4. 27.

1. Rename operation

: relation 이름과 attribute 이름을 rename 하는 operation

 

(1) name이 어떤 이름을 말하고 있는지 애매하므로 instructor_name으로 명확하게 나타낸다.

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

 

(2) +, -, *, % 연산 후 그 연산이 의미하는 바로 이름을 대체한다.

- 연봉을 12로 나누어서 월급을 출력하는데, 이름을 monthly_salary로 바꾼다.

select name, salary/12 as monthly_salary
from instructor;

 

(3) 교수가 가르친 강의를 모두 출력하기

- relation 이름이 길 때, sql문을 간단하게 만들기 위해서 rename 하기도 한다.

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

 

(4) 동일한 relation을 비교할 때 사용한다.

- 적어도 한 명의 Comp.Sci. 학과 교수보다 봉급을 더 많이 받는 모든 교수를 출력하기.

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

 

(5) Self Join Example

- emp-super relation

 

- 'Bob'의 사수 구하기

select supervisor
from emp-super
where person = 'Bob';

 

- 'Bob'의 사수의 사수 구하기

select B.supervisor
from emp-super as A, emp-super as B
where A.person = 'Bob' and A.supervisor = B.person

A가 Bob을 의미하고, A의 사수가 B이다. 따라서 B.supervisor를 통해서 B의 사수를 구할 수 있다.

 

 

 

2. String operation

: 문자열과 관련된 operation

 

(1) % : substring

- 'Intro%' : Intro로 시작하는 모든 string

- '%Comp%' : Comp가 들어가는 모든 string

 

ex. 교수의 이름 중에서 'dar'이 포함된 모든 이름을 출력하시오.

select name
from instructor
where name like '%dar%';

 

 

(2) _ : char

- '_ _ _' : 세개의 char로 구성된 string

- '_ _ _ %' : 세 글자 이상의 string

 

ex. 교수의 이름 중에서 5글자 이상인 모든 이름을 출력하시오.

select name
from instructor
where name like '_ _ _ _ _%'

 

 

 

3. Ordering the display of tuples

- 오름차순 정렬이 default

 

- 오름차순 정렬 : asc

- 내림차순 정렬 : desc

 

(1) 단일 조건

- 해당하는 attribute를 ordering 한다.

 

ex. 교수의 이름을 알파벳 순서대로 정렬하시오.

select distinct name
from instructor
order by name;

 

ex. 교수의 이름을 내림차순 정렬하시오.

select distinct name
from instructor
order by name desc;

 

(2) 복수 조건

- 앞에 위치한 attribute 기준으로 먼저 정렬한 후, 중복되는 값에 대해서 뒤에 오는 attribute의 기준을 적용한다.

 

ex. 교수의 월급을 내림차순 정렬하고, 중복되는 값에 대해서 이름을 오름차순 정렬하시오.

select name, salary
from instructor
order by salary desc, name asc;