
La FAQ de PostgreSQLConsultez toutes les FAQ
Nombre d'auteurs : 7, nombre de questions : 51, dernière mise à jour : 8 juillet 2009
Sommaire→Syntaxe SQL et structure de données→Instructions SQL particulières- Comment ne retourner que les n premières lignes renvoyées par une requête SQL ?
- Comment sélectionner du m-iéme au n-iéme enregistrements ?
- Comment récupérer le dernier enregistrement d'une requête ?
- Est-il possible de faire un INSERT à partir du résultat d'un SELECT ?
- Comment utiliser la valeur par défaut d'un champ ?
- Comment créer une constante ?
L'instruction LIMIT n placée en fin de requête permet de ne renvoyer que les n premières lignes :
SELECT * FROM matable LIMIT 100
--> On obtient en retour que les 100 premiers enregistrements.
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.
SELECT * FROM matable LIMIT 100 OFFSET 10
--> On obtient en retour que les 100 enregistrements à partir du 10ème.
Une possibilitée serait de faire comme ceci :
SELECT * FROM matable ORDER BY maclefprimaire DESC LIMIT 1;
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
INSERT INTO matable2 SELECT * FROM matable1;
2eme cas : matable2 >> matable3 quand id>3
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.
Supposons que l'on ai une table comme ceci :
CREATE TABLE a
(
champ1 int2 DEFAULT 99,
champ2 int2 DEFAULT 33
);
On insert des valeurs :
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 :
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 :
UPDATE a SET champ1 = default, champ2 = default;
SELECT * FROM a;
-- champ1 champ2
-- -------------------
-- 99 33
-- 99 33
PostgreSQL ne dispose pas de cette fonctionnalité, cependant il existe une parade : utiliser une fonction
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 :
INSERT INTO matable (unchamp,uautrechamp) VALUES (152,maconstante());



