SQL 자체 결합을 사용하여 수학 순열과 조합을 표현합니다.
소개
SQL에 있어서, 자신은 별로 익숙하지 않은 자기 결합의 향후 도움이 될지도 모르는 테크닉을 소개해 갑니다.
실행 결과는 여기에서 확인할 수 있습니다.
기본 데이터
무언가의 일람이라고 생각해 주세요.
CREATE TABLE members (
id INT NOT NULL PRIMARY KEY auto_increment,
name TEXT
);
INSERT INTO members VALUES
(1, 'tanaka'),
(2, 'okada'),
(3, 'hiranuma');
자기 결합을 사용하여 중복 순열을 생성합니다.
중복 순열과는 ... 다른 n 개의 것에서 중복을 허용하고 r 개 취하는 순열
n^r
Query
SELECT
M1.name,
M2.name
FROM members M1 CROSS JOIN members M2;
Results
name1
name2
타나카
타나카
오카다
타나카
히라누마
타나카
타나카
오카다
오카다
오카다
히라누마
오카다
타나카
히라누마
오카다
히라누마
히라누마
히라누마
이것은 소위 총당전에서 모든 조합을 열거하고 있을 뿐입니다.
자기 결합을 사용하여 순열 만들기 (중복을 허용하지 않음)
이제 테이블
members
을 사용하여 SQL에서 순열을 표현합니다.순열은 정렬 순서를 구별하며 당연히 중복되지 않습니다.
이번이라면, 3명의 멤버의 2명으로 나란히 하는 방법이므로, 식으로 하면.
_{3}P_{2}
3×2=6 패턴의 정렬 방법이 있습니다.
이것을 SQL의 자기 결합을 이용해 표현하면 다음과 같이 됩니다.
Query
SELECT
M1.name AS name1,
M2.name AS name2
FROM members M1
INNER JOIN members M2 ON M1.name <> M2.name;
Results
name1
name2
오카다
타나카
히라누마
타나카
타나카
오카다
히라누마
오카다
타나카
히라누마
오카다
히라누마
자기결합을 이용한 조합 만들기
이번 사례를 계산하면
_{3}C_{2} \\
= \frac{3\times2}{2} \\
= 3 \\
패턴을 정렬하는 방법이 있습니다.
이것을 SQL의 자기 결합을 이용해 표현하면 다음과 같이 됩니다. 나중에 좋다.
Query
SELECT
M1.name AS name1,
M2.name AS name2
FROM members M1
INNER JOIN members M2 ON M1.name > M2.name;
문자 코드 순서대로 정렬하여 자신보다 앞에 오도록 합니다.
Results
name1
name2
타나카
오카다
타나카
히라누마
오카다
히라누마
참조
44-48p
출력 100개 노크 실시 중
Reference
이 문제에 관하여(SQL 자체 결합을 사용하여 수학 순열과 조합을 표현합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryosuketter/items/0137e695d6eb40c85a8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)