오늘은 중복된 결과를 제거하기 위해 mysql에서 많이 써먹는 distinct 절에 대해 알아보도록 하겠습니다. world에서, country 테이블을 생각해 봅시다. 나라는, Continent라는 컬럼도 포함할 겁니다. 예를 들어, 아시아, 유럽, 북아메리가 등등. country에서, Continent만 뽑아 봅시다. 그러면 쿼리는 위와 같이 작성하면 됩니다. 그런데, 이것은 country에 있는 레코드를 모두 뽑아냅니다. 물론, 속성은 Continent만 뽑아내겠지만요. 예를 들어서, 영국과 프랑스가 있다면, "Europe" 이라는 것은 2번 이상 뽑힐 겁니다. 그런가요? 저는, country 테이블에 있는 나라들이 속해있는 대륙의 갯수만 알고 싶습니다. 즉, Europe이 2번 나온다면 1번만 세야..
mysql 검색 결과
오늘은 ascii 함수와 char 함수에 대해서 알아보겠습니다. 각각, 문자를 ascii 코드 값으로, ascii 코드 값을 문자로 변환하는 함수입니다. 사용법은 그리 복잡하지 않으니 예제를 먼저 보도록 하겠습니다. 먼저, ascii 함수 먼저 보겠습니다. 문자를 넣으면, 그에 맞는 아스키 코드 값이 리턴이 되는데요. 당연하게도 다중 바이트 문자인 '가'와 같은 것은 쓸 수 없습니다. 먼저 'a'와 'A'의 ascii 코드 값을 뽑아봅시다. 그러면 97과 65가 나옵니다. 소문자와 대문자의 코드 값 차이는 32임을 알 수 있어요. 소문자만 들어오면 ch - 'a' + 1이 문자 값이 되고, 대문자만 들어온다면 ch - 'A' + 1이 문자의 값이 됩니다. 이는 'a'부터 'z'까지, 'A'부터 'Z'까지..
이번 시간에는 Self Join에 대해서 배워보도록 하겠습니다. 이것은, 자신과 자신을 Join하는 것을 의미하는데요. 예를 들어, 이런 경우를 생각해 볼 수 있어요. 도시 이름과 인구, 도시 ID가 저장된 테이블이 있다고 가정해 봅시다. 이 때, 해당 도시의 인구 랭킹을 구하고 싶습니다. 단, 동순위는 같은 번호로 처리합니다. 이 쿼리를 어떻게 처리하면 좋을까요? 물론 MYSQL도 지금은 rank 함수가 지원됩니다. 아마 8.0부터인가부터 말입니다. 실제로, 이것을 써 봤는데 무난하게 되었습니다. 하핫. 그런데 이 함수를 쓰는 게 불가능하다. 그러면 어떻게 하면 좋을까요? 몇 가지 방법이 있는데요. 그냥 성능 생각하지 않고 짤 수 있는 방법 중 하나는 self join을 하는 것입니다. 먼저, city..
저번 시간에, 자연 조인에 대해서 이야기 했습니다. 아직 보고 오지 않으셨다면 보고 오시는 것을 권장드립니다. 이것은, 속성이 같은 것을 JOIN 조건으로 삼습니다. 그렇기 때문에, 의도치 않은 결과가 나올 수 있어요. 저번 시간에 했으니, 복습을 한 번 해 봅시다. 돛단배 DB 교과서에는 대학교 DB 예제가 있습니다. classroom의 정보를 모두 봅시다. 그러면, capacity랑, room_number랑 building이 있습니다. 즉, 이 교실은 x명을 수용할 수 있고, room 번호가 y이고, building이 z입니다. 당연하게도, 교실 번호는 중복될 수 있습니다. 일례로 우리 학교도 경상관 101호랑, 정보 과학관 101호가 있습니다. 101호가 중복되어 있을 수 있습니다. 그리고 이것은 ..
SQL의 자연 조인에 대해 알아봅시다. natural join은 기본적으로 동등 조인입니다. 그런데, 흔히 알고 있는 join A using B, 혹은 ON 조건절을 거는 것과 다른 점은, 조인 조건이 없다는 것입니다. 테이블 2개가 있을 때, 2개에 공통적으로 나타나는 속성들이 있을 거에요. 이 속성들에 대해서 같은 쌍만을 고려합니다. 예제를 들어보도록 하겠습니다. 어제 보았던 sakila를 보도록 합시다. rental과 customer를 natural join 한다고 해 봅시다. 먼저 table에 있는 속성들을 모두 봅시다. 고객 id, 인벤토리 id, 최근 업데이트 날짜, ... 이렇게 들어 있네요. 그리고 고객 테이블을 보면, customer_id가 있고, last_update가 눈에 보입니다. ..
최근댓글