[SQL] SELECT COUNT (*);
SQLSELECT COUNT (*);
나는 두 개의 테이블 (표 1, 표 2)와 데이터베이스, database1을 보유하고 있습니다.
표 1에서 3 행과 표 2에서 2 개 행이 있습니다. 지금은 다음과 같은 SQL은 COUNT (*)를 선택 쿼리 실행하면, database1에서, 출력은 "1"이다.
합니까 누구는 아이디어, 어떤이 "1"의미를 가지고?
두 테이블의 정의는 다음과 같다.
CREATE TABLE Table1
(
ID INT PRIMARY KEY,
NAME NVARCHAR(20)
)
CREATE TABLE Table2
(
ID INT PRIMARY KEY,
NAME NVARCHAR(20)
)
해결법
-
==============================
1.일반적으로 모든 선택은 FROM [컬럼에 컬럼 열에 스칼라 연산 그룹화 계산 또는 스칼라 연산] 형태의 SELECT들은 [테이블 또는 테이블 등 조인]
일반적으로 모든 선택은 FROM [컬럼에 컬럼 열에 스칼라 연산 그룹화 계산 또는 스칼라 연산] 형태의 SELECT들은 [테이블 또는 테이블 등 조인]
이 일반 스칼라 계산을 할 수 있기 때문에 우리는 SomeTable에서 선택 1과 같이 + 1을 할 수 있으며 테이블 SomeTable의 모든 행에 대한 값 2 레코드를 반환합니다.
이제, 우리는 모든 테이블에 대해 상관하지 않은 경우, 그러나 우리의 스칼라는 우리가 SELECT 1 + 1이이 표준에 의해 허용되지 않습니다 같은 것을 수행 할 수 있습니다 계산하고 싶어하지만, 유용하고 대부분의 데이터베이스는 그것을 허용 (가, 최근에 변경된 적어도 그것은에 사용하지 않는 오라클은하지 않습니다).
따라서 이러한 노출에 select 그들이 하나의 행없고 열이있는 테이블을 지정한에서 절 한 것처럼 처리 (물론 불가능하지만 트릭을 수행)하고 있습니다. 따라서, 1 + 1 + 1 1 2 값을 가진 단일 컬럼 단일 행을 반환 ImaginaryTableWithOneRow 화상에서 선택하게 선택한다.
우리가 주로 우리는 단지 노출에 select 결과를주고, 심지어 하나 개의 행을 반환하는 선택 어떤 하나 열 일이 있어야한다는 사실에 대해 생각하지 않는다는 사실에 익숙해 이것에 대해 생각하지 않습니다.
SELECT COUNT을함으로써 (*) 당신은 어떤 과정을 반환 하나의 ImaginaryTableWithOneRow에서 선택의 COUNT (*)에 해당했다.
-
==============================
2.비슷한 맥락에서 다음이 또한 결과를 반환합니다.
비슷한 맥락에서 다음이 또한 결과를 반환합니다.
SELECT 'test' WHERE EXISTS (SELECT *)
(이 연결 항목에서) 그 동작에 대한 설명은 또한 귀하의 질문에 적용됩니다.
-
==============================
3.테이블을 지정하지 않고 SELECT COUNT (*)를 실행 한 때문이다.
테이블을 지정하지 않고 SELECT COUNT (*)를 실행 한 때문이다.
카운트 함수는 지정된 데이터 세트의 행 수를 반환합니다. 따라서 COUNT (*) Oracle과 같은 SQL의 일부 버전에서는 테이블을 지정하거나 (1을 반환합니다 - 당신이 선택할 수있는 테이블을 지정하지 않은 경우, 하나의 선택은 오직 하나의 행을 반환합니다 유사한 데이터베이스 객체, 오라클 특정 테이블이 요구되지 않을 때 선택 될 수있다 (DUAL 불림) 더미 테이블을 포함한다).
-
==============================
4.당신은 일반적으로에 대한 쿼리에 테이블을 지정하지 않고 SELECT COUNT (*)를 실행하지 않을 것입니다. 데이터베이스 서버는 아마 당신이 조회되는 기본 시스템 테이블을 기반으로 "1"의 수를주고있다.
당신은 일반적으로에 대한 쿼리에 테이블을 지정하지 않고 SELECT COUNT (*)를 실행하지 않을 것입니다. 데이터베이스 서버는 아마 당신이 조회되는 기본 시스템 테이블을 기반으로 "1"의 수를주고있다.
사용해보십시오
select count(*) from Table1
테이블 이름이 없이는 이해되지 않는다.
-
==============================
5.테이블 이름없이 항상 1이 있는지 데이터베이스를 반환 ....
테이블 이름없이 항상 1이 있는지 데이터베이스를 반환 ....
-
==============================
6.이 태그 SQL 서버이기 때문에, MSDN은 말한다.
이 태그 SQL 서버이기 때문에, MSDN은 말한다.
또한,
따라서, 기본 (가정)에서 COUNT를 할 수있는 테이블을 제공하지 않았으므로이 1을 반환한다는 것입니다.
-
==============================
7.COUNT 함수는 결과 행의 수를 반환합니다. 당신이 어떤 테이블을 지정하지 않으면 기본적으로 1을 반환합니다. 즉., COUNT (*), COUNT (1), COUNT (2), ... 항상 1을 반환합니다.
COUNT 함수는 결과 행의 수를 반환합니다. 당신이 어떤 테이블을 지정하지 않으면 기본적으로 1을 반환합니다. 즉., COUNT (*), COUNT (1), COUNT (2), ... 항상 1을 반환합니다.
-
==============================
8.
Select *
당신은 아무것도를 필터링하지 이후 절에서 "이 우주에서 모두 선택"입니다없이. 귀하의 경우에는, 당신은 "얼마나 많은 우주를?"묻는 이것은 내가 가르쳐 얼마나 정확하게이다. 나는 첫날에 보드에 작성합니다, * 선택하고 무엇을 의미하는지 묻는다. 답변 : 저에게 세계를주십시오. 그리고 거기에서 나는 의미있는까지 우주를 필터링하는 방법을 가르 칠 것입니다.
나는 내가 더 재미있게 만들하지만 여전히 다시 진정한 해답을 제공 할 선택 카운트 (*), 생각하지 인정해야합니다. 우리는 하나의 세계가있다. 스티븐 호킹을 묻지 않고, SQL은 1 맞설해야합니다.
쿼리의 결과는 정확합니다.
from https://stackoverflow.com/questions/8398772/select-count by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 중첩 된 리피터 및 SqlDataSource와 매개 변수 (0) | 2020.07.16 |
---|---|
[SQL] SQL 문에서 하위 쿼리 'IN'을 사용하여 (0) | 2020.07.16 |
[SQL] 쉼표로 SQL 쿼리 여러 테이블, 여러 조인과 및 열 필드로 구분 된 목록 (0) | 2020.07.16 |
[SQL] 어떻게 선택에 ORA-01427 단일 행 부질의 반환을 둘 이상의 행을 해결하기 위해? (0) | 2020.07.16 |
[SQL] 왜 예외는 "데이터 매핑 오류의 [SQL0802] 데이터 변환을"는 무엇입니까? (0) | 2020.07.16 |