Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group