CodeGym/Java Course/All lectures for KO purposes/여러 테이블에서 데이터 선택

여러 테이블에서 데이터 선택

사용 가능

종속 테이블

이제 쿼리를 조금 복잡하게 만들어 보겠습니다. 직원의 작업이 포함된 새 작업 테이블을 데이터베이스에 추가해 보겠습니다. 어떤 항목이 포함되어 있는지 살펴보겠습니다.

SELECT * FROM task

그러한 요청의 결과:

ID employee_id 이름 마감 시간
1 1 프런트엔드의 버그 수정 2022-06-01
2 2 백엔드의 버그 수정 2022-06-15
5 커피를 사다 2022-07-01
4 5 커피를 사다 2022-08-01
5 5 커피를 살 것이다 2022-09-01
6 (없는) 사무실을 청소하다 (없는)
7 4 즐거운 삶 (없는)
8 6 즐거운 삶 (없는)

이 테이블에는 4개의 열만 있습니다.

  • id — 고유한 작업 번호(및 테이블의 행)
  • employee_id — 작업이 할당된 직원 테이블의 직원 ID입니다.
  • 이름 — 작업의 이름과 설명
  • 기한 - 작업을 완료해야 하는 시간입니다.

몇 가지 뉘앙스에 주의하십시오. 태스크 N6에는 employee_id가 없고 클리너도 없습니다. 작업은 있지만 수행자는 없습니다. 일어난다.

또한 작업 6-9에는 기한이 정해져 있지 않습니다. 이는 작업을 정기적으로 지속적으로 수행해야 할 때 발생합니다. 예를 들어, 사무실은 매일 청소해야 하지만, 당신도 매일 삶을 즐겨야 합니다 :)

한 테이블이 다른 테이블의 ID를 사용하는 경우 이러한 테이블을 종속 이라고 합니다 .

여러 테이블에 대한 쿼리

여기서 우리는 작업 테이블에서 "Enjoying life"라는 두 가지 작업이 있음을 볼 수 있습니다. 이 운 좋은 사람들이 누구인지 어떻게 알 수 있습니까?

이를 위해 SQL에서 한 번에 두 개의 테이블에서 쿼리를 실행할 수 있습니다. 일반적으로 SQL에서는 여러 테이블을 동시에 쿼리할 수 있습니다. 이러한 요청의 일반적인 형식은 다음과 같습니다.

SELECT columns
FROM Table 1, table 2, tableN

중요한! 동시에 여러 테이블에 쿼리를 작성하면 결과적으로 테이블 행의 데카르트 제품을 얻게 됩니다. 첫 번째 테이블의 각 행은 두 번째 테이블의 각 행에 접착되는 식입니다.

즉, 첫 번째 테이블에 5개의 행이 있고 두 번째 테이블에 10개의 행이 있으면 총 50개의 행이 있습니다. Java에서 이 쿼리는 다음과 같습니다.

for (String row1 : table1)
{
	for (String row2 : table2)
   {
  	System.out.println(row1 + row2);
   }
}

한 번에 두 개의 테이블에 쿼리를 작성하고 어떤 일이 발생하는지 살펴보겠습니다.

SELECT * FROM employee, task

그리고 이 쿼리의 결과는 다음과 같습니다.

ID 이름 직업 샐러리 나이 ID 직원 _ID 이름 마감 시간
1 이바노프 이반 프로그램 제작자 100000 25 1 1 프런트엔드의 버그 수정 2022-06-01
2 페트로프 페트르 프로그램 제작자 80000 23 1 1 프런트엔드의 버그 수정 2022-06-01
이바노프 세르게이 시험 장치 40000 서른 1 1 프런트엔드의 버그 수정 2022-06-01
4 라비노비치 모이샤 감독 200000 35 1 1 프런트엔드의 버그 수정 2022-06-01
5 키리엔코 아나스타샤 사무실 관리자 40000 25 1 1 프런트엔드의 버그 수정 2022-06-01
6 바스카 고양이 1000 1 1 프런트엔드의 버그 수정 2022-06-01
1 이바노프 이반 프로그램 제작자 100000 25 2 2 백엔드의 버그 수정 2022-06-15
2 페트로프 페트르 프로그램 제작자 80000 23 2 2 백엔드의 버그 수정 2022-06-15
이바노프 세르게이 시험 장치 40000 서른 2 2 백엔드의 버그 수정 2022-06-15
4 라비노비치 모이샤 감독 200000 35 2 2 백엔드의 버그 수정 2022-06-15
5 키리엔코 아나스타샤 사무실 관리자 40000 25 2 2 백엔드의 버그 수정 2022-06-15

총 48개의 결과 라인이 있지만 여기서는 11개만 제공했습니다. 그렇지 않으면 공간이 충분하지 않습니다.

다음 세 가지에 주의하십시오.

  • 이름이 같은 열: id . 이것은 직원 테이블 의 ID 와 작업 테이블 의 ID 입니다 .
  • 각 테이블의 행이 반복됩니다. 왼쪽 열에서 ID 6 다음에 다시 ID = 1이 옵니다.
  • 예를 들어 직원 테이블의 id가 6이고 동일한 행의 employee_id가 1인 의미 없는 행이 있습니다.

의미 없는 줄 제거

결과 테이블에 행이 너무 많습니다 . 이는 employeetask 두 테이블의 모든 행에 대한 데카르트 곱입니다 .

논리적으로 Employee_id 행이 3이면 id가 3인 직원 테이블의 행에만 달라붙어야 합니다. WHERE를 사용하여 이 오해를 수정해 보겠습니다.

다음과 같은 쿼리를 작성해 봅시다.

SELECT * FROM employee, task 
WHERE emploee.id = task.emploee_id 

그리고 이 쿼리의 결과는 다음과 같습니다.

ID 이름 직업 샐러리 나이 ID employee_id 이름 마감 시간
1 이바노프 이반 프로그램 제작자 100000 25 1 1 프런트엔드의 버그 수정 2022-06-01
2 페트로프 페트르 프로그램 제작자 80000 23 2 2 백엔드의 버그 수정 2022-06-15
4 라비노비치 모이샤 감독 200000 35 7 4 즐거운 삶 (없는)
5 키리엔코 아나스타샤 사무실 관리자 40000 25 5 커피를 사다 2022-07-01
5 키리엔코 아나스타샤 사무실 관리자 40000 25 4 5 커피를 사다 2022-08-01
5 키리엔코 아나스타샤 사무실 관리자 40000 25 5 5 커피를 살 것이다 2022-09-01
6 바스카 고양이 1000 8 6 즐거운 삶 (없는)

좋은 소식은 의미 없는 줄이 사라졌다는 것입니다. 첫 번째 열의 id는 항상 employee_id와 같습니다.

나쁜 소식은 사무실 청소와 같이 누구에게도 할당되지 않은 작업이 사라졌다는 것입니다. 그들의 employee_id는 NULL이므로 WHERE가 완료된 후 폐기되었습니다.

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다