집 >데이터 베이스 >MySQL 튜토리얼 >SQL의 일대다 관계에서 데이터를 효율적으로 연결하는 방법은 무엇입니까?
SQL에서 일대다 관계에 대한 그룹 연결 마스터링
관계형 데이터베이스에서는 다음과 같은 테이블에서 정보를 검색해야 하는 경우가 많습니다. 일대다 관계를 가지고 있습니다. 일반적인 시나리오는 상위 레코드 및 연결된 하위 레코드에 대한 데이터를 수집하는 것입니다.
각 조직에 여러 명의 직원이 있을 수 있는 조직 테이블과 직원 테이블의 예를 생각해 보세요. 모든 직원의 이름과 함께 특정 조직에 대한 모든 정보를 검색하기 위해 우리는 다양한 접근 방식을 모색합니다.
표준 SQL 기술
안타깝게도 표준 SQL- 92 및 SQL-99에는 그룹 연결을 위한 내장 함수가 포함되어 있지 않습니다. 공급업체별 솔루션이 필요합니다.
MySQL
MySQL은 GROUP_CONCAT 기능을 제공합니다.
SELECT o.ID, o.Address, o.OtherDetails, GROUP_CONCAT(CONCAT(e.FirstName, ' ', e.LastName)) AS Employees FROM Employees e INNER JOIN Organization o ON o.Org_ID = e.Org_ID GROUP BY o.Org_ID;
PostgreSQL
PostgreSQL 버전 9.0 이상에서는 다음을 제공합니다. STRING_AGG 함수:
SELECT o.ID, o.Address, o.OtherDetails, STRING_AGG((e.FirstName || ' ' || e.LastName), ', ') AS Employees FROM Employees e INNER JOIN Organization o ON o.Org_ID = e.Org_ID GROUP BY o.Org_ID;
Oracle
Oracle은 LISTAGG 함수를 활용합니다.
SELECT o.ID, o.Address, o.OtherDetails, LISTAGG(e.FirstName || ' ' || e.LastName, ', ') WITHIN GROUP (ORDER BY e.FirstName) AS Employees FROM Employees e INNER JOIN Organization o ON o.Org_ID = e.Org_ID GROUP BY o.Org_ID;
폴백 솔루션
공급업체별 기능을 사용할 수 없는 경우 저장 프로시저를 사용하여 연결을 수행하기 위해 생성됩니다.
저장 프로시저 예(일반)
CREATE PROCEDURE MY_CUSTOM_GROUP_CONCAT_PROCEDURE ( @Org_ID INT ) AS BEGIN DECLARE @Employees NVARCHAR(MAX) = ''; SELECT @Employees = @Employees + FirstName + ' ' + LastName + ', ' FROM Employees WHERE Org_ID = @Org_ID; SELECT @Employees = LEFT(@Employees, LEN(@Employees) - 2); RETURN @Employees; END GO;
사용
SELECT o.ID, o.Address, o.OtherDetails, MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) AS Employees FROM Organization o;
이러한 기술을 활용함으로써 개발자는 하나의 레코드와 관련된 다중 레코드 정보를 효율적으로 검색할 수 있습니다. 일대다 관계에서 데이터를 전체적으로 볼 수 있습니다.
위 내용은 SQL의 일대다 관계에서 데이터를 효율적으로 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!