Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/03/2008, 01h56   #1
Invité de passage
 
Inscription : février 2008
Messages : 1
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1
Points : 0
Points : 0
Par défaut [Requêtes SQL] Requêtes suivantes correctes?

Soit le MPD en pièce jointe (dsl pour la qualité de la photo médiocre) (Extrait de l'examen de BDD de mon école d'il ya 2 ans).

J'ai essayé de répondre aux questions mais je ne suis pas sur de ttes mes réponses . J'ai aussi quelques fois des doutes sur une syntaxe ou une autre...

Citation:
Quels sont les numéros, noms et villes des adhérents entrés au club entre Avril 2000 et Juin 2000
J'ai répondu par
Code :
SELECT NO_ADHERENT, NOM, VILLE FROM ADHERENT WHERE DATE_ENTREE > '%/04/2000' AND DATE_ENTREE < '%/06/2000'
Est-ce correct ?? L'utilisation des % pour les dates est possible ?

En parcourant le cours de SQLPro (excellent au passage) sur ce même site,
je pense que la syntaxe suivante marche aussi:

Code :
SELECT NO_ADHERENT, NOM, VILLE FROM ADHERENT WHERE DATE_ENTREE BETWEEN '%/04/2000' AND '%/06/2000'
Possible?

Citation:
Liste de tous les films (titre et catégorie) réalisés en 2000
Code :
SELECT TITRE, CATEGORIE FROM FILM WHERE REALISATION LIKE '%/%/2000'
Correct?
Sur le cours d'SQLPro j'ai vu la possibilité d'utiliser EXTRACT mais comme on tourne avec Oracle apparament ce standard n'est pas présent...
Y'a pas une autre façon d'écrire que la mienne plus "propre" ?

Petite dernière

Citation:
Quels sont les noms des adhérents de l'agence située à l'adresse 'BELLEVUE' ayant une valeur du compte inférieure à 25? utiliser un SELECT imbriqué
Code :
SELECT NOM FROM ADHERENT WHERE COMPTE <25 AND CODE_AGENCE=(SELECT CODE_AGENCE FROM AGENCE WHERE ADRESSE_AGENCE='BELLEVUE')
C'est correct ?

Merci à vous pour vos réponses et conseils (Y'aura surement d'autres questions demain )
Images attachées
Type de fichier : jpg DSC0039.JPG (251,8 Ko, 7 affichages)
revohsalf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2008, 12h41   #2
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
Je n'ai pas vérifié chaque question, mais déjà, le like '%' pour une date ne marche pas. Par exemple, entre avril 2000 et juin 2000, ça se traduit par
Code :
WHERE DATE_ENTREE BETWEEN '01/04/2000' AND '30/06/2000'
Attention tout-de-même à la variable nls_date_format (si je me souviens bien c'est celle là) car il faut que le format de date par défaut soit 'DD/MM/YYYY' (des fois ça peut être MM/DD/YYYY, donc ça va comparer avec le 4 janvier 2000 au lieu du 1er avril 2000)
Pour être sûr d'éviter le problème, tu peux faire
Code :
1
2
WHERE DATE_ENTREE BETWEEN to_date('01/04/2000','DD/MM/YYYY')
 AND to_date('30/06/2000','DD/MM/YYYY')
Si tu veux le cas général simplifié où tu ne dois pas savoir si le dernier jour du mois est un 28,29,30 ou 31, tu peux utiliser
Code :
WHERE to_date(DATE_ENTREE,'YYYYMM') BETWEEN '200004' AND '200006'
Idem pour "réalisées en 2000", ça fait un truc du genre
Code :
WHERE to_char(DATE_ENTREE,'YYYY') = '2000'
Bien sûr les fonctions to_date et to_char marchent pour Oracle, mais selon le SGBD ce ne sont peut-être pas les mêmes
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2008, 23h25   #3
Membre actif
 
Avatar de kore62
 
Inscription : août 2007
Messages : 224
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2007
Messages : 224
Points : 165
Points : 165
HEU pour ta reponse:

SELECT TITRE, CATEGORIE FROM FILM WHERE REALISATION LIKE '%/%/2000'

Je pense qu'oracle va t'envoyer boulet ( a moi qu'il fasse une conversion implicite ce que je ne suis pas sur m'enfin Oracle est tres fort... ca m'etonnerais pas qu'il y arrive... )

En tout cas le '%/%/2000' va être considéré comme une chaine de caractères.. donc si ton champ realisation est de type date ca risque de poser probleme

Moi, j'aurais fait:

SELECT TITRE, CATEGORIE FROM FILM WHERE to_char(REALISATION,'YYYY')= '2000'

Pour celle-ci

SELECT NOM FROM ADHERENT WHERE COMPTE <25 AND CODE_AGENCE=(SELECT CODE_AGENCE FROM AGENCE WHERE ADRESSE_AGENCE='BELLEVUE')

CA me parait correct
__________________
L'habitude est l'illusion d'un acquis imaginaire...

Mes Compos Ziks Electros:http://fishbone2k.free.fr/technorulez/news.php?id=89
kore62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h30.


 
 
 
 
Partenaires

Hébergement Web