코딩일기/자격증

[정보처리기사] SQL | CROSS JOIN과 LIKE 연산자 활용 | 정보처리기사 실기 기출문제

jhy_2023 2025. 2. 25. 16:49
728x90
반응형

2021년 3회 정보처리기사 실기 기출문제

문제

다음 두 테이블을 참고하여 SQL 실행결과를 쓰시오

테이블 A
테이블 B

-- 실행문 : 
SELECT COUNT(*) AS CNT  
FROM A CROSS JOIN B  
WHERE A.NAME LIKE B.RULE;

정답

4

반응형

해설

📌 JOIN 기본 개념

SELECT *
FROM 테이블1
JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼;

JOIN은 두 개 이상의 테이블을 조인하여 데이터를 결합하는 SQL 문법입니다. 두 테이블 간의 관계를 기반으로 일치하는 데이터를 반환하며, INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN 등의 다양한 종류가 있습니다.

  • SELECT *
    • 조회할 컬럼을 지정합니다. *은 모든 컬럼을 선택하는 의미입니다. 필요에 따라 테이블1.컬럼, 테이블2.컬럼처럼 특정 컬럼을 지정할 수도 있습니다.
  • FROM 테이블1
    • 첫 번째 테이블을 지정합니다.
  • JOIN 테이블2
    • 두 번째 테이블을 지정합니다. JOIN은 두 테이블을 결합하는 역할을 합니다.
  • ON 테이블1.컬럼 = 테이블2.컬럼
    • ON 절은 JOIN을 사용할 때, 두 테이블이 결합될 조건을 지정합니다. 테이블1.컬럼 = 테이블2.컬럼 형태로 주로 사용되며, 이는 두 테이블에서 같은 값을 가진 레코드를 찾기 위해 사용됩니다.  
    • 조인 조건을 지정합니다. 여기서 두 테이블의 특정 컬럼이 일치할 때 데이터를 결합합니다. 즉, 테이블1과 테이블2의 컬럼 값이 동일한 경우에만 해당 데이터를 반환합니다.

📌 CROSS JOIN 기본 개념

CROSS JOIN은 두 테이블의 모든 가능한 조합을 반환하는 조인 방식입니다. CROSS JOIN은 기본적으로 조건 없이 두 테이블을 결합하여, 각 테이블의 모든 행을 조합한 결과를 반환합니다. 이 결과는 곱셈적 관계로, 테이블 A의 행 수와 테이블 B의 행 수를 곱한 만큼 결과가 생성됩니다. 즉, 조합된 행의 개수는 A의 행 수×B의 행 수입니다.

SELECT columns
FROM table1
CROSS JOIN table2;
  • CROSS JOIN은 조건 없이 모든 행을 결합합니다. 그래서 ON 절 없이 두 테이블을 결합합니다. 반면, 다른 JOIN(예: INNER JOIN, LEFT JOIN)에서는 ON 절을 사용해 두 테이블 간의 관계나 조건을 정의합니다.
  • 예를 들어, A 테이블에 3개의 행B 테이블에 4개의 행이 있을 경우, CROSS JOIN 결과는 3 * 4 = 12개의 행이 됩니다.
  • CROSS JOIN은 WHERE 조건을 통해 결과를 제한할 수 있습니다.
728x90

📌 문제 해설

SELECT COUNT(*) AS CNT  
FROM A CROSS JOIN B  
WHERE A.NAME LIKE B.RULE;

이 쿼리는 두 개의 테이블 A와 B를 CROSS JOIN으로 조합한 후, WHERE 절을 사용해 특정 조건을 만족하는 행의 개수를 세는 쿼리입니다.

1️⃣ CROSS JOIN

FROM A CROSS JOIN B
  • CROSS JOIN을 수행하면 두 테이블의 모든 행이 조합됩니다.
    • 테이블 A와 B의 모든 행을 곱집합형태로 생성합니다. A 테이블에 3개의 행이 있고, B 테이블에 2개의 행이 있으므로 CROSS JOIN 결과는 3 × 2 = 6개 행이 됩니다.
    • CROSS JOIN은 두 테이블의 모든 컬럼을 포함한 조합을 생성합니다.  CROSS JOIN을 수행하면 결과는 A의 모든 컬럼과 B의 모든 컬럼이 합쳐진 형태가 됩니다.  

CROSS JOIN 을 수행하면 결과

2️⃣ WHERE A.NAME LIKE B.RULE

WHERE A.NAME LIKE B.RULE
  • CROSS JOIN은 조건 없이 두 테이블의 모든 가능한 조합을 반환합니다. 그러나, WHERE 절을 추가하면 그 결과를 필터링할 수 있습니다. 즉, CROSS JOIN은 모든 조합을 반환한 후, 그 중에서 특정 조건에 맞는 행만 선택하려면 WHERE 절을 사용합니다.
  • LIKE 연산자는 문자열 패턴 매칭에 사용됩니다:
    • %는 0개 이상의 임의의 문자열을 나타냅니다. 예를 들어 'a%'는 a로 시작하는 모든 문자열을 의미합니다.
    • _는 임의의 한 문자를 나타냅니다. 예를 들어  'a_'는 a로 시작하고 두 글자인 문자열을 의미합니다.
  • LIKE 연산자를 사용하여 A.NAME 값이 B.RULE 패턴과 일치하는 행만 필터링합니다.
    • B.RULE 값이 s%라면, A.NAME이 "s"로 시작하는 경우만 해당됩니다.
    • B.RULE 값이 %t%라면, A.NAME에 "t"가 포함된 경우만 해당됩니다.
  • 4개 행이 조건을 만족합니다.

LIKE 필터링 결과

3️⃣ COUNT 함수

SELECT COUNT(*) AS CNT
  • WHERE 절을 통과한 행의 개수를 COUNT 함수를 사용하여 셉니다.
  • 앞서 WHERE 절을 만족하는 행이 4개였으므로, 최종적으로 COUNT(*) 결과는 4가 됩니다.
  • AS는 별칭(alias)을 지정할 때 사용되는 키워드입니다. 주로 컬럼 이름이나 테이블 이름에 대한 별명을 지정할 때 사용하여 쿼리 결과를 더 직관적이고 이해하기 쉽게 만듭니다.
    • AS CNT는 COUNT(*)의 결과에 대해 CNT라는 별칭을 부여하는 역할을 합니다. 이렇게 하면 결과값에 대한 출력 이름이 CNT로 표시되며, 컬럼 이름을 더 이해하기 쉽게 할 수 있습니다.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형