복붙노트

[SQL] SQL의 목적이 "있는 그대로"를 키워드 무엇입니까?

SQL

SQL의 목적이 "있는 그대로"를 키워드 무엇입니까?

당신이 바로 테이블 이름 다음에 식별자를 입력 SQL 테이블 별칭을 설정할 수 있습니다.

SELECT * FROM table t1;

별칭을 표시하기 위해 AS 당신은 키워드를 사용할 수 있습니다.

SELECT * FROM table AS t1;

그들 사이의 차이가있는 경우는 무엇입니까?

나는 오래된 DBA 사람들이 AS없이 쓰기 제표에 대한 경향을 볼 수 있지만, 새로운 튜토리얼의 대부분은 그것을 사용할 수 있습니다.

업데이트 : 테이블 및 열 별칭을 목적으로 무엇을 알고있다. 나는 그것이 아니라 그것없이 작동하는 동안 별칭을 설정하기위한 별도의 키워드를 가지고있는 이유는 무엇인지, 궁금합니다.

해결법

  1. ==============================

    1.위의 두 문 사이에 차이가 없습니다. AS는 별명을 언급 단지 더 명시 적 방법입니다

    위의 두 문 사이에 차이가 없습니다. AS는 별명을 언급 단지 더 명시 적 방법입니다

  2. ==============================

    2.내 앞에 대답 모두가 올바른 것입니다. 당신이 조인이 긴 쿼리 또는 쿼리를 할 때 테이블에 대한 별칭 바로 가기 이름으로 가지를 사용합니다. 다음은 몇 가지 예입니다.

    내 앞에 대답 모두가 올바른 것입니다. 당신이 조인이 긴 쿼리 또는 쿼리를 할 때 테이블에 대한 별칭 바로 가기 이름으로 가지를 사용합니다. 다음은 몇 가지 예입니다.

    예 1

    SELECT P.ProductName,
           P.ProductGroup,
           P.ProductRetailPrice
    FROM   Products AS P
    

    예 2

    SELECT P.ProductName,
           P.ProductRetailPrice,
           O.Quantity
    FROM   Products AS P
    LEFT OUTER JOIN Orders AS O ON O.ProductID = P.ProductID
    WHERE  O.OrderID = 123456
    

    예 3 그것은 AS 키워드를 사용하는 것이 관행, 그리고 아주 좋습니다,하지만 하나없이 동일한 쿼리를 수행 할 수있다 (그리고 나는 종종 할).

    SELECT P.ProductName,
           P.ProductRetailPrice,
           O.Quantity
    FROM   Products P
    LEFT OUTER JOIN Orders O ON O.ProductID = P.ProductID
    WHERE  O.OrderID = 123456
    

    당신이 말할 수, 나는 마지막 예에서 AS 키워드를 떠났다. 그리고 그것은 별칭으로 사용할 수 있습니다.

    예 4

    SELECT P.ProductName AS "Product",
           P.ProductRetailPrice AS "Retail Price",
           O.Quantity AS "Quantity Ordered"
    FROM   Products P
    LEFT OUTER JOIN Orders O ON O.ProductID = P.ProductID
    WHERE  O.OrderID = 123456
    

    실시 예 4 출력

    Product             Retail Price     Quantity Ordered
    Blue Raspberry Gum  $10 pk/$50 Case  2 Cases
    Twizzler            $5 pk/$25 Case   10 Cases
    
  3. ==============================

    3.당신이 확실 선택할 수있는 구문하지 않을 때, 특히, 선택을 분리 휴리스틱에 책을 상담을 많이있을 것 같지 않습니다. 지금까지 내가 아는 한, 유일한 추론은 '조 셀코의 SQL은 스타일 프로그래밍'SQL을위한 예약 :

    당신이 확실 선택할 수있는 구문하지 않을 때, 특히, 선택을 분리 휴리스틱에 책을 상담을 많이있을 것 같지 않습니다. 지금까지 내가 아는 한, 유일한 추론은 '조 셀코의 SQL은 스타일 프로그래밍'SQL을위한 예약 :

    당신의 팀이 대회처럼하지 않는 경우이 방법, 당신은 Celko를 비난 할 수 - 나는 내가 알고;)

    UPDATE 1 : 오래된 타이머가 습관적으로 사용하지 않는 이유를 설명 할 수 IIRC는 오랜 시간 동안, 오라클은 AS를 지원하지 않았다 (앞의 상관 관계 이름) 키워드.

    업데이트 2 : 용어 '상관 관계 이름'는 SQL 표준에서 사용하지만은 부적절하다. 기본 개념있는 '범위 변수'이다.

    업데이트 3 : 난 그냥 다시 읽어 Celko 쓴 그는 무엇이 잘못되었는지 : 테이블 이름이 변경되지 않는! 지금 생각 :

  4. ==============================

    4.있는 그대로 키워드는 데이터베이스 테이블 또는 테이블 컬럼에 별명을 제공하는 것입니다. 당신의 예에서, 두 문장은 정확하지만 AS 절이 필요한 상황합니다 (AS 연산자 자체는 선택 사항입니다하지만), 예를 들어이있다

    있는 그대로 키워드는 데이터베이스 테이블 또는 테이블 컬럼에 별명을 제공하는 것입니다. 당신의 예에서, 두 문장은 정확하지만 AS 절이 필요한 상황합니다 (AS 연산자 자체는 선택 사항입니다하지만), 예를 들어이있다

    SELECT salary * 2 AS "Double salary" FROM employee;
    

    이 경우, Employee 테이블은 급여 열을 가지고 있으며, 우리는 단지 새 이름을 두 번 급여와 급여의 두 배를 원한다.

    미안 내 설명이 유효하지 않은 경우.

    귀하의 의견에 따라 업데이트, 당신은 바로 내 앞의 문이 유효입니다. 내가 생각할 수있는 유일한 이유는 AS 절은이 요즘에 통합 이전 버전과의 호환성을 위해 RDMS 됐어요하는 SQL 세계에서 오랫동안 존재하고있다한다는 것입니다 ..

  5. ==============================

    5.사용하지 않는 경우 사용은 더 분명하다 'SELECT *'(당신이 나가야 나쁜 습관이다) :

    사용하지 않는 경우 사용은 더 분명하다 'SELECT *'(당신이 나가야 나쁜 습관이다) :

    SELECT t1.colA, t2.colB, t3.colC FROM alongtablename AS t1, anotherlongtablename AS t2, yetanotherlongtablename AS t3 WHERE t1.colD = t2.colE...
    
  6. ==============================

    6.그것은 당신이 쿼리의 다른 부분에서 쉽게 해결할 수 있도록 기업에 대한 상관 관계 이름을 지정하는 공식적인 방법입니다.

    그것은 당신이 쿼리의 다른 부분에서 쉽게 해결할 수 있도록 기업에 대한 상관 관계 이름을 지정하는 공식적인 방법입니다.

  7. ==============================

    7.이 경우의 AS는 << 상관 이름> 일반적 테이블이라고도 별칭을 정의하는 ANSI SQL 92 항에 선택적 키워드이다.

    이 경우의 AS는 << 상관 이름> 일반적 테이블이라고도 별칭을 정의하는 ANSI SQL 92 항에 선택적 키워드이다.

    이 일반적으로 사용되는 데이터베이스의 숫자에 의해 지원되지 않는 가장 좋은 방법은 테이블 별명에 대한 AS 키워드를 사용하지 않는 것 같다.

  8. ==============================

    8.SQL의 초기에, 그것은 중복 된 열 이름을 처리하는 방법의 문제에 대한 해결책으로 선택되었다 (참고 아래 참조).

    SQL의 초기에, 그것은 중복 된 열 이름을 처리하는 방법의 문제에 대한 해결책으로 선택되었다 (참고 아래 참조).

    다른 답변에서 쿼리를 빌려 :

    SELECT P.ProductName,
           P.ProductRetailPrice,
           O.Quantity
      FROM Products AS P
           INNER JOIN Orders AS O ON O.ProductID = P.ProductID
     WHERE O.OrderID = 123456
    

    열 제품 ID (및 다른) 두 테이블에 공통이며 조인 조건 때문에 구문은 모두 기준을 요구는이 도트 자격 '모호성을 제공한다.

    물론, 더 나은 솔루션은 처음부터 중복 된 열 이름을 허용하지 않았을 것이 었습니다! 당신이 새로운 자연을 사용하는 경우 행복하게, 범위 변수 P와 O의 필요성이 사라집니다 JOIN 구문을 :

    SELECT ProductName, ProductRetailPrice, Quantity
      FROM Products NATURAL JOIN Orders
     WHERE OrderID = 123456
    

    그러나 왜 AS는 옵션 키워드입니다? 는 SQL 표준위원회의 회원과 개인적인 토론에서 내 기억은 (하나 조 셀코 또는 휴 다웬)는 자신의 기억이 (마이크로 소프트의는?)의 포함을 요구 한 업체의 제품 표준을 정의하는 시간과 다른 벤더의에서, 그이었다이었다 선택한 타협이 선택하는 것이었다 있도록 제품 (오라클은?)의 누락이 필요합니다. 나는이에 대한 인용이없는, 당신도 나를 믿거 나 말거나!

    관계형 모델, 십자가 제품의 초기에 그 제목 같은 이름의 두 가지 속성을 가진 관계를 생산하기 위해 등장 해체되지 않은 관계로 (또는 세타 조인 또는 동등은 조인); 그의 관계 미적분학에서이 문제에 커드의 솔루션 나중에 SQL에서 에뮬레이트 된 도트 자격의 사용했다 (나중에 자연이 손실없이 원시적이었다 가입 소위 것을 깨달았다 천연 교체 할 수 조인입니다 세타 조인 모든 및 심지어 십자가 제품입니다.)

    출처 : 비즈니스 시스템 (12), TTM 구현 자 '워크샵, 노섬 브리아 대학에서 주어진 프리젠 테이션의 슬라이드에 키가 주 2 ~ 3 2011년 6월 휴 다웬에 의해

  9. ==============================

    9.당신은 예를 들어 SQL 서버 2012의 쿼리 편집기를 사용하여 쿼리를 디자인 할 경우 당신이 얻을 것이다 :

    당신은 예를 들어 SQL 서버 2012의 쿼리 편집기를 사용하여 쿼리를 디자인 할 경우 당신이 얻을 것이다 :

      SELECT        e.EmployeeID, s.CompanyName, o.ShipName
    FROM            Employees AS e INNER JOIN
                             Orders AS o ON e.EmployeeID = o.EmployeeID INNER JOIN
                             Shippers AS s ON o.ShipVia = s.ShipperID
    WHERE        (s.CompanyName = 'Federal Shipping')
    

    그러나 AS는 다음과 같이 차이가되지 않습니다 제거 :

     SELECT        e.EmployeeID, s.CompanyName, o.ShipName
    FROM            Employees e INNER JOIN
                             Orders o ON e.EmployeeID = o.EmployeeID INNER JOIN
                             Shippers s ON o.ShipVia = s.ShipperID
    WHERE        (s.CompanyName = 'Federal Shipping')
    

    AS의 경우 사용에 불필요하지만, 많은 다른 장소에서이 필요하다.

  10. from https://stackoverflow.com/questions/4164653/whats-the-purpose-of-sql-keyword-as by cc-by-sa and MIT license