Questão de banco de dados
07/10/2011
0
Em um banco de dados relacional, as tabelas T1e T2 possuem
10 e 20 tuplas, respectivamente. Suponha que ambas possuam
um atributo A que representa uma grandeza quantitativa e que 5
tuplas de T2 não possuam valor informado para esse atributo.
Nesse caso, assinale a alternativa que corresponda ao resultado
produzido pelo seguinte comando SQL:
SELECT COUNT(d.A)
FROM T1 AS a, T1 AS b, T2 AS c, T2 AS d;
(A) 40000
(B) 30000
(C) 22500
(D) 4000
(E) 3000
Qual seria a resposta da questão acima?
10 e 20 tuplas, respectivamente. Suponha que ambas possuam
um atributo A que representa uma grandeza quantitativa e que 5
tuplas de T2 não possuam valor informado para esse atributo.
Nesse caso, assinale a alternativa que corresponda ao resultado
produzido pelo seguinte comando SQL:
SELECT COUNT(d.A)
FROM T1 AS a, T1 AS b, T2 AS c, T2 AS d;
(A) 40000
(B) 30000
(C) 22500
(D) 4000
(E) 3000
Qual seria a resposta da questão acima?
Jose Dias
Curtir tópico
+ 0
Responder
Posts
15/12/2011
Marco Pinheiro
Bom, Pelo que você informa acredito que a estrutura seria essa:
create table t1 (a int)
create table t2 (a int)
insert into t1 values (1)
insert into t1 values (2)
insert into t1 values (3)
insert into t1 values (4)
insert into t1 values (5)
insert into t1 values (6)
insert into t1 values (7)
insert into t1 values (8)
insert into t1 values (9)
insert into t1 values (10)
insert into t2 values (1)
insert into t2 values (2)
insert into t2 values (3)
insert into t2 values (4)
insert into t2 values (5)
insert into t2 values (6)
insert into t2 values (7)
insert into t2 values (8)
insert into t2 values (9)
insert into t2 values (10)
insert into t2 values (11)
insert into t2 values (12)
insert into t2 values (13)
insert into t2 values (14)
insert into t2 values (15)
insert into t2 values (null)
insert into t2 values (null)
insert into t2 values (null)
insert into t2 values (null)
insert into t2 values (null)
Fazendo a consulta:
SELECT COUNT(d.a)
FROM T1 AS a, T1 AS b, T2 AS c, T2 AS d
Temos como resultado 30000 linhas.
O grande detalhe está em SELECT COUNT(d.a). Se você perceber, o campo está sendo referenciado pela tabela D.
Então o SQL faz a seguinte conta:
FROM T1 AS a, T1 AS b , T2 AS c, T2 AS d
10 linhas , 10 linhas, 20 linhas, 15 linhas, assim: 10*10*20*15 = 30000
Se você mudar a tabela no COUNT terá outro resultado. Pois quando o SQL faz este tipo de plano cartesiano ele ignora os valores nulos da tabela selecionada, por isso os 15 registros ao invés de 20.
Para um outro entendimento considere esta consulta:
SELECT *
FROM T1 AS a, T1 AS b, T2 AS c, T2 AS d
O SQL trará 40000, porque ele faz: 10*10*20*20
Agora considere a consulta:
SELECT *
FROM T1 AS a, T1 AS b, T2 AS c, T2 AS d
where d.a is null
Você terá o resultado de 10000 linhas. Em outras palavras, ele faz 40000 - 10000 linhas nulas = 30000.
Att.,
Marco.
create table t1 (a int)
create table t2 (a int)
insert into t1 values (1)
insert into t1 values (2)
insert into t1 values (3)
insert into t1 values (4)
insert into t1 values (5)
insert into t1 values (6)
insert into t1 values (7)
insert into t1 values (8)
insert into t1 values (9)
insert into t1 values (10)
insert into t2 values (1)
insert into t2 values (2)
insert into t2 values (3)
insert into t2 values (4)
insert into t2 values (5)
insert into t2 values (6)
insert into t2 values (7)
insert into t2 values (8)
insert into t2 values (9)
insert into t2 values (10)
insert into t2 values (11)
insert into t2 values (12)
insert into t2 values (13)
insert into t2 values (14)
insert into t2 values (15)
insert into t2 values (null)
insert into t2 values (null)
insert into t2 values (null)
insert into t2 values (null)
insert into t2 values (null)
Fazendo a consulta:
SELECT COUNT(d.a)
FROM T1 AS a, T1 AS b, T2 AS c, T2 AS d
Temos como resultado 30000 linhas.
O grande detalhe está em SELECT COUNT(d.a). Se você perceber, o campo está sendo referenciado pela tabela D.
Então o SQL faz a seguinte conta:
FROM T1 AS a, T1 AS b , T2 AS c, T2 AS d
10 linhas , 10 linhas, 20 linhas, 15 linhas, assim: 10*10*20*15 = 30000
Se você mudar a tabela no COUNT terá outro resultado. Pois quando o SQL faz este tipo de plano cartesiano ele ignora os valores nulos da tabela selecionada, por isso os 15 registros ao invés de 20.
Para um outro entendimento considere esta consulta:
SELECT *
FROM T1 AS a, T1 AS b, T2 AS c, T2 AS d
O SQL trará 40000, porque ele faz: 10*10*20*20
Agora considere a consulta:
SELECT *
FROM T1 AS a, T1 AS b, T2 AS c, T2 AS d
where d.a is null
Você terá o resultado de 10000 linhas. Em outras palavras, ele faz 40000 - 10000 linhas nulas = 30000.
Att.,
Marco.
Responder
Clique aqui para fazer login e interagir na Comunidade :)