mysql에서는, 정보를 조회할 때 select from where 절은 상당히 많이 씁니다. 오늘은 그 중 첫 번째, from 절에 대해 알아봅시다. 보통 이 뒤에는 릴레이션, 즉 db 안에 있는 테이블 명이 오는데요. 이 뒤에 테이블 이름이 여러개가 들어와 있으면 어떻게 동작할까요? 그 전에, 카티션 곱을 아실 필요가 있습니다. 집합 A가 있고 집합 B가 있다고 해 봅시다. 이 때, A와 B의 카티션 곱 C는 아래와 같이 정의됩니다. C = {(a,b)|a는 A에 속하고, b는 B에 속한 원소} 즉, n(A) = 3이고, n(B) = 3이라면 n(C) = 9라는 것입니다. from 절에 테이블 2개가, 즉 t1과 t2가 오면 결과 값은 t1과 t2의 카티션 곱으로 나옵니다. 정말 그런지 확인을 해 볼..
mysql 검색 결과
저번에 LIKE 연산자를 배웠습니다. 이번에는 조금 더 복잡한 패턴 매칭에 대해서 다뤄보겠습니다. [관련글] LIKE 연산자 알아봅시다. 눈치 채신 분도 있으실지 모르겠습니다. 자바에서 파싱할 때, 정규 표현식을 자주 쓰는데요. mysql은, REGEXP 라는 것으로, 정규식을 사용할 수 있습니다. 처음과 끝은 각각 ^과 $로 표현할 수 있어요. 예를 들어서, '^a'라면, a로 시작하는 패턴입니다. 그리고 'E$'이라면, E로 끝나는 패턴입니다. 그러면 '^eat$'은 무엇을 의미할까요? "eat"를 찾으라는 거겠네요. 그리고, .은 임의의 문자를 의미하는데요. '^...$'은, 길이가 3인 문자열이 패턴에 매칭된다는 이야기입니다. 이 쿼리를 수행해 봅시다. 그러면 문자열이 시작하고 임의의 문자가 3개..
문자열에서, 패턴 일치를 검사할 때 무엇을 쓸 수 있을까요? 가장 쉽게 생각할 수 있는 것은 Like입니다. 이것도 예제를 천천히 보도록 합시다. 이 포스팅에 쓸 재료는 다음 테이블입니다. 제가 예전에 만들어 두었던 worker 테이블입니다. 여기에는 다음과 같은 데이터들이 들어가 있습니다. 여기서 worker_name이 대문자 A로 시작하는 패턴을 찾고 싶습니다. 어떻게 하면 좋을까요? 요렇게 쓰시면 됩니다. 이것은 A로 시작하는 패턴을 찾아라. 라는 말과 같습니다. 여기서 '%'라는 문자가 궁금하실 수 있는데요. 이것은 어떠한 패턴과도 일치한다는 소리입니다. 예를 들어, %가 하나 붙어 있으면, 아무것도 없는 빈 문자열과도 일치하고, 'p'라는 것과도 일치합니다. 그러면 'Asia'는 'A%'라는 패..
mysql에서 sysdate()와 now()는 현재 날짜와 시간을 리턴해 주는 함수입니다. 예를 들어서 도서관 데이터 베이스가 있다고 합시다. 어떠한 사람이 어떤 책을 빌려갔는지, 언제 빌려갔는지 등을 테이블에 저장할 거에요. 보통, 30일 정도 지나면 연체인데요. 이 때, 현재 시간이, 빌린 날로부터 30일 이상 경과되었다면 연체로 처리하면 될 거에요. 그럴 때, 보통 두 함수를 써요. 현재 시간과 날짜를 알아와야 할 때. 물론, 여기서 데이터를 더 잘 조작해야 겠지만요. 이 두 함수는 하는 일은 같지만, 차이가 있는데요. 이 부분에 대해서, 알아보도록 하겠습니다. 먼저 sysdate() 부터 봅시다. 다음 쿼리를 작성해 봅시다. sysdate() 함수 사이에, sleep 함수를 호출했는데요. 대충 1..
사원 이름 name과 월급 salary로 구성되어 있는 db 테이블이 있다고 생각해 봅시다. 아직 직급 필드는 없다고 생각해 봅시다. 월급 협상이 안 된 신입 직원 분들도 있다고 해 봅시다. 그럴 일이 있을지는 잘 모르겠지만요. 그러면 salary가 null값인 레코드가 있다는 것입니다. 일단 레코드 5개만 추가해 봅시다. 데이터 베이스 이름은 worker입니다. 필드가 2개입니다. 하나는 worker_name, 다른 하나는 salary입니다. worker_name은 반드시 5자가 아니기 때문에, 가변 길이를 이용하였습니다. 그리고 월급은 정수형으로 표현할 수 있기 때문에, int로 설정하였습니다. 그리고 다음과 같이 데이터를 넣습니다. salary 필드에 not null 조건이 붙어 있지 않은 걸로 보..
최근댓글