중요 키워드 : SQL 작성하기, 관계대수, 관계해석, 스키마의 종류, 튜플, 애트리뷰트, 차수, 카디널리티, CASCADE
스키마는 외부, 개념, 내부로 나뉜다.
외부는 사용자나 개발자의 관점에서 필요로하는 데이터베이스의 논리적 구조
개념은 데이터베이스의 전체적인 논리적 구조
내부는 물리적 저장 장치의 관점에서 보는 데이터베이스 구조.
테이블 관련 용어
튜플 : 테이블에서 하나의 행을 말한다.
애트리뷰트 : 테이블 내의 열을 의미한다.
카디널리티 : 튜플의 갯수
차수 : 애트리뷰트의 갯수
릴레이션 인스턴스 : 어느 한 시점에 릴레이션의 내용, 저장된 데이터 전체를 의미한다.
기본 SQL DML
select, update, insert, delete문법을 말한다.
기본 형태 select 속성명 from 테이블
where절을 이용해 특정 조건에 해당되는 튜플을 뽑아낼 수 있다.
select * from 학생 where 학년 = 1;
where절 심화:
between A and B 값이A와 B 사이에 있는 것들을 조회한다.
in (A, B, C) 괄호안에 명시되어있는 값중 일치하는 것을 조회한다.
where name like '홍%'; 이름이 홍으로 시작하는 것을 조회한다.
in null 널인 값을 갖는 튜플을 조회한다.
group by 값을 그룹으로 나누고싶을 경우
예를 들어 상품 테이블이 있고 각 상품에는 카테고리 번호가 있다.
group by caterogry_id와 같이 작성하면된다.
group by로 묶을 때 조건에 맞는 것들만 묶고싶을경우
group by 직책 having 급여합계 >= 5000;
order by는 조회 결과로 반환된 튜플을 정렬하는 문법이다.
select절의 맨 마지막에 order by desc;와 같이 사용한다.
order by를 생략하면 기본적으로 asc가 적용된다. asc는 오름차순으로 1,2,3...이 되고
desc는 내림차순으로 ...3,2,1이 된다.
조인
두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법이다.
기본적으로 내부조인이 적용되고 다른 조인을 사용할 경우 left outer join, cross join등을 명시해서 사용한다.
select a.책번호, a.책명, b.책번호, b.가격 from 도서 a left join 도서가격 b on a.책번호 = b.책번호;
기준 테이블은 from 바로 다음에 나오는 테이블이다.
left join은 기본적으로 왼쪽의 모든 튜플, 오른쪽 테이블에서 일치하는 튜플을 반환한다.
만약 왼쪽 테이블에는 있는데 오른쪽 테이블에는 없는 데이터라면 null이 들어간다.
마찬가지로 right join은 오른쪽 테이블의 모든 튜플과 왼쪽 테이블에서 일치하는 튜플들을 반환한다.
full join은 왼쪽 테이블과 오른쪽 테이블의 모든 데이터를 출력한다.
예를 들어 왼쪽 테이블이 3개의 튜플을 가지고 오른쪽 테이블이 5개의 튜플을 가진다면 조회된 결과에서
왼쪽 테이블의 2개의 행에는 Null이 들어가게된다.
cross join은 기출에도 한 번 나왔던 것으로 기억한다.
이는 카티션 프로덕션과 같은 개념으로 왼쪽 테이블에 3개의 튜플이 있고 오른쪽 튜플에 5개의 튜플이 있다면
결과는 총 3*5개의 튜플이 나온다.
예를 들어 왼쪽 테이블에서 책번호 1,2,3이 있고 왼쪽에는 1,2,3,4,5가 있을 경우
왼쪽 오른쪽
1 1
1 2
1 3
...
과 같은 식으로 결과가 리턴된다.
self join
하나의 테이블을 다른 별칭으로 설정한뒤 조인하는 방식이다.
기출문제:
집합 연산자
union 중복행이 제거된 결과 -> 조건에 맞는 결과를 각각 구한 뒤 중복을 제거한 뒤 리턴한다.
union all 중복행이 제거되지 않은 결과 중복을 제거하지 않고 리턴한다.
intersect 교집합
minus 차집합
update문
기본 문법
update 테이블 set 속성명 = 데이터 where 조건
(기출)
delete from 테이블 where 조건
* select count(*) 와 selce count(속성명)의 차이는 *은 널인 것도 카운트하고 속성명은 널인 것은 카운트하지 않는다.
distinct는 중복된 값은 제외한다.
select distinct count(부서코드) from 직원;
10, 20, 30
delete from 부서 where 부서코드 = '20';
select count(distinct 직원코드) from 직원;
DDL
alter table 테이블명 add 컬럼명 데이터타입(기출)
alter table 테이블명 modify 컬럼명 데이터타입
alter table 데이블명 drop column 컬럼명