La FAQ de PostgreSQLConsultez toutes les FAQ

Nombre d'auteurs : 7, nombre de questions : 51, dernière mise à jour : 8 juillet 2009 

 
OuvrirSommaireSyntaxe SQL et structure de donnéesInstructions SQL particulières

L'instruction LIMIT n placée en fin de requête permet de ne renvoyer que les n premières lignes :

 
Sélectionnez

SELECT * FROM matable LIMIT 100

--> On obtient en retour que les 100 premiers enregistrements.

Créé le 2005-05-13  par Damien Griessinger (HpAlpha)

L'instruction LIMIT n placée en fin de requête permet de ne renvoyer que les n premières lignes,
L'instruction OFFSET m permet quand à elle de spécifier à partir de quel enregistrement commencer.

 
Sélectionnez

SELECT * FROM matable LIMIT 100 OFFSET 10

--> On obtient en retour que les 100 enregistrements à partir du 10ème.

Créé le 2005-05-13  par Damien Griessinger (HpAlpha)

Une possibilitée serait de faire comme ceci :

 
Sélectionnez

SELECT * FROM matable ORDER BY maclefprimaire DESC LIMIT 1;
Créé le 2005-05-13  par Damien Griessinger (HpAlpha)

Bien sûr que l'on peut, et heureusement !

Considérons 3 tables

matable1 :
id int2,
nom varchar(32);

matable2 identique à matable1

matable 3 :
idauto serial
idautre int2
nom varchar(32)
prenom varchar(32)


1er cas : matable1 >> matable2

 
Sélectionnez

INSERT INTO matable2 SELECT * FROM matable1;


2eme cas : matable2 >> matable3 quand id>3

 
Sélectionnez

INSERT INTO matable3 (idautre,nom) SELECT id, nom FROM matable2 WHERE id>3 


On peut aller beaucoup plus loin, en utilisant les jointures, sous requete, etc.. il faut juste mettre devant INSERT INTO.... et penser aux champs de destination.

Créé le 2005-05-13  par Damien Griessinger (HpAlpha)

Supposons que l'on ai une table comme ceci :

 
Sélectionnez

CREATE TABLE a
(
  champ1 int2 DEFAULT 99,
  champ2 int2 DEFAULT 33
);


On insert des valeurs :

 
Sélectionnez

INSERT INTO a VALUES (10,72);
SELECT * FROM a;
--    champ1     champ2
--   -------------------
--     10          72

On souhaite maintenant inserrer les valeurs par défaut, pour cela on utilise le mot clef default :

 
Sélectionnez

INSERT INTO a VALUES (default,default);
SELECT * FROM a;
--    champ1     champ2
--   -------------------
--     10          72
--     99          33  

De la même facon, on peut remettre toutes les valeurs de la table à la valeur par défaut :

 
Sélectionnez

UPDATE a SET champ1 = default, champ2 = default;
SELECT * FROM a;
--    champ1     champ2
--   -------------------
--     99          33
--     99          33  
Créé le 2005-05-13  par Damien Griessinger (HpAlpha)

PostgreSQL ne dispose pas de cette fonctionnalité, cependant il existe une parade : utiliser une fonction

 
Sélectionnez

CREATE OR REPLACE FUNCTION "maconstante" () RETURNS integer AS
$body$
/* retourne la constante 45445 */
SELECT 45445;
$body$
LANGUAGE 'sql' IMMUTABLE CALLED ON NULL INPUT SECURITY INVOKER;

La fonction est IMMUTABLE car elle renverra toujours le même résultat Cette pseudo constante peut etre utilisée comme une valeur :

 
Sélectionnez

INSERT INTO matable (unchamp,uautrechamp) VALUES (152,maconstante()); 
Créé le 2005-08-20  par Damien Griessinger (HpAlpha)
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée.