아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
Metasight
Metasight21.04.13

SQL 서브쿼리에서 별명의 범위가 어떻게 되나요?

중첩구조에서의 별명에 관해서 질문이 있습니다.

SELECT * FROM(FROM sample1) AS sq;

라고 sq라는 별명을 주었을 때,

이 별명은 서브쿼리(SELECT * FROM sample1)로 반환된 테이블의 별명인가요?

아니면 최상위 SELECT 명령으로 반환된 테이블의 별명이 되는 것인가요?

55글자 더 채워주세요.
답변의 개수
6개의 답변이 있어요!
  • 안녕하세요 현업 6년차 개발자입니다.

    일단 먼저 주신 쿼리가 잘못되었습니다. 주신 형태는 인라인 뷰 형태의 서브쿼리입니다.

    table명을 sample1이라고 할때 인라인뷰 서브쿼리는

    select *

    from (select *

    from sample1 sp1) sp2

    요렇게 될 겁니다.

    여기서 alias sp1은 서브쿼리 안쪽에서만 쓰일 수 있고

    바깥쪽 alias sp2는 바깥쪽에서만 쓸 수 있습니다.

    sample1이라는 테이블에 column1과 column2라는 컬럼이 있다고 가정할 때 다음과 같이 쓸 수 있습니다.

    select sp2.column1, sp2.column2

    from (select sp1.column1, sp1.column2

    from sample1 sp1) sp2

    도움 되셨길 바랍니다.


  • 안녕하세요

    Alias 범위에 대해 질문해 주셨는데,

    서브쿼리로 반환된 테이블의 별명으로 적용됩니다.

    'AS'는 바로 이전에 나온 테이블이나 Column의 이름을 바꾸기 위해 사용합니다.

    따라서 AS 바로 이전에 나온 서브쿼리(괄호)에 적용되어 테이블명이 sq로 바뀌는 것을 알 수 있습니다.

    제일 쉽게 확인하는 방법은 상위 쿼리에서 별칭이 적용되나 확인하는 것입니다.

    예를 들어...

    SELECT sq.* FROM ( SELECT * FROM sample1 ) AS sq;

    이렇게 쿼리를 작성하고 정상적으로 동작하면 서브쿼리를 통해 반환된 테이블의 이름이 'sq'로 별명이 붙어서 상위쿼리에 적용되었다는 것을 알 수 있습니다.

    감사합니다.


  • 이 별명은 서브쿼리(SELECT FROM sample1)로 반환된 테이블의 별명인가요? 네

    * 서브쿼리(SUBQUERY)

    - 하나의 SQL문 안에 포함된 또다른 SQL문

    - 메인쿼리가 서브쿼리를 포함하는 종속적인 관계

    - 알려지지 않은 기준을 이용한 검색을 위해 사용

    - 조인의 경우 모든 테이블이 대등한 관계로 모든테이블의 칼럼을 자유롭게 사용 가능

    → 서브쿼리는 메인쿼리의 칼럼을 모두 사용할 수 있지만 메인쿼리는 서브쿼리의 칼럼을 사용할 수 없음

    → 사용하기 위해선 조인방식으로 변환하너가 함수, 스칼라 서브쿼리 등을 이용해야함

    - 서브쿼리는 서브쿼리 레벨(1:1, 1:M, M:N)과는 상관없이 항상 메인쿼리 레벨로 결과 집합이 생성

    - 서브쿼리는 SELECT 절, FROM 절, WHERE 절, HAVING 절, ORDER BY 절,

    INSERT문의 VALUES 절, UPDATE문의 SET 절에 이용가능

    (주의사항)

    - 서브쿼리는 괄호로 감싼다

    - 서브쿼리는 단일행 또는 복수행 비교 연산자와 함게 사용가능

    - 서브쿼리에서는 ORDER BY를 사용하지 못함

    → 메인쿼리에 사용해야함

    * 동작하는 방식에 따른 서브쿼리 분류

    1.Un-Correlated (비연관) 서브쿼리

    - 서브쿼리가 메인쿼리 칼럼을 갖지 않는 형태의 서브쿼리

    - 메인쿼리에 값(서브쿼리의 실행결과)을 제공하기 위한 목적으로 사용

    2. Correlated (연관) 서브쿼리

    - 서브쿼리가 메인쿼리 칼럼을 갖는 형태의 서브쿼리

    - 메인쿼리가 먼저 수행되어 읽은 데이터가 서브쿼리 조건에 맞는지

    확인하고자 할 대 사용


  • 안녕하세요 4년차 자바 웹개발자입니다.

    서브쿼리 관련해서 질문을 주셨는데요.

    SELECT * FROM (SELECT * FROM sample1) AS sq;

    위와 같이 쿼리문을 작성했다 하면 (SELECT * FROM sample1) 해당 서브쿼리에서 나온 데이터의 별명을 sq라고 지정 하는 것 입니다.

    그래서 sq.A, sq.B, sq.C 서브쿼리에서 뽑아온 데이터를 사용하는거죠.

    감사합니다.


  • 안녕하세요.

    SELECT * FROM (SELECT * FROM sample1) AS sq;

    위 query의 경우 (SELECT * FROM sample1) 구문의 결과가 sq라는 이름의 별명으로 지정됩니다.

    아래와 같이 사용할 수 있습니다.

    SELECT sq.컬럼1, sq.컬럼2, sq.컬럼3

    FROM (SELECT FROM sample1) AS sq;


  • 탈퇴한 사용자
    탈퇴한 사용자21.04.13

    안녕하세요

    서브쿼리에 SELECT 절이 빠져 있어 추가했습니다.

    SQ는 서브쿼리 (SELECT A.* FROM SAMPLE1) 결과의 대한 별명입니다.

    SELECT SQ.* -- SQ 별명 사용 FROM (SELECT A.* -- A 별명 사용 FROM SAMPLE1 A -- A 별명 선언 ) AS SQ -- SQ 별명 선언