I
. Commandes d'interrogation |
|
|
|
|
Expression
de la projection |
|
|
SELECT liste d'attributs
FROM nom de la relation
|
|
|
|
|
Exemple
|
SELECT DISTINCT prix FROM produit
|
pour sélectionner les différents
prix de la table produit sans doublons. |
|
|
|
|
|
|
|
Expression
de la sélection |
|
|
SELECT
* FROM relation WHERE qualification
|
où
qualification est une expression conditionnelle comportant
:
une
opération de comparaison (=, <, >, ..., like),
AND, OR, NOT,
un caractère générique
:
% peut se substituer à toute chaîne de caractère,
- peut substituer
tout caractère. |
|
|
|
|
|
|
|
Composition
Projection - Sélection |
|
|
SELECT liste_attributs
FROM nom_de_relation
WHERE qualification
|
|
|
|
Exemple
|
(p{#prod, libellé}s(50
<= pu <= 100)Produit)
ce qui donne : |
SELECT
#prod, libelle
FROM Produit
WHERE (pu <= 100
AND pu >= 50) |
|
|
|
|
|
|
|
Expression
de la jointure |
|
|
|
|
Produit cartésien |
|
|
|
SELECT
*
FROM nom_rel1, nom_rel2 ( , ... ) |
|
|
|
|
|
|
|
|
|
|
|
q-jointure |
|
|
|
SELECT *
FROM nom_rel1 ( , ... )
WHERE qualification |
|
|
|
Exemple
|
SELECT
FROM Produit, Stock
WHERE produit.#prod = stock.#prod |
|
|
|
|
|
|
|
|
Composition
jointure - sélection - projection |
|
|
SELECT
FROM nom_rel1, nom_rel2,...
WHERE qualifications |
|
|
|
Exemple
|
SELECT #prod, libelle
FROM Produit, Stock
WHERE Produit.#prod = Stock.#prod
AND Stock.qte <= 0 |
|
Exemple
|
avec SELECT imbriqué (ou sous requête) |
SELECT #prod, libelle
FROM Produit p1
WHERE p1.#prod IN
(SELECT s.#prod
FROM Stock s
WHERE s.qte <= 0)
|
Exemple
|
produits et adresse des dépôts en rupture de stock:
SELECT p.#prod, libelle, d.#dep,
adr
FROM Produit p, Stock, Depot d
WHERE p.#prod = Stock.#prod
AND Stock.qte <= 0
AND d.#dep = Sock.#dep
|
ou bien:
SELECT #prod, libelle, adr, #dep
FROM Produit, Depot
WHERE #prod IN
(SELECT #prod
FROM Stock
WHERE qte <= 0
AND Stock.#dep = Depot.#dep)
|
Remarque
|
l'avantage de la deuxième solution est de casser les jointures
donc on se ramène à une jointure sur deux tableaux.
On fait une sélection sur le stock |
|
|
|
|
|
|
|
Nommage
des objets: |
|
|
Notion
du propriétaire : l'utilisateur
qui créé l'objet (qui peut donner des droits)
|
|
Relation |
|
|
|
|
nom_de_la_relation si elle m'appartient,
nom_propriétaire.nom_de_la_relation
sinon. |
|
|
|
|
Attribut |
|
|
|
|
nom_de_attribut_donné_lors_de_la_création si
pas d'ambiguïté
sinon : désignation_relation.nom_attribut
ou alias_relation.Nom_Attribut |
|
|
|
|
Nom des attributs
dans la relation résultat |
|
|
|
|
Par défaut: ceux de la relation,
sinon: renommage |
|
|
|
Exemple
|
SELECT #prod "Numéro Prod" FROM Produit |
|
|
|
|
|
|
|
|
Union
- Intersection - Différence (Pas
dans la version 4.0 de Sybase) |
|
|
|
|
<clause
select> UNION / INTERSECT / MINUS <clause select> |
|
|
Exemple
|
(SELECT #prod
FROM Produit WHERE pu>750)
UNION
(SELECT #prod FROM Produit WHERE pu<250) |
Ce qui revient à
:
SELECT #prod
FROM Produit
WHERE pu>750 or pu>250) |
|
|
|
|
|
|
|
Ordonnancement
des résultats (ORDER BY) |
|
|
Exemple
|
SELECT #dep, #prod,
qte
FROM Stock
WHERE qte<2000
ORDER BY #prod ASC, qte DESC |
par défaut :
ordre ASC, c'est à dire ordre croissant |
|
|
|
|
|
|
|
Fonction
d'agrégation: |
|
|
|
|
COUNT |
cardinal |
|
|
|
|
|
SUM |
somme |
|
|
|
|
|
AVG |
moyenne |
|
|
|
|
|
MAX |
maximum |
|
|
|
|
|
MIN |
minimum |
|
|
|
Exemples
|
Nombre de produits en rupture de stock |
SELECT
COUNT(*) FROM Stock WHERE prod <= 0
|
|
Moyenne
des pu des produits stockés dans le dépôt 4 |
SELECT
AVG(pu)
FROM Produit, Depot, Stock
WHERE Depot.#dep = 4
AND Depot.#dep = Stock.#dep
AND Stock.#prod = Produit.#prod
|
|
Dépôt
de plus grande capacité |
SELECT
#dep, adr FROM Depot
WHERE volume IN
(SELECT MAX(volume) FROM Depot)
|
|
|
|
|
La
clause GROUP BY |
|
|
|
|
GROUP BY liste_attributs HAVING qualification_avec_fonction_d'agrégation |
|
|
|
Exemples
|
produits
dans plus de deux dépôts: |
SELECT
#prod
FROM Stock
GROUP BY #prod
HAVING COUNT(*) > 2 |
|
Stock
|
Résultat
|
#prod
|
#dep
|
qte
|
1
1
1
2
2
3
3
3
|
D1
D2
D3
D2
D3
D2
D3
D4
|
100
200
30
100
100
200
300
400
|
|
|
Ce qui revient
à: 3 groupes suivant le produit prod.
Le produit 2 n'entre pas dans le cadre car il n'y a que 2 dépôts
ayant ce produit. |
|
II
. Calcul relationnel des tuples |
|
|
|
|
Expression
de la projection |
|
|
|
|
langage prédicatif
à variables n-uplets. Il
se déduit du CP1 en considérant dans les fbf que |
|
|
|
|
Les
variables sont associées à des t-uplets.
|
|
|
|
|
|
Les
prédicats comportent : |
|
|
|
|
|
les comparateurs logiques (=, NON =, <, <=, >, >=)
un prédicat unaire associé
à chaque relation
Prédicat et Relation même
nom.
|
|
|
|
|
|
Les termes sont des constantes
associées: |
|
|
|
|
|
aux valeurs des domaines
des attributs,
ou des fonctions de projection d'une variable sur un de ses attribut.
|
|
|
|
Exemples
|
p.#prod
désigne le numéro du produit p |
|
|
|
(1) nom et prix unitaire de
tous les produits |
|
|
|
|
|
{p.libellé, p.pu | Produit(p)} |
|
|
|
|
(2) nom et prix des produits stockés dans le dépot
d2 |
|
|
|
|
|
{p.libellé, p.pu | Produit(p)ÙEXISTE
s Stock(s)Ùs#dep='d2'Ùs#prod=p#produit}
|
|
|
|
|
(3) adresse et numéro des dépôts ayant des
produits en rupture de stock |
|
|
|
|
|
{d.adr, d.#dep | Depot(d)ÙEXISTE
s (Stock(s)Ùs.#dep='d'.#depÙs.qte<=0)} |
|
|
|
|
(4) adresse et numéro des dépôts stockant
tout produits |
|
|
|
|
|
{d.adr, d.#dep | Depot(d)Ù"p.Produit(p)=EXISTE
s (Stock(s)Ùp.#prod=#prodÙs.#dep=d.#dep)} |
|
|
|
|
|
|
|