2011-12-06 2 views
7

데이터베이스가 database1이고 두 테이블 (Table 1, Table2)이 있습니다.SELECT COUNT (*);

Table1에는 3 개의 행이 있고 Table2에는 2 개의 행이 있습니다. 이제 다음 SQL 쿼리 SELECT COUNT(*);database1에 실행하면 출력은 "1"입니다.

누구나 아이디어가 있습니까? "1"은 무엇을 의미합니까?

두 테이블의 정의는 다음과 같습니다. 테이블 이름이없는

CREATE TABLE Table1 
(
ID INT PRIMARY KEY, 
NAME NVARCHAR(20) 
) 

CREATE TABLE Table2 
(
ID INT PRIMARY KEY, 
NAME NVARCHAR(20) 
) 
+0

정확한 쿼리는 무엇입니까? – Reactormonk

+0

나는 테이블 이름이없는'SELECT COUNT (*)'이상을 생각하지 않는다. 그것은 항상 1 – Matten

+0

안녕하세요, 쿼리는 SQL 쿼리 "Select Count (*)"를 실행하면 출력이 1입니다.이 1은 무엇을 의미합니까? 쿼리에 지정된 테이블 이름이 없습니다. – IsmailBaig

답변

0

는 항상 테이블을 지정하지 않고 select count(*)을 실행 한 때문입니다 (1) 그 여부를 데이터베이스 ....

2

을 반환합니다.

count 함수는 지정된 데이터 집합의 행 수를 반환합니다. 선택할 테이블을 지정하지 않으면 단일 선택 만 단일 행을 반환합니다. 따라서 count(*)은 1을 반환합니다. (오라클과 같은 일부 SQL 버전에서는 을 지정하여 테이블 또는 유사 항목을 지정합니다. 특정 테이블이 필요하지 않을 때 선택할 수있는 더미 테이블 (DUAL이라고 함)을 포함합니다.

1

쿼리 할 테이블을 지정하지 않으면 일반적으로 select count (*)를 실행하지 않습니다. 데이터베이스 서버는 쿼리하는 기본 시스템 테이블을 기반으로 "1"을 제공합니다. 그것은 아무 의미가없는 테이블 이름없이

select count(*) from Table1 

를 사용

보십시오.

0

이 태그는 SQL 서버이므로 태그는 MSDN입니다.

항상 COUNT는 int 데이터 유형 값을 반환합니다. 또한

,

COUNT (*)는 그룹의 항목 수를 반환한다. 여기에는 NULL 값과 중복이 포함됩니다. 기본 (가정)에서 COUNT을 할 수있는 테이블을 제공하지 않았기 때문에

따라서,이 1을 반환한다는 것입니다. 이것은 우리가 SELECT 1 + 1 FROM SomeTable 같은 것을 할 수있는 일반 스칼라 연산을 허용하고 테이블 SomeTable의 모든 행에 대한 값 2 레코드를 반환하기 때문에

+0

0이 아닌 1을 반환해야하는 이유가 있습니까? –

+1

@LukeGirvin 예, 베어 행은 하나의 행이있는 테이블에 대해 실행되는 것처럼 동작합니다. 내 대답 좀 봐. –

6

는 일반적으로 모든 선택은 양식 SELECT [columns, scalar computations on columns, grouped computations on columns, or scalar computations] FROM [table or joins of tables, etc]

의이다.

이제 테이블을 신경 쓰지 않고 스칼라 계산을 원한다면 SELECT 1 + 1과 같은 작업을 수행 할 수 있습니다. 이것은 표준에 의해 허용되지 않지만 유용하며 대부분의 데이터베이스에서 허용됩니다 (오라클은 최근에 변경되지 않는 이상 사용하지 않습니다).

따라서 그러한 맨손 SELECT는 하나의 행과 열이없는 테이블을 지정하는 것처럼 from 절이있는 것처럼 처리됩니다 (당연히 불가능하지만 트릭을 수행함). 따라서 SELECT 1 + 1은 값을 가진 단일 열이있는 단일 행을 반환하는 SELECT 1 + 1 FROM ImaginaryTableWithOneRow이됩니다.

대개 우리는 이것에 대해 생각하지 않습니다. 베어드 SELECT가 결과를 제공하고 하나의 행을 반환하기 위해 선택된 한 행만 있어야한다는 사실에 익숙하지 않습니다. 당신은 물론 다음도 결과를 반환 비슷한 맥락 1.

6

를 반환 SELECT COUNT(*) FROM ImaginaryTableWithOneRow에 해당했다 SELECT COUNT(*) 일에서

.

SELECT 'test' 
WHERE EXISTS (SELECT *) 

(this Connect item에서) 그 동작에 대한 설명은 또한 귀하의 질문에 적용됩니다. ANSI SQL에서

, FROM 절없이 SELECT 문은 허용되지 않습니다 - 당신이 테이블 소스를 지정해야합니다. 따라서 " SELECT 'test' WHERE EXISTS(SELECT *)"문은 구문 오류를 제공해야합니다. 올바른 동작입니다.

SQL Server 구현과 관련하여 FROM 절은 선택 사항이며 항상 이러한 방식으로 작동합니다. 따라서 "SELECT 1"또는 "SELECT @v"등의 작업을 테이블을 필요로하지 않고 수행 할 수 있습니다. 다른 데이터베이스 시스템에서 "SELECT 1 FROM dual;"또는 "SELECT @v FROM dual;"같은 같은 SELECT 문을 수행하는 데 사용됩니다 하나 행과 "DUAL"라는 더미 테이블이있다. 이제 EXISTS 절 ( )으로 이동하면 프로젝트 목록은 쿼리 및 SELECT *이 하위 쿼리에서 유효하다는 구문 또는 결과와 관련하여 중요하지 않습니다. 이 숫자를 과 같이 사용하면 SELECT없이 FROM이 없으므로 을 볼 수 있습니다. 문제를 해결할 수는 있지만 수행하는 데 많은 가치가 없으며 기존 응용 프로그램 코드가 손상 될 수 있습니다.

0

COUNT 함수는 결과 행 수를 반환합니다. 테이블을 지정하지 않으면 기본적으로 1이 반환됩니다. 즉, COUNT(*), COUNT(1), COUNT(2), ...은 항상 1을 반환합니다.

-1
Select * 

from 절없이 "아무것도 선택하지 않았으므로 유니버스에서 모두 선택"입니다. 귀하의 경우, "얼마나 많은 우주?" 정확하게 가르쳐주는 방법입니다. 첫날 보드에 글을 쓰겠습니다. *를 선택하고 그것이 의미하는 바를 물어보십시오. 답변 : 세상을주세요. 그리고 거기에서 나는 우주를 의미있는 것으로 필터링하는 법을 가르쳐 줄 것입니다.

셀렉트 카운트 (*)를 생각해 본 적이 없지만 재미있을 지 모르지만 여전히 정확한 답변을 제공합니다. 우리에게는 단 하나의 세상이 있습니다.
스티븐 호킹 (Steven Hawking)과상의하지 않고도 SQL은 단 1과 겨뤄야합니다.

쿼리 결과가 정확합니다.