전체 글
-
[SQLite] 인덱스(INDEX)Software/SQLite 2018. 3. 19. 00:25
인덱스(INDEX)는 우리가 책에서 볼 수 있는 색인을 생각하면 쉽게 이해할 수 있다. 우리는 책의 색인을 통해서 우리가 찾고자 하는 키워드가 어느 페이지에 있는 지 쉽게 찾을 수 있다. SQLite에서의 인덱스 또한 이 색인과 동일한 기능과 역할을 한다. 인덱스를 정의하면 마치 책의 색인과 같은 자료구조 형태로 해당 열을 정렬해서 관리할 수 있다. 그렇기에 인덱스가 정의된 경우 단순 검색보다 더 빠른 검색 결과를 얻을 수 있다. 다만 인덱스를 쓰고 변경하는 데 추가적인 시간이나 공간이 필요하다는 단점이 존재한다. 인덱스 사용의 장/단점 인덱스 사용의 장점 검색 - 일치 검색('='), 범위 검색 ('')의 성능 향상 필터링/정렬 연산의 성능이 향상 인덱스 사용의 단점 레코드 삽입/삭제/변경 시 인덱스를..
-
[SQLite] 외부 조인 (OUTER JOIN)Software/SQLite 2018. 1. 20. 16:59
이전까지의 조인 연산이 종속 테이블의 참조키가 상위 테이블의 기본키를 참조하는 형태이었기에 만약 종속 테이블의 참조키가 NULL인 경우에는 조건 절의 결과 또한 NULL이 되어 해당 결과는 조회되지 않았다. 그러나 외부 조인의 경우는 두 테이블간의 지정된 연결 정보가 없는 데이터도 모두 조회가 가능하다. 즉 만약 정보가 없는 데이터를 포함해서 모든 레코드를 결과로 조회하고 싶은 경우에는 외부 조인을 사용하면 된다. 사용 방법은 FROM 절에서 OUTER JOIN을 추가하면 된다. 이 때 왼쪽 외부 조인(LEFT OUTER JOIN)과 오른쪽 외부 조인(RIGHT OUTHER JOIN), 완전 외부 조인(FULL OUTER JOIN)이 있는데 차이는 아래와 같다. 왼쪽 외부 조인(LEFT OUTER JOI..
-
[SQLite] 자연 조인(NATURAL JOIN)Software/SQLite 2018. 1. 20. 16:56
자연 조인은 내부 조인의 한 일종이다. 내부 조인의 경우 명시적으로 조인 조건을 작성을 해주었지만 자연 조인의 경우는 별도의 조인 조건 없이 테이블이 가지고 있는 공통 컬럼 이름을 매개체로 연결된다. 즉 조인 조건 (WHERE, ON 절)은 불필요하며 대신 FROM 절에서 두 테이블 이름 사이에 NATURAL JOIN 키워드를 추가하면 된다. 그리고 자연 조인의 경우 동일 컬럼 이름을 매개체로 연결되어 있기에 조회 필드에서 와일드 카드(*) 사용 시 중복된 컬럼은 한 번만 조회된다. 아마 다음 예제를 보면 쉽게 이해할 수 있을 것이다. sqlite> SELECT * FROM cars NATURAL JOIN carBrand; car_id|brand_id|name|price|brandName 1|1|Sona..
-
[SQLite] 자체 조인 (SELF JOIN)Software/SQLite 2018. 1. 14. 18:05
자체 조인(SELF JOIN)이란 동일한 테이블을 연결해서 조회하는 방법을 말한다. 쉽게 말하면 이전에 설명한 중첩 질의를 자체 조인을 사용해서 작성가능 하다. 예를 들어 cars 테이블에서 "Sonata"라는 name의 price와 같은 값을 가지는 데이터를 조회한다고 한다면 우리는 아래와 같이 먼저 name 값이 "Sonata"인 데이터의 price값을 조회한 후 조회된 price 값과 동일한 가격의 데이터를 조회해야 한다. sqlite> SELECT brand_id, name, price ...> FROM cars ...> WHERE price in (SELECT price from cars WHERE name = "Sonata"); brand_id|name|price 1|Sonata|1500000..
-
[SQLite] 내부 조인(Inner Join)Software/SQLite 2018. 1. 13. 20:34
이번에 알아 볼 내용은 조인 연산이다. 테이블 조인 연산은 말 그대로 2개 이상의 테이블을 하나로 연결해서 조회하는 방법으로 이를 통해 각 테이블에서 필요한 컬럼들을 가져와 하나의 결과셋을 얻을 수 있다. 이 때 어떻게 테이블을 연결시켜 주느냐에 따라 조인 연산의 종류가 달라지는데 주로 사용되는 조인 연산은 아래와 같다. 내부 조인(Inner Join), 자연 조인 (Natural Join), 외부 조인 (Outer Join), 자체 조인 (Self Join), 크로스 조인 (Cross Join) 그럼 지금 부터 예제를 통해 각 조인 연산에 대해서 알아보도록 하자. 내부 조인 (Inner Join) 내부 조인은 두 테이블을 연결하는 특정 조건을 만족하는 결과만 반화는 조인을 일컫는다. 내부 조인의 형식은..
-
[SQLite] 중첩 질의 (Nested query)Software/SQLite 2017. 11. 27. 00:18
데이터 중복성과 종속성을 최소화 하기 위해 데이터를 여러 테이블에에 분산 저장하는 것은 관계형 데이터베이스 설계에 있어 매우 중요한 부분이다. 그러나 분산된 데이터를 조회하기 위해 여러 테이블에 Select문을 수행해야 하는 단점도 발생하게 된다. 이러한 단점을 극복하기 위한 방법으로 "중첩 질의" 혹은 "조인 연산"이 있다. 그 중 중첩 질의는(Nested query)는 SQL 문 안에 또 다른 SQL 문을 포함하고 있는 구조이다. 조건절의 중첩 질의 먼저 carBrand 테이블에서 brandName이 "Kia"인 레코드의 brand_id를 조회해 보자 sqlite> SELECT brand_id FROM carBrand WHERE brandName='Kia'; brand_id2 그리고 cars 테이블에..
-
[SQLite] 외래키 (Foreign Key)Software/SQLite 2017. 10. 15. 23:41
들어가기 전 외래키 : 테이블의 한 필드가 다른 테이블의 기본키 필드를 참조 할 때 이를 외래키 (Foreign Key)라고 한다. 외래키를 통해 우리는 두 테이블을 연결하고 관계성을 가지게 할 수 있다. 외래키라는 테이블 간의 연결 고리는 여러 테이블에 정보를 저장하고 관리하게 할 수 있도록 함으로써 중복된 데이터를 없애고 확장성을 가지게 해준다. 종속 테이블 : 외래키를 포함하고 있는 테이블 상위 테이블 : 종속 테이블에서 참조하는 기본키를 가지고 있는 테이블 외래키는 상위 테이블의 기본키 컬럼과 이름이 달라도 무관 외래키 설정 외래키 설정은 테이블 생성 시 가능하며 기본적인 구문은 다음과 같다. CONSTRAINT [제약조건 키 이름] : 외래키 제약조건의 이름 설정 (생략 가능) FOREIGN K..
-
[Refactoring] 위대한 시작..Software/Refactoring : 리팩토링 2017. 9. 23. 18:19
* 해당 포스팅은 Martin Fowler의 Refactoring 책의 내용을 정리한 것이다. 현업에서는 동일한 소스 코드를 여러명이 붙어서 수정하거나 디버깅 하기 때문에 직관적이고 이해가 쉬운 코드를 작성하는 것이 매우 중요하다. 그러나 우리는 언제나 그렇듯 일정에 쫓겨 날림 코드를 작성해야만 하는 경우가 매우 많다. 이렇게 추가/수정 된 코드들은 결국 작성자만 알게되는 코드로 남게 되고 이는 다른 개발자들의 휴먼 에러(Human Error) 혹은 사이드 이펙트(Side Effect)를 불러일으키게 되는 주요 원인이 되기도 한다. 이렇게 작성 된 코드들로 인해 지저분해진 설계/구조를 수정하고 재배치, 변경하는 작업을 우리는 리팩토링(Refatoring) 이라고 한다. 리팩토링을 통해 우리는 성능 향상,..