2015-01-23 8 views
0

Oracle DBMS에서 deptno 및 salary 속성을 갖는 employee 테이블을 작성했습니다.오라클의 SQL 쿼리에서 HAVING 절과 함께 1과 2의 의미는 무엇입니까?

SELECT deptno, SUM(salary) 

FROM emp 
GROUP BY deptno 
HAVING 1 > 2 ; 

내가 1과 2가 SELECT 문에서 열 "DEPTNO"와 "SUM (급여)"을 언급하는 생각 : 나는이 쿼리를 실행. 그래서 나는 "DEPTNO는"> "SUM (급여)"테이블에 다음과 같이 기록을 넣어 :

deptno   salary 
1001   5000 
1002   1000 

출력은 내가 출력으로 두 번째 행을 기다리고 있었다 을 "어떤 행을 찾을 수 없습니다"입니다. 이유를 친절하게 설명하십시오.

+1

1>이 수행 할 수 있으며, 난 당신이 당신이 믿을 수 있도록 설명서를 참조 할 수 – radar

+0

을 알고 지금까지 rows..as를 반환하지 않습니다 싶지? –

+0

우리가 1,2를 쓰면 ORDER BY에서 SELECT 절의 열을 참조했습니다. 그래서 나는 그것이 또한 가질 수 있다고 생각했습니다. –

답변

4

1 및 2는 숫자입니다. 1 > 2은 항상 false를 반환합니다. HAVING 1 > 2은 데이터베이스의 행 수가 아무리 많아도 항상 행을 반환하지 않음을 의미합니다. 그것은 마치 당신이 while(false) { ... }을 실행하고있는 것과 같습니다.

ORDER BY에서 1 또는 2를 사용하여 주문할 열 번호를 지정할 수 있습니다. (http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj13658.html), HAVING과 함께는 아닙니다.

ORDER BY에서 열 번호를 사용할 수 있으므로 사용해서는 안됩니다. 그것은 좋은 습관이 아닙니다. 선택한 열의 개수를 추가하고 제거한다고 가정 해 보겠습니다. 주문하려는 필드의 위치가 조정됩니다. 이름이나 별칭으로 지정하는 것이 좋습니다. 다른 개발자가 코드를 읽을 때 더 읽기 쉽습니다.

+0

답변을 주셔서 감사합니다. –

+0

@invisal 저에게 의미가 있습니다!, 나는 그것이 오류를 던질 것이라고 생각했을 것입니다. SQL Server에서이 작업을 수행 할 수 있습니까? 언제 이것을하고 싶습니까? –

0

여기서 1 & 2는 열 이름이 아닌 정수로 참조됩니다. 그러므로 항상 거짓 값을줍니다. 당신이 항상 false로 대피해야

Select deptno,sum(salary) 
From emp 
Group by deptno 
Having deptno>sum(salary);