PROJET AUTOBLOG


Opennews

source: Opennews

⇐ retour index

AIDE POUR REQUETES SQL SUR SQL SERVER

lundi 3 avril 2017 à 19:04
Hello, j'ai des requêtes à effectuer à partir de cela ==> http://image.prntscr.com/image/28920f9a05234ce19f330aa10b3d62db.png

J'ai effectué celà, mais je me retrouve avec pas mal d'erreurs, genre pour les NATURAL JOIN etc etc, pourriez-vous m'aider à trouver donc les bonnes requêtes ?

merci en encore de votre aide

/*INTERROGATION MULTI-TABLES*/

/*Modifier la table clients afin de rajouter le parrain 'vipcli'
- Null, C1, NULL, C6, C6, NULL*/

ALTER TABLE CLIENTS
   ADD vipcli char(4);
   
UPDATE CLIENTS
   SET vipcli = 'c1'
   WHERE numcli = 'c2';

UPDATE CLIENTS
   SET vipcli = 'c6'
   WHERE numcli = 'c4'
   OR numcli = 'c5';

/*La jointure naturelle
- Afficher le code client, le nom du client et le numéro de facture pour l'ensemble des clients ayant fait l'objet d'une facture*/

SELECT c.numcli, c.nomcli, f.numfact
FROM CLIENTS c NATURAL JOIN FACTURE f;

/*L'équi-jointure
- La requète précédente en exploitant l'égalité*/

SELECT c.numcli, c.nomcli, f.numfact
FROM CLIENTS c, FACTURE f
WHERE c.numcli = f.numcli;

/*La jointure gauche
- afficher le nom et les coordonnées complètes des clients n'ayant pas passés de commande à ce jour*/

SELECT c.nomcli, (c.ruecli + ' ' + c.cpcli + ' ' + c.villecli) AS 'ADRESSE'
FROM CLIENTS c LEFT JOIN FACTURE f
ON c.numcli = f.numcli;

/*la jointure réflexive
- Afficher uniquement le nom des clients ainsi que le nom de la personne qui l'a parrainé. Faites usages des alias de colonnes et de tables*/

SELECT c1.nomcli, c2.nomcli
FROM CLIENTS c1, CLIENTS c2
WHERE c1.numcli = c2.vipcli;

/*Non équi-jointure
- Afficher le nom du client et le numéro de facture pour lesquels il n'y a pas d'égalité.*/

SELECT c.nomcli, f.numfact
FROM CLIENTS c, FACTURE F
WHERE c.numcli != f.numcli;

/*Jointure interne
- Afficher le nom du client et le numéro de facture pour l'ensemble des clients ayant passé une commande*/

SELECT c.nomcli, f.numfact
FROM CLIENTS c INNER JOIN FACTURE f
ON c.numcli = f.numcli;

/*Jointure croisée
- Afficher le nom du client, le numéro de facture après avoir défini une jointure croisée avec CROSS*/

SELECT c.nomcli, f.numfact
FROM CLIENTS c CROSS JOIN FACTURE f;

/*
- Idem que pour la requête précédente en exploitant JOIN*/

SELECT c.nomcli, f.numfact
FROM CLIENTS c INNER JOIN FACTURE f
ON c.numcli = f.numcli;

/*
- Idem que pour la requête précédente en exploitant SSTRAIGHT_JOIN*/

SELECT STRAIGHT_JOIN c.nomcli, f.numfact
FROM CLIENTS c, FACTURE f;

/*Jointure interne
- Afficher le nom du client et le numéro de facture pour l'ensemble des clients ayant passé une commande. -STRAIGHT_JOIN-*/

SELECT STRAIGHT_JOIN c.nomcli, f.numfact
FROM CLIENTS JOIN FACTURE f
ON c.numcli = f.numcli;

/*Opérateur IN et NOT IN
- Désignation des produits n'ayant jamais été commandés*/

SELECT p.design AS 'produit'
FROM PRODUIT p
WHERE p.numprod NOT IN (SELECT NUMPRO
                       FROM PRODUIT p, LIGNEF L
                       WHERE p.numprod = l.numprod);

/*Code des factures et désignation des produits livrés à la fois par les fournisseurs RapidLiv et LivExpress en janvier 2002*/

SELECT p.design, l.numfact
FROM PRODUIT p, LIVRER l
WHERE p.numprod = l.numprod
AND l.dateliv LIKE "2002-01-%"
AND l.numliv IN (SELECT l1.numliv
               FROM LIVRER l1 NATURAL JOIN LIVREUR l2
               WHERE l2.raisonsoc = "Express")
AND l.numliv IN (SELECT l1.numliv
               FROM LIVRER l1 NATURAL JOIN LIVREUR l2
               WHERE l2.raisonsoc = "Rapid-liv");
               
/*Opérateurs EXISTS et NOT EXISTS
- Référence des produits n'ayant jamais été commandés*/

SELECT numprod
FROM PRODUIT
WHERE numprod NOT EXISTS (SELECT numprod
                         FROM LIGNEF);                

/*
- Nom et adresse des cliens n'ayant pas passé de commande en 2002*/

SELECT c.nomcli, c.ruecli, c.cpcli, c.villecli
FROM CLIENTS c INNER JOIN LIGNEF f
ON c.numcli NOT EXISTS f.numcli;

/*Opérateurs ensemblites
- Donner le nombre de produits de l'entreprise ayant un prix TTC supérieur à 25€*/

SELECT COUNT(numprod)
FROM PRODUIT
HAVING (pu*1.2) > 25;

/*
- Afficher le code de facture et le prix TTC du produit le plus cher commandé par 'JEAN' pour chacune de ces factures sachant que le taux de TVA est de 19.60%.
Le résultat présentera un alias pour les entêtes de colonnes et tri décroissant sur le code de facture*/

SELECT f.numfact AS 'Code de facture', MAX(p.pu*1.196) AS 'Prix TTC'
FROM CLIENTS c JOIN FACTURE f
ON c.numcli = f.numcli JOIN LIGNEF l
ON f.numfact = l.numfact JOIN PRODUIT p
ON l.numprod = p.numprod
WHERE c.ruecli = 'Jean'
GROUP BY f.numfact
ORDER BY f.numFact DESC;

/*
- Afficher le nom du client, son numéro de facture et le nombre de produits commandés, pour l'ensemble des clients ayant passé une commande
d'au moins 2 produits en triant le résultat sur le nom du client et le numéro de sa facture*/

SELECT c.nomcli, c.numcli, f.numfact, l.numfact*SUM(l.qte)
FROM CLIENTS c NATURAL JOIN FACTURE f NATURAL JOIN LIGNEF l
HAVING l.numfact*SUM(l.qte) > 2
GROUP BY (l.numfact)
ORDER BY c.nomcli
ORDER BY l.numfact;

/*
- Afficher le nom du client, ses cooderdonnées, l'entreprise de livraison et le produit livré pour l'ensemble des clients
ayant reçu leur livraison le jour de la commande. Exploiter une jointure interne, des alias de colonnes, des tables et un
tri décroissant sur le nom du client puis la date de facture */

SELECT c.nomcli, (c.ruecli + ' ' + c.cpcli + ' ' + c.villecli) AS 'Adresse', l2.raisonsoc AS 'Entreprise de livraison', p.desig AS 'Produit'
FROM CLIENTS c NATURAL JOIN FACTURE f NATURAL JOIN PRODUIT p NATURAL JOIN LIVRER l1 NATURAL JOIN LIVREUR l2
WHERE f.dateliv = l1.dateliv
ORDER BY c.nomcli DESC
ORDER BY f.datef DESC;


Je dois certainement avoir pas mal d'erreurs !!!
(Permalink)