IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Création de la FAQ SQL !!! (Voulez-vous participer ?)


Sujet :

Langage SQL

  1. #1
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    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,

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

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

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO t_table 
    VALUES ('Aujourd''hui')

    Q Comment sélectionner les X "premiers" enregistrements :
    R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TOP X t_champ 
    FROM t_table
    Q Comment sélectionner les X "derniers" enregistrements :
    R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP X t_champ 
    FROM t_table 
    ORDER BY t_champ DESC
    Q Comment sélectionner entre le X° et le Y° enregistrement (X<Y) :
    R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * 
    FROM &#40;SELECT TOP Y-X * 
          FROM &#40;SELECT TOP Y * 
                FROM t_table
                ORDER BY t_id&#41; AS t1 
          ORDER BY t_id DESC&#41; AS t2 
    ORDER BY t_id
    Q Les équivalents pour trouver les limites ?
    R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Access et SQL Server &#58; TOP
    MySQL et PostGreSQL &#58; LIMIT
    Interbases &#58; ROWS
    Paradox &#58; aucun 
    Oracle &#58; ROWNUM -- corrigé par fadace
    Cf : http://sqlpro.developpez.com/cours/s...onctions/#L1.8
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DBCC SHRINKFILE &#40;votre_base_Log, taille_maximale_voulue_pour_le_fichier_log&#41;
    BACKUP LOG votre_base  WITH TRUNCATE_ONLY
    DBCC SHRINKFILE &#40;votre_base_Log, taille_maximale_voulue_pour_le_fichier_log&#41;
    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.

  3. #3
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut


    merci beaucoup !
    Au suivant !!!!

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 762
    Points
    30 762
    Par défaut
    Comment mettre à jour une table à partir des données d'une autre table ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    update	MAJ
    set		CHAMP_CIBLE		= SRC.CHAMP_SOURCE
    from	TABLE_CIBLE		as MAJ
    	,	&#40;	select 	CLE_JOINTURE
    				,	count&#40;*&#41;	as CHAMP_SOURCE	-- exemple...
       			from	TABLE_SOURCE
       			group by CLE_JOINTURE
    		&#41;	as SRC
    where 	MAJ.CLE_JOINTURE = SRC.CLE_JOINTURE
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut
    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é

  6. #6
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    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

  7. #7
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Q Comment utiliser les booléens quand le type n'existe pas ?
    R En utilisant BIT(1) ou BYTE (1).

  8. #8
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    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 ?

  9. #9
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    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 ???

  10. #10
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    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à


  11. #11
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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&#58;MI&#58;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&#58;20&#58;57 06/05/2005 17&#58;20&#58;57 06/05/2005 16&#58;21&#58;57 06/05/2005 16&#58;20&#58;58
     
    SQL> select sysdate J, sysdate+30/&#40;24*60*60&#41; J_PLUS_30_SECS from dual;
     
    J                   J_PLUS_30_SECS
    ------------------- -------------------
    06/05/2005 16&#58;21&#58;58 06/05/2005 16&#58;22&#58;28

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Maintenant &#58;                       SYSDATE
    Demain / la Prochaine Journee &#58;    SYSDATE + 1
    Dans 7 Jour &#58;                      SYSDATE + 7
    Dans 1 heure &#58;                     SYSDATE + 1/24
    Dans 3 heures &#58;                    SYSDATE + 3/24
    Dans 1/2 Heure &#58;                   SYSDATE + 1/48
    Dans 10 minutes &#58;                  SYSDATE + 10/1440
    Dans 30 Secondes &#58;                 SYSDATE + 30/86400
    Demain à 0h  &#58;                     TRUNC&#40;SYSDATE + 1&#41;
    Demain à 8h du Matin &#58;             TRUNC&#40;SYSDATE + 1&#41; + 8/24 
     
    Lundi Prochain à Midi &#58;            
    Si NLS_TERRITORY='FRANCE'          NEXT_DAY&#40;TRUNC&#40;SYSDATE&#41;, 'LUNDI'&#41; + 12/24 
    Sinon                              NEXT_DAY&#40;TRUNC&#40;SYSDATE&#41;, 'MONDAY'&#41; + 12/24      
     
    1er Jour Du Mois Suivant à 0h &#58;    TRUNC&#40;LAST_DAY&#40;SYSDATE &#41; + 1&#41;  
    1er Jour Du Mois Courant à 0h &#58;    TRUNC&#40;LAST_DAY&#40;ADD_MONTHS&#40;SYSDATE,-1&#41;&#41;&#41; + 1
    Signé : Capitaine Jean-Luc Picard

  12. #12
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 396
    Points : 641
    Points
    641
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select *
    from latable
    where date_enregistrement in
    &#40;select max&#40;date_enregistrement&#41;
              from latable&#41;
    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

  13. #13
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    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 )

  14. #14
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    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

  15. #15
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    alors ...
    ca vous plait ?

    http://mhubiche.developpez.com/faqsql_tmp/

  16. #16
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 762
    Points
    30 762
    Par défaut
    L'opérateur CASE

    Il y a deux syntaxes pour l'opérateur CASE :
    Syntaxe 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select	ANNEE
    	,	sum&#40;case PRODUIT when 'A' then PRIX else 0 end&#41; as TYPE_A
    	,	sum&#40;case PRODUIT when 'B' then PRIX else 0 end&#41; as TYPE_B
    	,	sum&#40;case PRODUIT when 'C' then PRIX else 0 end&#41; as TYPE_C
    	,	sum&#40;case when PRODUIT in &#40;'A', 'B', 'C'&#41; then 0 else PRIX end&#41; as AUTRE
    	,	sum&#40;PRIX&#41; 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...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  17. #17
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 762
    Points
    30 762
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    nullif&#40;EXPRESSION, VALEUR&#41;
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    coalesce&#40;EXPRESSION, VALEUR&#41;
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    case
    		when EXPRESSION is null	then	VALEUR
    		else EXPRESSION
    end
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select	VALEUR,	nullif&#40;VALEUR, 0&#41; as V1, coalesce&#40;VALEUR, -1&#41; as V2
    retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    VALEUR	V1	V2
    	-1	-1	-1
    Null	Null	-1
    	0	Null	0
    	1	1		1
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  18. #18
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  19. #19
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut
    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

  20. #20
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    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 ?

Discussions similaires

  1. Recherche 1 responsable + des contributeurs pour FAQ SQL
    Par trotters213 dans le forum Evolutions du club
    Réponses: 21
    Dernier message: 20/04/2006, 18h10
  2. Comment voulez vous diviser le forum dotnet (part2)
    Par neo.51 dans le forum Evolutions du club
    Réponses: 28
    Dernier message: 15/04/2005, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo