• Aucun résultat trouvé

Bases de données SQL

N/A
N/A
Protected

Academic year: 2022

Partager "Bases de données SQL"

Copied!
6
0
0

Texte intégral

(1)

Bases de donn´ees SQL

Wiesław Zielonka

⋆ ⋆ ⋆

1 VIEW

-- CREATE VIEW <view name> AS <view definition> ; -- you can rename attributes in a VIEW

-- Most views are not updatable -- A view is updatable if

-- 1. it is constructed from just one table R -- 2. WHERE does not have a subquery involving R -- 3. SELECT contains only attributes of R

-- 4. the attributes of R missing in the view can be completed by -- NULL.

-- Then modyfying view modifies the underlying table R.

-- IMPORTANT: Views are preserved from one session to another -- unless you make DR0P VIEW

--- --DROP VIEW moy_salary;

-- le departement dont le salaire moy est le plus eleve CREATE VIEW moy_salary(dno,dname,salary)

AS SELECT D.dnumber, D.dname , CAST( avg(E.salary) AS Dec(8,2) ) FROM employee E, department D

WHERE E.dno = D.dnumber GROUP BY D.dname, D.dnumber ;

SELECT salary AS "salaire moy maximal", dno, dname FROM moy_salary

WHERE salary = (SELECT max(salary) FROM moy_salary);

DROP VIEW moy_salary;

--- --DROP VIEW dept_sept;

--DELETE FROM employee WHERE lname LIKE ’Kapus%’;

-- Si les tables qui servaient pour la construction de vue changent -- le vue change automatiquement. Ce n’est pas le cas de

-- TEMPORARY TABLE qui sont de vraies tables supprimees a la fin d’une session.

CREATE VIEW dept_sept

AS SELECT lname,fname,ssn FROM employee

WHERE dno = 7;

SELECT * FROM dept_sept;

INSERT INTO employee(lname,fname,ssn,dno) VALUES (’Kapuscinski’,’Artur’,’333555777’,7);

(2)

SELECT * FROM dept_sept;

DROP VIEW dept_sept;

--- SELECT lname,fname,ssn

INTO TEMPORARY TABLE dept_sept FROM employee

WHERE dno = 7;

SELECT * FROM dept_sept;

INSERT INTO employee(lname,fname,ssn,dno) VALUES (’Kapuscinski’,’Artur’,’333555777’,7);

SELECT * FROM dept_sept;

2 DATE et INTERVAL

SELECT date(’1980-12-12’);

SELECT interval ’21 day’;

SELECT date(’1980-12-12’) + interval ’50 days’;

SELECT mgrstartdate + interval ’10 year’

from department;

-- les department dont les chefs ont pris leur fonction il y a -- moins de 20 ans

SELECT dname, mgrstartdate FROM department

WHERE mgrstartdate + interval ’20 years’ >

current_date ;

-- les department dont les chefs ont pris leur fonction il y a -- moins de 10 ans

SELECT dname, mgrstartdate FROM department

WHERE extract(year FROM current_date) - extract(year FROM mgrstartdate)

< 10;

-- prenom, nom, departement, date de prise de fonction

-- pour les chefs de departments qui ont pris leur fonction en -- mai

SELECT E.fname, E.lname, D.dname, D.mgrstartdate FROM department D, employee E

WHERE E.ssn = D.mgrssn AND extract(month FROM D.mgrstartdate) = 5;

CREATE TABLE toto(

ssn char(9) references employee, nom varchar(20),

date date default(current_date) );

(3)

insert into toto(ssn,nom) values (’111111103’,’Knight’);

select * from toto;

DROP table toto;

3 Sous-requˆettes dans FROM

---

-- On peut faire des sous-requettes non seulement dans WHERE

-- mais aussi dans FROM. Noter que la sous requette qui apparait dans -- FROM doit avaoir un alias.

-- Pour chaque departement les femmes avec de salaires

-- les plus eleves (les plus eleves parmi les femmes, on ignore ici -- les hommes et leurs salaires).

SELECT E.fname, E.lname, E.salary, E.dno

FROM employee AS E, (SELECT max(salary) as salary, dno FROM employee

WHERE sex=’F’

GROUP BY dno) AS S WHERE S.salary = E.salary AND S.dno=E.dno ORDER BY salary;

-- meme chose avec join

SELECT fname, lname, salary, dno

FROM employee NATURAL JOIN (SELECT max(salary) as salary, dno, sex FROM employee

WHERE sex=’F’

GROUP BY dno,sex) AS S ORDER BY dno;

-- encore la meme chose avec join et -- avec HAVING

SELECT fname, lname, salary, dno

FROM employee NATURAL JOIN (SELECT max(salary) as salary, dno, sex FROM employee

GROUP BY dno,sex HAVING sex=’F’ ) AS S ORDER BY dno;

-- les moyennes des salaires par departement avec les nom de departements SELECT S.salary, D.dnumber, D.dname

FROM

(SELECT dno, CAST( avg(salary) AS Dec(8,2) ) AS salary FROM employee E

GROUP BY dno

) AS S, department D WHERE S.dno = D.dnumber;

4 INSERT DELETE

-- INSERT INTO R(A1,...,An) VALUES (v1,...,vn);

(4)

INSERT INTO employee(ssn,fname,lname) VALUES (’765432999’,’John’,’Updike’);

aINSERT INTO employee(ssn,fname,lname)

VALUES (’765432990’,’Andre’,’Kapuscinski’), (’765432989’,’Andre’,’Kapuscinski’);

-- il est possible de faire aussi -- INSERT INTO R(A1,...,An) -- SELECT ... ;

-- c’est-a-dire inserer des lignes qui -- resultent d’une requete SELECT SELECT lname,fname

FROM employee

WHERE lname LIKE ’Kapus%’;

-- Pour supprimer des lignes:

-- DELETE FROM <table> WHERE <condition> ; DELETE FROM employee

WHERE lname LIKE ’Kapus%’;

SELECT lname,fname FROM employee

WHERE lname LIKE ’Kapus%’;

5 UPDATE

-- UPDATE R

-- SET attr1=val1, ..., attrn=valn -- WHERE <condition>;

INSERT INTO employee(ssn,fname,lname)

VALUES (’765432990’,’Andre’,’Kapuscinski’), (’765432989’,’Andre’,’Kapuscinski’);

SELECT * FROM employee WHERE lname LIKE ’Kapus%’;

UPDATE employee

SET fname=’Joseph’,lname=’Kapusta’,dno=7 WHERE ssn=’765432989’;

SELECT * FROM employee WHERE lname LIKE ’Kapus%’;

-- UPDATE product

-- SET prix = prix * 1.1;

6 CONSTRAINT

-- NOT NULL

-- PRIMARY KEY sont toujours NOT NULL meme si rien ecrit explicitement

(5)

-- UNIQUE peuvent etre NULL, en particulier plusieurs lignes -- avec valeurs NULL sont possibles

-- FOREIGN KEY les attributs references par FOREING KEY doivent etre -- declares PRIMARY KEY ou UNIQUE dans l’autre table

-- Si la reference vers un seul attribut alors on peut mettre dans la ligne:

-- REFERENCES <table>(<attribut>) -- ou une clause separee

-- FOREIGN KEY(<liste des attributs>) REFERENCES <table>(<liste des attributs>) -- Si tous les attributs de FOREIGN KEY not null alors il faut

-- avoir une ligne correspondante dans l’autre table.

-- Par contre si certains attributs NULL alors pas de verification de -- reference dans une autre table.

-- REFERENCES <table>(<columns>) ON DELETE NO ACTION|RESTRICT|

-- CASCADE|SET NULL|SET DEFAULT

-- ON UPDATE

-- NO ACTION est defaut, peut etre deferre, RESTRICT ne peut pas etre deferre

-- les contraintes peuvent etre declarees NON DEFERRABLE ou DEFERRABLE -- NON DEFERRABLE est defaut et dans ce cas la contrainte est

-- verifiee a chaque modifications. Par contre DEFERRABLE peut etre DEFERRED -- a la fin de la transaction. Et dans ce cas seulement a la fin

-- la contrainte est verifiee.

-- CREATE TRIGGER name BEFORE|AFTER event -- ON table FOR [EACH] {ROW|STATEMENT}

-- EXECUTE PROCEDURE fun(args);

7 ALTER

-- Supprimer une table:

-- DROP TABLE R;

-- Modifier le schema

-- ALTER TABLE R ADD COLUMN <nom> <type> [<contraintes>];

ALTER TABLE employee ADD COLUMN tel_number CHAR(10) DEFAULT(’0000000000’);

ALTER TABLE employee DROP COLUMN tel_number;

-- ALTER TABLE employee DROP COLUMN tel_number CASCADE;

-- Pour supprimer les contraintes NOT NULL (lles n’ont pas de nom) -- ALTER TABLE <table> ALTER COLUMN <colonne> DROP NOT NULL;

-- Changer DEFAULT d’une colonne

-- ALTER TABLE <table> ALTER COLUMN <nom> SET DEFAULT valeur;

-- ALTER TABLE <table> ALTER COLUMN <col> DROP DEFAULT;

-- Changer le nom d’une colonne

-- ALTER TABLE <table> RENAME COLUMN <toto> TO <nouveau_toto>;

(6)

-- ALTER TABLE employee ADD CHECK (lname <> ’’ AND fname <> ’’);

ALTER TABLE employee DROP CONSTRAINT nom;

ALTER TABLE employee ADD CONSTRAINT nom CHECK (lname <> ’’ AND fname <> ’’);

-- ALTER TABLE DROP CONSTRAINT <nom contrainte>;

-- ALTER TABLE employee DROP CONSTRAINT employee_dno_fkey;

-- ALTER TABLE employee

-- ADD CONSTRAINT dno_cons FOREIGN KEY (dno) REFERENCES department(dnumber) -- ON UPDATE CASCADE;

-- ALTER TABLE project

-- ADD CONSTRAINT dno_cons FOREIGN KEY (dnum) REFERENCES department(dnumber) ---ON UPDATE CASCADE;

--ALTER TABLE dept_locations

--ADD CONSTRAINT dno_cons FOREIGN KEY (dnumber) REFERENCES department(dnumber) --ON UPDATE CASCADE;

--SELECT * FROM employee WHERE dno=5;

--UPDATE department SET dnumber =22 WHERE dnumber = 5;

--SELECT * FROM employee WHERE dno = 22;

--UPDATE department SET dnumber =5 WHERE dnumber = 22;

ALTER TABLE dept_locations DROP CONSTRAINT dno_cons;

ALTER TABLE dept_locations

ADD CONSTRAINT dno_cons FOREIGN KEY (dnumber) REFERENCES department(dnumber)

--INITIALLY IMMEDIATE DEFERRABLE;

INITIALLY DEFERRED DEFERRABLE;

--ALTER TABLE employee ADD CHECK( sex IN (’F’, ’M’) );

--SET CONSTRAINTS [ALL] [list of DEFFERABLE constraints] DEFERRED|IMMEDIATE;

BEGIN;

select * from dept_locations;

--SET CONSTRAINTS ALL DEFERRED;

SET CONSTRAINTS dno_cons DEFERRED;

INSERT INTO dept_locations(dnumber,dlocation) VALUES (66,’Hell’);

select * from dept_locations;

COMMIT;

Références

Documents relatifs

[r]

[r]

[r]

I, Elda de Carvalho, as the coordinator of Moris Foun Group, which weave Tais in Uani Uma Village, declare that our group is surely ready that we agree to the government’s program and

Ecrire une fonction ´ int simul(int m) qui compare le nombre de couleurs utilis´ ees par l’algo exact et par DSATUR pour colorier m graphes al´ eatoires pour n et p fix´

a - Choisir des 7 mots de telle sorte qu'ils ontiennent tous les aratères aentués possibles. b - Erire une page HTML ontenant une ou deux phrases onstitués des

[r]

dans la balise du paragraphe (méthode sans fichier css) pour changer la couleur du mot test en rouge… puis affecter la classe soustitrecolor à la balise. &lt;p&gt; en