Précédent   Forum du club des développeurs et IT Pro > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 02/05/2005, 17h29   #1
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur SQLServer/Access

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Par défaut Création de la FAQ SQL !!! (Voulez-vous participer ?)

Bonjour à tous.

Nous avons l'ambition de fournir aux visiteurs une FAQ sur le langage SQL.

Ceci demande beaucoup de temps.

Voudriez-vous nous épauler ?

Pour cela, nous vous proposons de poster à la suite de ce message, toute question qui vous parait récurrente ou importante, ainsi que la réponse que vous apporteriez.

Merci beaucoup !

Si tout le monde participe un petit peu, il est probable que nous ayons un produit de qualité à proposer pour tous, assez rapidement.

Cordialement,
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2005, 18h47   #2
trotters213
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 571
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 571
Points : 3 004
Points : 3 004

J'ouvre le bal
Quelques questions qui reviennent assez souvent :

Citation:
Q Comment faire pour exécuter une requête contenant des caractères spéciaux (côtes, doubles côtes,...) ?
R En doublant le caractère en question :
Code :
1
2
INSERT INTO t_table 
VALUES ('Aujourd''hui')

Citation:
Q Comment sélectionner les X "premiers" enregistrements :
R
Code :
1
2
SELECT TOP X t_champ 
FROM t_table
Citation:
Q Comment sélectionner les X "derniers" enregistrements :
R
Code :
1
2
3
SELECT TOP X t_champ 
FROM t_table 
ORDER BY t_champ DESC
Citation:
Q Comment sélectionner entre le X° et le Y° enregistrement (X<Y) :
R
Code :
1
2
3
4
5
6
7
SELECT * 
FROM (SELECT TOP Y-X * 
      FROM (SELECT TOP Y * 
            FROM t_table
            ORDER BY t_id) AS t1 
      ORDER BY t_id DESC) AS t2 
ORDER BY t_id
Citation:
Q Les équivalents pour trouver les limites ?
R
Code :
1
2
3
4
5
Access et SQL Server : TOP
MySQL et PostGreSQL : LIMIT
Interbases : ROWS
Paradox : aucun 
Oracle : ROWNUM -- corrigé par fadace
Cf : http://sqlpro.developpez.com/cours/s...onctions/#L1.8
Citation:
Q Je suis sous MS SQL Server et la taille de mon fichier log n'arrête pas d'augmenter devenant bien plus grande que la taille de ma base , pourquoi et comment faire pour réduire cette taille ?
R Ce fichier conserve toutes les opérations entreprises sur la base (INSERT, DELETE, UPDATE,...) ce qui le fait grandir constamment.
Pour palier à ce problème, vous pouvez utiliser les requêtes suivantes qui tendront à limiter la taille du fichier log :
Code :
1
2
3
DBCC SHRINKFILE (votre_base_Log, taille_maximale_voulue_pour_le_fichier_log)
BACKUP LOG votre_base  WITH TRUNCATE_ONLY
DBCC SHRINKFILE (votre_base_Log, taille_maximale_voulue_pour_le_fichier_log)
Attention :
1. Il faut que le mode de recouvrement de la base soit en mode "Complet" (dans l'Entreprise Manager : Propriétés -> Option -> Récupération -> Modèle -> Complet).
2. Un fichier log trop petit peut entrainer une forte baisse des performances voir bloquer le serveur.
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2005, 12h50   #3
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur SQLServer/Access

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE


merci beaucoup !
Au suivant !!!!
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2005, 15h19   #4
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 868
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 868
Points : 11 718
Points : 11 718
Comment mettre à jour une table à partir des données d'une autre table ?
Code :
1
2
3
4
UPDATE	MAJ 
SET		CHAMP_CIBLE		= SRC.CHAMP_SOURCE
FROM	TABLE_SOURCE	AS SRC
WHERE	MAJ.CLE_JOINTURE = SRC.CLE_JOINTURE
Comment mettre à jour une table à partir des données d'une requête ?
Code :
1
2
3
4
5
6
7
8
9
UPDATE	MAJ
SET		CHAMP_CIBLE		= SRC.CHAMP_SOURCE
FROM	TABLE_CIBLE		AS MAJ
	,	(	SELECT 	CLE_JOINTURE
				,	count(*)	AS CHAMP_SOURCE	-- exemple...
   			FROM	TABLE_SOURCE
   			GROUP BY CLE_JOINTURE
		)	AS SRC
WHERE 	MAJ.CLE_JOINTURE = SRC.CLE_JOINTURE
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2005, 15h20   #5
Tchinkatchuk
Membre habitué
 
Avatar de Tchinkatchuk
 
Homme Sylvain Gourvil
Freelance en développement Web
Inscription : mars 2005
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Gourvil
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Freelance en développement Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2005
Messages : 248
Points : 147
Points : 147
Q Comment supprimer des n-uplets en cascade ?
R Juste lister les différentes possibilités afin d'aider à la recherche
1. ON DELETE ...
2. Batch de nuit
3. Procedures stockées
...

C'est un probleme que je me posais et c'est pas facile de trouver toutes les différents façons quand on y connait rien !
Mais je comprendrais que ca ne soit pas approprié
Tchinkatchuk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2005, 08h41   #6
argoet
Membre éprouvé
 
Avatar de argoet
 
Inscription : mai 2002
Messages : 543
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 543
Points : 473
Points : 473
Une petite FAQ sur les comparaisons de champs

comparer ce qui est comparable (Surtout sur les dates)
beaucoup de post sur le sujet
__________________
Signé : Capitaine Jean-Luc Picard
argoet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2005, 10h20   #7
trotters213
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 571
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 571
Points : 3 004
Points : 3 004
Citation:
Q Comment utiliser les booléens quand le type n'existe pas ?
R En utilisant BIT(1) ou BYTE (1).
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2005, 15h14   #8
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur SQLServer/Access

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Citation:
Envoyé par Tchinkatchuk
Q Comment supprimer des n-uplets en cascade ?
R Juste lister les différentes possibilités afin d'aider à la recherche
1. ON DELETE ...
2. Batch de nuit
3. Procedures stockées
...

C'est un probleme que je me posais et c'est pas facile de trouver toutes les différents façons quand on y connait rien !
Mais je comprendrais que ca ne soit pas approprié
je n'ai pas très bien compris la solution que tu apportes à la question.
tu pourrais reformuler s'il te plait ?
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2005, 15h15   #9
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur SQLServer/Access

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Citation:
Envoyé par argoet
Une petite FAQ sur les comparaisons de champs

comparer ce qui est comparable (Surtout sur les dates)
beaucoup de post sur le sujet
c'est quoi la question ???
Et quelle est la réponse ???
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2005, 15h21   #10
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur SQLServer/Access

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Bon, sinon, je suis en train de peaufiner la première version de cette FAQ.
Actuellement :
2 auteurs et 8 Q/R
bravo pour ceux qui ont participé.
mais à ce rythme, on n'est pas près de rattraper la FAQ Access (avec ses 607 Q/R)

Je fais quelques demandes en interne pour pouvoir publier, et je vous donne le lien, dans la foulée, pour que vous voyez ce que cela donne

Allez !
Courage !

On reprend à partir de là

__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2005, 16h24   #11
argoet
Membre éprouvé
 
Avatar de argoet
 
Inscription : mai 2002
Messages : 543
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 543
Points : 473
Points : 473
Comment Ajouter des jours / Heures / Minutes / Secondes à une date (ORACLE ?) :

La Pseudo Colonne SYSDATE Vous permet de connaitre la date et l'heure courante de votre systeme d'exploitation

Ajouter 1 à SYSDATE permet d'incrementer votre date d'une journée (Sysdate + 1)

L'utilisation des Fractions De Date : +1 Heure , + 1 minute , + 1 seconde .
exemples:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> ALTER session SET NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS';
 
Session altered.
 
SQL> SELECT sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 FROM dual;
 
SYSDATE             SYSDATE+1/24        SYSDATE+1/1440      SYSDATE+1/86400
------------------- ------------------- ------------------- -------------------
06/05/2005 16:20:57 06/05/2005 17:20:57 06/05/2005 16:21:57 06/05/2005 16:20:58
 
SQL> SELECT sysdate J, sysdate+30/(24*60*60) J_PLUS_30_SECS FROM dual;
 
J                   J_PLUS_30_SECS
------------------- -------------------
06/05/2005 16:21:58 06/05/2005 16:22:28

Expression de Date : Des Exemples
================================

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Maintenant :                       SYSDATE
Demain / la Prochaine Journee :    SYSDATE + 1
Dans 7 Jour :                      SYSDATE + 7
Dans 1 heure :                     SYSDATE + 1/24
Dans 3 heures :                    SYSDATE + 3/24
Dans 1/2 Heure :                   SYSDATE + 1/48
Dans 10 minutes :                  SYSDATE + 10/1440
Dans 30 Secondes :                 SYSDATE + 30/86400
Demain à 0h  :                     TRUNC(SYSDATE + 1)
Demain à 8h du Matin :             TRUNC(SYSDATE + 1) + 8/24 
 
Lundi Prochain à Midi :            
Si NLS_TERRITORY='FRANCE'          NEXT_DAY(TRUNC(SYSDATE), 'LUNDI') + 12/24 
Sinon                              NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') + 12/24      
 
1er Jour Du Mois Suivant à 0h :    TRUNC(LAST_DAY(SYSDATE ) + 1)  
1er Jour Du Mois Courant à 0h :    TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1))) + 1
__________________
Signé : Capitaine Jean-Luc Picard
argoet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2005, 17h03   #12
lper
Membre confirmé
 
Avatar de lper
 
Inscription : juin 2004
Messages : 301
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 301
Points : 293
Points : 293
Bonjour,
je tiens à préciser que selon le SGBD, les réponses à la FAQ peuvent être erronées, ne faudrait il pas créer une sous rubrique de la FAQ indiquant le type de la base ?

Du style sous Oracle
Comment obtenir l'enregistrement le plus récent(max) ou le plus vieux(min) ?

Code :
1
2
3
4
5
6
 
SELECT *
FROM latable
WHERE date_enregistrement IN
(SELECT max(date_enregistrement)
          FROM latable)
Alors que sous Mysql n'acceptant pas les sous-requêtes, ca ne fonctionne plus.
voir les différences entre les bases :
http://sqlpro.developpez.com/cours/sqlaz/fonctions/
__________________
La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir
lper est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2005, 18h43   #13
trotters213
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 571
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 571
Points : 3 004
Points : 3 004
tout le monde
Iper : MySQL accepte les sous-requêtes (à partir de la version 4.1) et en plus il existe déjà une FAQ.
Si tu veux poster un truc qui revient souvent mais sur un SGBD particulier, donne le nom du SGBD, et si un jour ça devient gros comme FAQ, ils la scinderont surement (ça c'est des suggestions parce que déjà qu'on a que 8 Q/R pour tous les SGBD sauf MySQL et Acces, si en plus ils les découpent par SGBD )
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2005, 20h15   #14
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur SQLServer/Access

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Oui, tout à fait !
à l'heure actuelle, j'ai fait plusieurs entrées.
Vous me direz ce que vous en pensez dès que je vous donnerai le lien.
Mais il y a une entrée par type de serveur, pour les questions spécifiques.
Maintenant, C'est clair que, si la FAQ appropriée existe déjà, il convient de l'envoyer dans le forum concerné.

Par exemple, ci-dessus, nous avons une question typique SQLServer.
Je l'ai mise dans l'entrée concernée
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2005, 21h58   #15
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur SQLServer/Access

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
alors ...
ca vous plait ?

http://mhubiche.developpez.com/faqsql_tmp/
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 12h57   #16
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 868
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 868
Points : 11 718
Points : 11 718
L'opérateur CASE

Il y a deux syntaxes pour l'opérateur CASE :
Syntaxe 1 :
Code :
1
2
3
4
5
6
case
	when	EXPRESSION_LOGIQUE_1	then	RETOUR_1
	when	EXPRESSION_LOGIQUE_2	then	RETOUR_2
	...
	else	DEFAUT
end
Chaque expression logique est évaluée. La valeur de retour correspondant à la première expression vérifiée est retournée.
Si aucune expression logique n'est vérifiée, la valeur par DEFAUT est retournée.

Exemple :
Code :
1
2
3
4
5
6
7
8
9
SELECT	ANNEE
	,	case
			when	ANNEE > 2004	then 4
			when	ANNEE BETWEEN 2001 AND 2003	then 3
			when	ANNEE = 2002	then 2
			when	ANNEE <= 2001	then 1
			else	0
		end	AS	PERIODE
FROM	...
retourne
Code :
1
2
3
4
5
6
7
8
	ANNEE	PERIODE	
	2000	0
	2001	3
	2002	3
	2003	3
	2004	0
	2005	4
	NULL	0
Syntaxe 2 :
Code :
1
2
3
4
5
6
case	VARIABLE
	when	VALTEST_1	then RETOUR_1
	when	VALTEST_2	then RETOUR_2
	...
	else	DEFAUT
end
La valeur de VARIABLE est comparée aux VALEURs pour déterminer la valeur de RETOUR de l'opérateur CASE.
Si aucune valeur de TEST ne correspond à la valeur de VARIABLE, la valeur par DEFAUT est retournée.

Cette construction est équivalente à
Code :
1
2
3
4
5
6
case	VARIABLE
	when	VARIABLE = VALTEST_1	then RETOUR_1
	when	VARIABLE = VALTEST_2	then RETOUR_2
	...
	else	DEFAUT
end
Exemple : Totalisation des ventes par types de produits vendus
Code :
1
2
3
4
5
6
7
8
SELECT	ANNEE
	,	sum(case PRODUIT when 'A' then PRIX else 0 end) AS TYPE_A
	,	sum(case PRODUIT when 'B' then PRIX else 0 end) AS TYPE_B
	,	sum(case PRODUIT when 'C' then PRIX else 0 end) AS TYPE_C
	,	sum(case when PRODUIT IN ('A', 'B', 'C') then 0 else PRIX end) AS AUTRE
	,	sum(PRIX) AS TOTAL
FROM ...	
GROUP BY	ANNEE
N.B. : si la clause ELSE n'est pas précisée, CASE retourne NULL en tant que valeur par défaut.
N.B. : la construction (case VARIABLE when NULL then XXX else YYYY end) retournera toujours YYY, le test VARIABLE = NULL étant toujours faux même si VARIABLE is null...
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 13h22   #17
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 868
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 868
Points : 11 718
Points : 11 718
Les extensions de CASE : NULLIF et COALESCE

L'opérateur CASE et les fonctions NULLIF et COALESCE ont été validées dans le standard ANSI SQL-99

La fonction NULLIF retourne NULL si l'expression testée est égale à la valeur comparée :
Code :
nullif(EXPRESSION, VALEUR)
est équivalent à
Code :
1
2
3
4
case	EXPRESSION
		when	VALEUR	then NULL
		else	EXPRESSION
end
La fonction COALESCE retourne la valeur par défaut si l'expression testée est nulle
Code :
coalesce(EXPRESSION, VALEUR)
est équivalent à
Code :
1
2
3
4
case
		when EXPRESSION IS NULL	then	VALEUR
		else EXPRESSION
end
Exemple :
Code :
SELECT	VALEUR,	nullif(VALEUR, 0) AS V1, coalesce(VALEUR, -1) AS V2
retourne
Code :
1
2
3
4
5
VALEUR	V1	V2
	-1	-1	-1
NULL	NULL	-1
	0	NULL	0
	1	1		1
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 10h41   #18
trotters213
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 571
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 571
Points : 3 004
Points : 3 004
Il me semble qu'il est préférable d'utiliser l'UNION plutôt que le CASE.
Par exemple au lieu de mettre ça :
Code :
1
2
3
4
5
6
7
8
9
SELECT   ANNEE
   ,   case
         when   ANNEE > 2004   then 4
         when   ANNEE BETWEEN 2001 AND 2003   then 3
         when   ANNEE = 2002   then 2
         when   ANNEE <= 2001   then 1
         else   0
      end   AS   PERIODE
FROM   ...
il vaut mieux mettre ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT ANNEE, 4 AS PERIODE
FROM ...
WHERE ANNEE>2004
 
UNION
 
SELECT ANNEE, 3 AS PERIODE
FROM ...
WHERE ANNEE BETWEEN 2001 AND 2003
 
UNION
 
...
En attendant la confirmation du boss...
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 14h33   #19
Tchinkatchuk
Membre habitué
 
Avatar de Tchinkatchuk
 
Homme Sylvain Gourvil
Freelance en développement Web
Inscription : mars 2005
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Gourvil
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Freelance en développement Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2005
Messages : 248
Points : 147
Points : 147
Citation:
Envoyé par Maxence HUBICHE
Citation:
Envoyé par Tchinkatchuk
Q Comment supprimer des n-uplets en cascade ?
R Juste lister les différentes possibilités afin d'aider à la recherche
1. ON DELETE ...
2. Batch de nuit
3. Procedures stockées
...

C'est un probleme que je me posais et c'est pas facile de trouver toutes les différents façons quand on y connait rien !
Mais je comprendrais que ca ne soit pas approprié
je n'ai pas très bien compris la solution que tu apportes à la question.
tu pourrais reformuler s'il te plait ?
Ce n'est pas franchement une solution mais une liste non exhaustive des possibilités pour une suppression de n-uplets liés dans la base.
Par exemple, un produit doit être supprimé d'une table ainsi que toutes ces caractéristiques contenues dans d'autres tables.
Du coup, on peut lister les différentes solutions possibles dans le FAQ ( ON DELETE, Procedures Stockees, Triggers, batchs, etc. )

J'ai conscience que ce ne doit peut etre pas etre dans le FAQ. Un artcile dédié serait le mieux.

En esperant que je sois clair mais je ne suis pas sur du tout lol
Tchinkatchuk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2005, 15h57   #20
Maxence HUBICHE
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Développeur SQLServer/Access
Inscription : juin 2002
Messages : 3 768
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 43
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur SQLServer/Access

Informations forums :
Inscription : juin 2002
Messages : 3 768
Points : 8 720
Points : 8 720
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Citation:
Envoyé par Tchinkatchuk
J'ai conscience que ce ne doit peut etre pas etre dans le FAQ. Un artcile dédié serait le mieux.

En esperant que je sois clair mais je ne suis pas sur du tout lol
Je partage ton avis !
Tu te sens à te lancer dedans ?
__________________
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h08.


 
 
 
 
Partenaires

Hébergement Web