SQL에서 가장 많이 사용하고, 가장 복잡하며 가장 어려운 레코드 검색에 대해 알아보겠습니다.
기본 구조
레코드 검색에서의 기본 구조는 다음과 같습니다.
select 필드리스트
from 테이블리스트
where 조건
from 절 안에 테이블의 리스트가 들어가야 한다는 점을 주의해서 보시기 바랍니다. 추가적으로 이 select문의 출력값은 테이블입니다. 즉, from절 안에 또 다른 select문이 들어갈 수 있다는 점을 의미합니다. 지금은 이해가 안될수도 있습니다. 후에 계속 올리는 포스팅을 읽어보시다 보면 이해가 되실겁니다.
기본적인 레코드 검색 예시 코드를 한 번 보겠습니다. 예시는 학생들의 이름과 학번을 출력하는 코드입니다.
select name, dept_name
from department, student
where department.dept_id = student.dept_id;
우선, select 뒤에 출력하고자 하는 데이터가 어떤 것인지 명시합니다.
그 후, from절 뒤에 어느 테이블로부터 데이터를 가져올 것인지 알려주고
where절에 검색 조건을 입력해준다고 이해하시면 편합니다.같은 이름을 가진 필드를 사용할 경우, 어느 테이블에서 가져온 필드인지 혼동하지 않기 위해, 저렇게 테이블을 먼저 명시해준다는 특징이 있습니다.
중복 제거 검색
중복을 제거하고 검색하는 방식은 다음과 같습니다. 위에서 썻던 기본 select문 중간에 disctinct를 넣어주면 됩니다. 예를 들어, student 테이블에서 모든 학생들의 주소를 출력하는데 그 중 중복되는 레코드는 제외하고 검색을 해보도록 하겠습니다.
select distinct address
from student;
distnct 없는 문장과 비교했을 때, 실제로 중복되는 값인 서울이 하나만 출력되는 것을 볼 수 있습니다.
테이블 내 모든 필드 값 추출
테이블 내 모든 필드를 추출하기 위해선 select 뒤에 *를 넣어주면 간단하게 모든 값을 출력할 수 있습니다. 아마 SQL 공부를 진행하시면서 테이블에 데이터가 잘 입력되었나 보기 위해 가장 많이 사용하실 겁니다.
select * from student;
select 절 에 필드 이름 외 사용 가능한 것들
select절에는 필드 이름 외에 다른 것들도 올 수 있습니다. 바로, 산술식 혹은 상수입니다. 예를들어, 현재 테이블에는 부임 연도만 있는 professor 테이블에서 교수의 이름과, 현재까지의 재직 연수를 출력해보겠습니다.
select name, 2023-year_emp
from professor;
from절에 두 개 이상의 테이블을 포함하는 질의
select문을 사용하여 테이블 내 데이터를 찾다보면 두 테이블에 걸쳐 데이터를 찾아야 할 때가 있습니다. 이런 경우에 우리는 from절에 두 개 이상 테이블을 두고 사용하게 됩니다. 사용 예시는 다음과 같습니다.
컴퓨터 공학과 3학년 학생들의 학번을 검색하는 예시입니다.
select student.stu_id
from student, department
where student.dept_id = department.dept_id
and student.year = 3
and department.dept_name='컴퓨터공학과';
결과는 다음과 같습니다.
재명명 연산
여기서, 두 개 이상의 테이블을 from절에 표현하다보면 where절에서 혹은 여러 질의를 처리할 때 전체를 다 치기 귀찮아지게 됩니다. 그래서, 우리는 재명명 연산이라는 것을 사용하여 테이블 명에 별명을 붙여 사용이 가능합니다.
이 별명은 실제 테이블 이름 자체가 수정되진 않습니다. 그냥, 해당 select문이 처리되는 동안만 존재하는 별명입니다. 위 예시를 재명명 연산을 사용하면 다음과 같이 편하게 나타낼 수 있습니다.
select s.stu_id
from student s, department d
where s.dept_id = d.dept_id
and s.year = 3
and d.dept_name='컴퓨터공학과';
필드의 재명명
테이블 명 뿐만 아니라, 필드명도 재명명이 가능합니다. 보통 사용자들은 데이터가 어떻게 저장되어있는지 모르기 때문에, 일반 사용자들에게 데이터를 보여줄 때 많이 사용합니다. 사용법은 다음과 같습니다.
select name 성함, position 직위, 2023-year_emp 재직연수
from professor;
레코드의 순서 지정(order by)
order by는 검색결과를 정렬하여 출력하는 기능입니다. 예전에 우리는 레코드가 집합이기 때문에 데이터의 순서가 의미를 가지지 않는다는 말을 한 적이 있습니다. 그러나, 현실에서 데이터를 특정 순서대로 정렬해야 할 때가 있기 때문에 이러한 order by를 사용합니다. order by는 주로 select문 마지막에 들어갑니다.
select name, stu_id
from student
where year = 3 or year = 4
order by name, stu_id;
다음과 같이, 이름을 오름차순으로 정렬합니다. 만약, 동명이인이라면 학번의 오름차순으로 정렬해줍니다. order by는 따로 설정하지 않으면 오름차순으로 정렬됩니다.
만약, order by로 내림차순 정렬을 하고 싶다면 내림차순을 원하는필드 뒤에 desc 라는 키워드를 삽입해줍니다.
select name, stu_id
from student
where year = 3 or year = 4
order by name desc, stu_id;
'학교 수업 > DB시스템 구현' 카테고리의 다른 글
[DB시스템 구현] SQL 검색 ② (0) | 2023.07.08 |
---|---|
[DB 시스템 구현] 틀리기 쉬운 SQL문제 정리하기 (0) | 2023.07.04 |
[DB 시스템 구현] SQL ① (0) | 2023.07.02 |
[DB 시스템 구현] 오라클 구조 (0) | 2023.07.02 |
[DB 시스템 구현] 오라클 설치방법 (0) | 2023.07.02 |