Re: HELP

From: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
Cc: Jaime Casanova <systemguards(at)gmail(dot)com>, Carlos Alberto Mÿffffffffffe1rquez Rey <carlos_marquez_rey(at)yahoo(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: HELP
Date: 2005-03-31 09:04:45
Message-ID: 463a53a4050331010416c8628d@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Wed, 30 Mar 2005 17:01:31 -0400, Alvaro Herrera
<alvherre(at)dcc(dot)uchile(dot)cl> wrote:
> On Wed, Mar 30, 2005 at 10:53:14PM +0200, Juanky Moral wrote:
> > Los valores NULL no son tenidos en cuenta por los operadores SQL
> > (lógicos, aritméticos, de comparación, orden, etc).
>
> ????

El valor NULL ha de entenderse como 'desconocimiento de información
almacenada', por lo que no puede utilizarse ese valor con ningún
operador: el resultado siempre se evalúa a indefinido. La única forma
posible de trabajar con valores NULL, es a través del predicado IS
[NOT] NULL (como tú has hecho), que devuelve un tipo booleano en
función de si el valor contenido en el atributo es nulo o no.
Ejemplos:

Esto no funcionará nunca:
gnosis=# select * from test where valor = null;
clave | valor
-------+-------
(0 rows)

Esto sí:
gnosis=# select * from test where valor is null;
clave | valor
-------+-------
4 |
(1 row)

- Operador aritmético:
gnosis=# select 1 + null;
?column?
----------

(1 row)

- Operador de concatenación:
gnosis=# select 'hola' || null;
?column?
----------

(1 row)

- Operador de ordenación:
gnosis=# select 10 > null;
?column?
----------

(1 row)

- Operador lógico:
gnosis=# select true and null;
?column?
----------

(1 row)

Por este motivo, y para poder operar con valores NULL cuando
realizamos una consulta a una BD en la que utilizamos operadores, los
posibles valores NULL que pudieran contener los atributos involucrados
no son tenidos en cuenta. Los valores NULL <em>son eliminados</em>
antes de realizar los cálculos. (Esto es simplemente lo que quería
decir).

Ejemplos:
Sea la tabla 'test' con dos atributos (clave, valor) y un registro
(clave 4) cuyo valor es nulo:
gnosis=# select * from test;
clave | valor
-------+-------
1 | 10
2 | 20
3 | 30
4 |
(4 rows)

- consulta usando un operado aritmético:
gnosis=# select clave, valor + 1 from test;
clave | ?column?
-------+----------
1 | 11
2 | 21
3 | 31
4 |
(4 rows)

- consulta de valores agregados:
gnosis=# select SUM(valor) from test;
sum
-----
60
(1 row)

- Operador de orden:
gnosis=# select * from test where valor > 10;
clave | valor
-------+-------
2 | 20
3 | 30
(2 rows)

gnosis=# select * from test order by valor desc;
clave | valor
-------+-------
4 |
3 | 30
2 | 20
1 | 10
(4 rows)

Espero haberme explicado mejor esta vez.
Un saludo.

>
> alvherre=# select null is null;
> ?column?
> ----------
> t
> (1 fila)
>
> alvherre=# create table a (a int);
> CREATE TABLE
> alvherre=# insert into a values (2);
> INSERT 17244 1
> alvherre=# insert into a values (1);
> INSERT 17245 1
> alvherre=# insert into a values (null);
> INSERT 17246 1
> alvherre=# select * from a;
> a
> ---
> 2
> 1
>
> (3 filas)
>
> alvherre=# select * from a order by a is null, a;
> a
> ---
> 1
> 2
>
> (3 filas)
>
> alvherre=# select * from a order by a is not null, a;
> a
> ---
>
> 1
> 2
> (3 filas)
>
> --
> Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
> "Everybody understands Mickey Mouse. Few understand Hermann Hesse.
> Hardly anybody understands Einstein. And nobody understands Emperor Norton."
>

--
Juanky Moral
"Tendré que moverme más rápido: el horizonte brilla eléctrico."
(Horizonte Eléctrico - www.losdeltonos.com )

In response to

  • Re: HELP at 2005-03-30 21:01:31 from Alvaro Herrera

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Patricio Muñoz 2005-03-31 12:48:34 Re: pl/perl
Previous Message Jaime Casanova 2005-03-31 02:40:58 Re: error instalacion pgsql 8 en xp pro