하나 이상의 테이블에서 데이터를 검색해 유용한 정보로 변환할 때 SQL로 할 수 있는 가장 중요한 작업은 원하는 데이터를 찾거나 원하지 않는 데이터를 걸러 내는 필터링일 것이다. BETTER WAY 22 관계 대수와 이를 SQL로 구현하는 방법을 이해하자관계형 모델(관계, 튜플, 속성)로 수행할 수 있는 관계 대수 연산에는 선택(제한), 추출, 조인, 교집합, 카티전 곱, 합집합, 나누기, 차집합의 8가지가 있다. 1. 선택(제한)선택(제한)은 로우를 선택한 후 필터링해서 원하는 데이터 집합을 얻는 것이다. FROM 절에서 원하는 데이터 집합의 원천을 정의한 후 WHERE나 HAVING 절을 사용해 반환되는 로우를 걸러 낸다.2. 추출추출(Project)은 DBMS가 반환하는 컬럼과 표현식을 선택하는 연..
effective sql
이 장에서는 부적절하게 설계된 다른 소스에서 가져온 데이터로 작업을 할 때 손봐야 하는 부분을 다룬다. 외부 데이터의 제어권이 없으므로 데이터베이스 설계 내용을 변경할 수 없다. 직접 작성한 쿼리 일부를 변형해서 수행하는 방법과 객체를 생성하는 식으로 데이터 자체를 변형하는 방법을 알아보자. BETTER WAY 18 설계를 변경할 수 없을 때는 뷰로 데이터를 간소화하자뷰는 하나 이상의 테이블이나 다른 뷰에 SQL 쿼리를 미리 정의해 놓고는 테이블처럼 데이터를 볼 수 있는 객체다. 뷰를 사용해 역정규화에서 이슈 몇 가지를 개선할 수 있다. 뷰를 사용하는 이유를 정리하면 다음과 같다.특정 데이터 집중 : 뷰로 특정 작업에 사용하는 특정 데이터에 집중할 수 있다. 컬럼 이름 간소화 또는 명료화 : 원래 컬럼 ..
논리적인 데이터 모델의 설계가 좋다고 해서 효율적으로 SQL을 작성할 수 있는 것은 아니다. 물리적으로도 적절한 방식으로 설계를 구현해야 하며, 그렇지 않으면 SQL로 데이터에서 유의미한 정보를 효율적으로 추출하기 어렵다. 그 중 테이블에 적절한 인덱스를 만들었는지 여부는 SQL 쿼리가 잘 수행되는지 확인하는 핵심 요소 중 하나다.' BETTER WAY 10 인덱스를 만들 때는 널을 고려하자널은 다른 값, 심지어 또 다른 널과도 동등이나 비동등 연산자로 비교가 불가능하다. 널 값이 있는지 알아내려면 IS NULL 연산자를 사용해야 한다. 인덱스로 생성된 컬럼 값이 대부분 널이라면 항상 NULL이 아닌 값을 조회하지 않는 한 해당 인덱스는 많이 사용하지 않을 것이다. 컬럼에 있는 값을 좀 더 빠르게 검색하..
잘못 설계된 데이터 모델로는 효율적으로 SQL을 작성할 수 없다. 이 장에서는 올바른 관계형 모델을 설계하는 기본 내용을 담고 있다. 데이터베이스 설계가 여기 나온 규칙을 위반한다면 잘못된 점이 무엇인지 파악해서 수정해야 한다.BETTER WAY 1 모든 테이블에 기본키가 있는지 확인하자.관계형 모델을 따르려면 데이터베이스 시스템이 한 테이블에 있는 특정 로우와 나머지 로우를 구별할 수 있어야 한다.따라서 모든 테이블에는 컬럼 한 개 이상으로 구성된 기본키(Primary Key)가 있어야 한다. 기본키는 로우마다 유일해야 하며 널(Null) 값을 가질 수 없다. 테이블에 기본키가 없으면 반복적이고 일관성 없는 데이터가 쌓여 쿼리 수행 속도가 느리고, 부정확한 정보를 조회하는 등 모든 종류의 문제를 일으킬..