CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

SQL : EXISTS

ArsenicBottle
ArsenicBottle
Niveau 6
19 septembre 2009 à 17:17:59

Bonjour, j'ai un peu du mal à comprendre comment utiliser la requète EXIST :(

Dans un exo on me demande de donner une requète équivalente à la suivante , mais en utilisant EXISTS :

SELECT *
FROM produit
WHERE art_pv > (SELECT MIN(art_pv) FROM produit WHERE art_coul='BLANC' ) ;

Et je ne vois vraiment pas comment faire :(

merci si vous avez des indications, car ca a l'air assez simple comme ca, mais ca ne l'est pas pour moi.

chris_27
chris_27
Niveau 10
19 septembre 2009 à 17:57:36

http://dev.mysql.com/doc/refman/5.1/en/exists-and-not-exists-subqueries.html

ArsenicBottle
ArsenicBottle
Niveau 6
19 septembre 2009 à 19:01:17

ah ah, je ne savais justement pas comment utiliser la donnée du premier SELECT.
Donc je crois que je viens de résoudre mon problème.
merci

_skip
_skip
Niveau 10
19 septembre 2009 à 19:27:57

En utilisant un alias sur la table, tu peux faire ce qu'on appelle une requête corrélée.
Faut juste faire attention à ne pas les utiliser abusivement car ça peut déclencher le fameux N+1.

ArsenicBottle
ArsenicBottle
Niveau 6
20 septembre 2009 à 09:34:25

oui j'ai trouvé au final.
Par contre, c'est quoi le fameu N+1 ?

_skip
_skip
Niveau 10
20 septembre 2009 à 09:51:52

C'est lorsque le moteur récupère N résultats de la première requête, et les élimine en exécutant pour chacun de ces résultats une AUTRE requête (celle du exists). Sur des grosses requêtes ça peut aller plusieurs centaines de fois plus lentement qu'un inner join où une sous-requête IN (plus facilement optimisable).

D'où prudence.

ArsenicBottle
ArsenicBottle
Niveau 6
20 septembre 2009 à 14:02:51

ah ok :ok:

nouvelle question par contre :
comment je pourrais adapter la requete suivante :

CREATE OR REPLACE VIEW ventes
AS
SELECT num_commande,SUM(quantite*prix_unitaire) AS montant
FROM ventes_en_clair V
GROUP BY num_commande

J'aimerai faire apparaitre le nom du magasin où a eu lieu la vente.
Pour décrire un peu la table : num_commande est le numéro de référence d'une commande passée par un client, et la commande en question s'est faite dans un magasin qui est présent dans la table vente dans la colonne "magasin".

Mais si par exemple je fais

CREATE OR REPLACE VIEW ventes
AS
SELECT magasin,SUM(quantite*prix_unitaire) AS montant
FROM ventes_en_clair V
GROUP BY num_commande

j'obtiens une erreur : "ERREUR à la ligne 3 :
ORA-00979: n'est pas une expression GROUP BY"

Pourtant, à une référene num_commande est associée un unique nom de magasin.
Donc je ne comprends pas pourquoi ca ne fonctionne pas.

_skip
_skip
Niveau 10
20 septembre 2009 à 16:14:30

CREATE OR REPLACE VIEW ventes
AS
SELECT num_commande, magasin, SUM(quantite*prix_unitaire) AS montant
FROM ventes_en_clair
GROUP BY num_commande, magasin

ArsenicBottle
ArsenicBottle
Niveau 6
20 septembre 2009 à 20:49:46

merci bcp, je n'avais pas pensé à faire comme ca!

Sinon encore une question (lol) : voici un exemple de requete pour vérifier qu'un client a acheté au moins un article acheté par le client numéro 5.
En fait j'aimerai changer cette requete pour que le client ait acheté au moins TOUS les articles achetés par Mr numéro 5.

  • Et là je m'en sors pas trop :/

Je précise bien sur que c'est dans le cadre d'un exercice et que je découvre un peu le SQL , comme jvous avez pu le voir vu qu'avant je ne me servait que des insert ou select simple.

SELECT clt_num,clt_nom,clt_prenom
FROM client
JOIN commande ON (clt_num=cmd_clt)
JOIN commande2 A ON (cmd_num=lcd_cmd)
WHERE EXISTS
(
SELECT lcd_art FROM client
JOIN commande ON (clt_num=cmd_clt)
JOIN commande2 B ON (cmd_num=lcd_cmd)
WHERE clt_num=5
AND A.lcd_art = B.lcd_art
)

ArsenicBottle
ArsenicBottle
Niveau 6
22 septembre 2009 à 23:03:47

encore une question :rouge:
Je me demandais ce qu'était une vue modifiable. J'ai cherché un peu, mais j'ai pas réussis à savoir vraiment ce que c'était au final :(

merci

_skip
_skip
Niveau 10
23 septembre 2009 à 08:50:41

Une vue que tu peux modifier avec une requête update tout simplement.
C'est à dire les vues pas trop compliquées dans lesquels y'a pas d'aggrégation ou de distinct. Enfin je connais pas par coeur la liste des critères.
Les vues que je crée sont quasiment toujours assumées comme readonly.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment