mardi 4 décembre 2007

Notes de cours sur ma formation : " Language T-SQL"

Language T-SQL: (TRANSACT SQL propres à Microsoft - extention + languade de prog intégré)


Ligne - Row

colonne - Column

exemple d'intro : SELECT loc FROM dept

obtenir des données : SELECT

Language de manip des données :

INSERT
UPDATE
DELETE

Création de donnée de base de données :

CREATE
ALTER
DROP
RENAME
TRUNCATE

contrôle de transaction :

COMMIT

ROLLBACK

Niveau de Controle des données (permitions):

GRANT
REVOKE


touche F5 pour executer le code ;)

on peut lui demander juste d'executé du code en surlignat le code avant f5 il executera seulement le code selectionner

pour rajouté des com :

/*

totototo

*/


une valeur inconue (différent de 0 que l'on ne connait pas ) on utlilise : NULL

la commande distinc permet de supprimé les doublons : DISTINCT

ex : Select DISTINCT deptno

From emp

afficher la structure des tables :

EXEC sp_columns dept



Exercice 1 :

A) Montrer la structure de la table "EMP"

EXEC sp_columns emp

b) Créer une requête pour afficher :

- Empno

- ename

- job

- hiredate

EXEC sp_columns emp

SELECT empno, ename, job, hiredate

FROM emp


EXERCICES 2:


Créer une requête pour afficher la liste des jobs sans doublon:

Select DISTINCT job

From emp


EXERCICES 3:


afficher le nom et le job séparés par une virgule et un espace

le nom de cette colonne est "employés et titres"

EXEC sp_columns emp

SELECT ename + ', '+ job

AS 'employés et titres'

FROM emp


EXERCICES 4:


créer une requête pour afficher toutes les données (sauf HireDate) de la table EMP.

Chaque données est séparée par une virgule.

Le nom de la colonne est LA SORTIE.


EXEC sp_columns emp

SELECT str(empno) + ', ' + ename + ', ' + job + ', ' + str (mgr)

AS 'LA SORTIE'

FROM emp


rem : STR( ) permet de lui définir que la donnée tenir compe que c'est que du texte pour pas quil en fasse un calcul mathématique ^^



Chapitre 2 :

SELECT ....

FROM .....

WHERE ...... (restreindre les ligne retournées)

ex :


SELECT ename, job, deptno

FROM emp

WHERE deptno=10

=> il afiche le num de département 10 sur 3 colonnes

pour comparer une chaine de caractère on utilise l'apostraphe (').


ex :

SELECT ename, job, deptno

FROM emp

WHERE ename='james'

OPERATEUR DE COMPARAISON :

= égal à

> supérieur à

>= sup ou égal à

< inf à

<= inf ou égal à

<> ou != différent de (utilisé de pref != pour compatibilité oracle par ex ;)

exemples :

SELECT ename, sal, comm

FROM emp

Where sal<comm

autres opérateurs :

BETWEEN ... AND .... entre deux valeurs (inclues)

IN(list) correspondant à une valuer de la liste

LIKE répondant au modèle

IS NULL est une valeur nulle

BETWEEN :

ex :

salaire entre 1000 et 1500

SELECT ename, sal

FROM emp

Where sal BETWEEN 1000 and 1500

IN :

SELECT ename, sal,mgr

FROM emp

WHERE mgr IN (7902, 7608)

LIKE :

% zéro ou plusierus caractères

[] un caractère de la plage spécifiée

_ un caractère

ex :

like '[a]%'

=> tt les mot qui commence par a

ex:

select ename

from emp

where ename like 's%'

=> tt les mots qui commence par s

ex :

select ename

from emp

where ename like 's[a-e]'

=> tt les mot qui commence par s et que le 2ème lettre comprise entre a et e

LIKE option ESCAPE:

pour rechercher un caractère mais qui est utilisé comme opérateur dans la commande

ex :

select ename

from emp

where ename like '%a\_b%' escape '\'

IS NULL :

détermine si les valeurs sont nulles

ex :

select ename, mgr

from emp

where mgr IS NULL


Opérateurs logiques :

AND retourne TRUE si les deux conditions sont vraies

OR retourne TRUE si au moin une condition est vraie

NOT retourne TRUE si la condition est fausse (FALSE)

ex :

SELECT empno, ename, job, sal

FROM emp

WHERE sal>=1100

AND job ='clerk'

Règle de priorité :

1) opérateur de comparaison

2) NOT

3) AND

4) OR

=> il faut utilisé des parenthèses pour "forcer" l'ordre de priorité.

ORDER BY

=> trier les lignes par ordre :

ASC (croissant)

DESC (décroissant)

EXERCICES :


Créer une requête pour afficher le nom et le salaire des employés ayant plus de $2850

SELECT ename, sal

From emp

WHERE sal>2850

Créer une requête pour afficher le nom et le numéro de département de l'employé numéros 7566

SELECT ename, deptno

From emp

where empno=7566

Créer une requête pour afficher le nom et le salaire des employés dont le salaire n'est pas compris entre $1500 et $2850

SELECT ename, sal

FROM emp

WHERE sal not between 1500 and 2850

affiché le nom, le métier et la date d'engagement des employés engagés entre le 20 février 1981 et le 1er mars 1981.

Trier le résultat par ordre d'arrivée dans la société.


Select ename, job, hiredate

From emp

Where hiredate between '02/02/1981' and '03/01/1981'

order by hiredate asc

Afficher le nom et le numéros de département des employés dont le numéro de département est soit 10, soit 30.

Trier le résultat par ordre alphabétique sur le nom


Select ename, deptno

FROM emp

Where deptno=10 or deptno=30

order by ename asc


ou

Select ename, deptno

FROM emp

Where deptno in (10,30)

order by ename asc

Afficher le nom et le salaire des employés qui ont plus de $1500 et sont dans le département 10 ou 30

libeller les collonnes employés et salaire mensuel

SELECT ename as 'employés' , sal as 'salaire mensuel'

FROM emp

Where deptno in (10,30) and sal>1500

Afficher le nom, le salaire et la commission de tous les employés qui ont une commision.

Trier les données par ordre déroissant de salaire et de commision

SELECT ename, sal, comm

from emp

Where comm is not null

order by sal, comm desc

Donner le nom des employés dont la 3ème lettre est un A

SELECT ename

from emp

Where ename like '__A%'

Afficher les employés dont leur nom sontient la séquence LL et qui appartiennent au département 30 ou dont leur manager porte le numéro 7782

SELECT ENAME

FROM emp

where ename like '[LL]' and deptno=30 or MGR=7782

Afficher le nom et le titre de tous les employés qui n'ont pas de manager

SELECT ename, job

FROM emp

Where mgr is 'null'

(tips : isnuméric ( ) => permet de voir si ya un nombre dans la collone il dira si c vrai 1 si c faut 0)

Afficher le nom, le titre et le salaire de tous les employés dont le job n'est ni clerk, ni analyst et dont le salaire n'est ni $1000, ni $3000, ni $5000.

SELECT ename, job

FROM emp

WHERE job <>'clerk' and job <> 'analyst' and not sal=1000 and not sal=3000 and not sal=5000

Tips : (pour avoir de l'aide selectionner la commande et faite F1)

CHAPITRE 3:

... voir slide

Fonctions "Numériques"

ROUND arrondir un nombre décimal

FLOOR tronquer un nombre décimal en nombre

POWER Calculer X puissance Y

Fonction " dates"

GETDATE() date actuelle

DATEDIFF(Month,..) nombre de mois entre 2 dates

DATEADD(month,...) ajoute nmois à une date

DAY(...)

..... voir slide

Fonction ISNULL

=> convertion d'un null en une valeur définie

=> en date

=> en nombre

=> en ...

Exercices :

Afficher le numéro, le nom, le salaire et le salaire augmenté de 15% (en nombre entier) des employés.(+ nom salaire +15% a cette dernière collones)

SELECT empno, ename, sal, round (sal+(sal/100*15),0) as 'SALAIRE+15%'

FROM emp

Modifier cette cequête pour ajouter une colonne contenant la différence de salaire entre l'ancien salaire et le nouveau salaire.

SELECT empno, ename, sal, round (sal+(sal/100*15),0) salaire,(round ((sal/100*15),0))
FROM emp

Pour chaque employé, calculé le nombre de mois écoulés entre leur date d'engagement et aujourd'hui

Libeller cette colonne "mois"

Trier le résultat de l'employé le plus ancien au plus récent.

SELECT ename, DATEDIFF (month,hiredate,getdate()) as 'Mois'

FROM emp

order by mois desc

Afficher les employés :

Dont le nom commence par J,A ou M;

Leur nom en minuscule;

Le nombre de caractères qui composent leur nom.

SELECT lower (ename), len (ename) as 'nombres de caractères pour le nom'
from emp
WHERE left (ename,1) in ('j','a','m')

Ecrire une requête qui affiche pour chaque employé:

- <nom_employé> gagne <salaire> par moi, mais voudrait <3_fois_salaires>

- libeller cette colonne "salaire de rêve"

SELECT ename, sal as 'salaire par moi', sal*3 as 'salaire de rêve'

From emp

exercice 6:

select ename, replicate ( '$',15 - len(sal)) + itrim(str(sal)) as 'salaire'

from emp



CHAPITRE 4

Tables multiples

exercice :

select ename, emp.deptno, dname

from dept, emp

where emp.deptno = dept.deptno


pour vérif la jointure et corespondance des 2 colonnes :

select ename, emp.deptno,dept.deptno, dname

from dept, emp

where emp.deptno = dept.deptno

Afficher le nom, le nom du département et la ville de travail de tous les employés qui ne possèdent pas une commission.

select ename, dept.dname,dept.deptno, loc, grade, emp.comm

from dept, emp, salgrade

where comm is null and emp.deptno = dept.deptno and sal between losal and hisal


tips : on utilise tj is null et nan = null sinan sa marche pas ;)

Afficher la liste de tous les jobs et la localité qui sont dans le département 30.

select job, loc, dep


Chapitre 5:

exercices:

afficher le minimum, le maximum, la somme et la moyenne des salaires pour chaque type de job.

select job,
min (sal) "salaire minimum",

max (sal) "salaire maximum",

sum (sal) "somme des salaires",

avg (sal) "moyenne des salaires"

From emp

group by job


Chapitre 6 : sous requêtes SQL


Afficher le nom et la date d'engagement de tous les employés du même département que Blake.

Blake exclut

select ename, hiredate

from emp

where deptno =

(select deptno

from emp

where ename = 'blake')

and ename != 'blake'

Afficher le numéro et le nom de tous les employés qui ont plus du salaire moyen.

Trier les résultats par ordre décroissant.

Select empno, ename

from emp

WHERE SAL >

(select avg(sal)

from emp)

order by sal desc

Aucun commentaire: