Overblog Suivre ce blog
Administration Créer mon blog
4 juillet 2012 3 04 /07 /juillet /2012 01:11

 

SQL BETWEEN.

Comment utiliser l'opérateur sql BETWEEN d'Oracle.
Comment rechercher des lignes comprises dans un intervalle de valeurs avec BETWEEN.

Opérateur SQL BETWEEN dans une condition.

L'opérateur BETWEEN est utilisé pour tester un intervalle de valeurs.
La condition BETWEEN A and B évalue à VRAI si la valeur est supérieure ou égale à A et inférieur ou égal à B.
Si NOT BETWEEN est utilisé, le résultat sera l'inverse.

Syntaxe SQL BETWEEN.

 
 expression { [NOT] BETWEEN A AND B } 

 

Exemple Oracle Sql BETWEEN.

 
 SQL> SELECT * FROM between_test; I DATE_NAIS AGE - ---------- ---------- A 15/08/1972 40 B 15/08/1971 41 C 15/08/1970 42 D 15/08/1969 43 E 15/08/1968 44 

 


 

SQL BETWEEN VARCHAR2.

 
 SQL> SQL> SELECT * FROM between_test WHERE id_j BETWEEN 'C' AND 'E'; I DATE_NAIS AGE - ---------- ---------- C 15/08/1970 42 D 15/08/1969 43 E 15/08/1968 44 SQL> 

BETWEEN recherche dans un intervalle de valeurs string de type VARCHAR2.


 

SQL BETWEEN NUMBER.

 
 SQL> SQL> SELECT * FROM between_test WHERE age BETWEEN 41 AND 43; I DATE_NAIS AGE - ---------- ---------- B 15/08/1971 41 C 15/08/1970 42 D 15/08/1969 43 SQL> 

BETWEEN recherche dans un intervalle de valeurs numériques de type NUMBER.


 

SQL BETWEEN DATE.

 
 SQL> SQL> SELECT * FROM between_test WHERE date_nais BETWEEN TO_DATE('16/08/1970') AND TO_DATE('16/08/1972'); I DATE_NAIS AGE - ---------- ---------- A 15/08/1972 40 B 15/08/1971 41 SQL> 

BETWEEN recherche dans un intervalle de valeurs temps de type DATE.


 

SQL NOT BETWEEN.

 
 SQL> SQL> SELECT * FROM between_test 2 WHERE age NOT BETWEEN 41 AND 43; I DATE_NAIS AGE - ---------- ---------- A 15/08/1972 40 E 15/08/1968 44 SQL> 

BETWEEN recherche en dehors d'un intervalle de valeurs numériques de type NUMBER.


 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
Repost 0
Published by Oracle SQL - dans OPÉRATEURS SQL
commenter cet article
2 juillet 2012 1 02 /07 /juillet /2012 22:17

 

SQL LIKE.

Comment utiliser l'opérateur SQL LIKE d'Oracle.
Comment rechercher une partie d'une chaîne de caractères dans une colonne avec LIKE.
Comment comparer partiellement des chaines de caractères avec LIKE.

Utiliser l'opérateur LIKE dans une condition.

L'opérateur LIKE (expression) compare partiellement des chaînes de caractères.
Le symbole ou joker % peut remplacer un caractère ou un nombre quelconque de caractères.
Le symbole ou joker _ (underscore) peut remplacer un caractère unique.

Syntaxe SQL LIKE.

 
 char1 [ NOT ] ( LIKE ) expr [ ESCAPE esc_char ] 

char1 est la colonne de caractères, c'est la valeur de recherche appelé.
expr est généralement un littéral, la valeur recherchée.
esc_char est un littéral, appelé caractère d'échappement (ESCAPE CHARACTER).

 

 

Exemple Oracle sql LIKE.

 
 SQL> SQL> SELECT * FROM table_like; COL_1 -------------------- DATA_BASE_ADMIN DATA BASE ADMIN DATABASE ADMIN DATE SQL> SELECT * FROM table_like WHERE col_1 LIKE 'DAT_%'; COL_1 -------------------- DATA_BASE_ADMIN DATA BASE ADMIN DATABASE ADMIN DATE SQL> 

Ici LIKE recherche une expression commençant par DAT incluant ensuite n'importe quel caractère unique (blanc inclus) suivi de n'importe quels autres caractères (%).


 

 
 SQL> SQL> SELECT * FROM table_like WHERE col_1 LIKE '%DATA_%'; COL_1 -------------------- DATA_BASE_ADMIN DATA BASE ADMIN DATABASE ADMIN SQL> 

Ici LIKE recherche une expression commençant par n'importe quel caractères (%) suivi de DATA incluant ensuite n'importe quel caractère unique (blanc inclus) suivi de n'importe quels autres caractères (%).


 

 
 SQL> SQL> SELECT * FROM table_like WHERE col_1 LIKE 'DATA\_%' ESCAPE '\'; COL_1 -------------------- DATA_BASE_ADMIN SQL> 

Ici LIKE recherche une expression commençant par DATA_ suivi de n'importe quel autre caractères (%).
Afin de ne pas être interpréter comme le joker underscore (_) on utilise la clause ESCAPE en définissant '\' comme caractère d'échappement ainsi le caractère qui suit ce caractère d’échappement '\' est interprété comme un caractère et non comme un joker underscore (_).


 

 
 SQL> SQL> SELECT * FROM table_like WHERE col_1 LIKE '%\_ADMIN' ESCAPE '\'; COL_1 -------------------- DATA_BASE_ADMIN SQL> 

Ici LIKE recherche une expression terminant par _ADMIN et commençant par n'importe quels autres caractères (%).
Afin de ne pas être interpréter comme le joker underscore (_) on utilise la clause ESCAPE en definissant '\' comme caractère d'échappement ainsi le caractère qui suit ce caractère d’échappement '\' est interprété comme un caractère et non comme un joker underscore (_).

 

 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
 
Repost 0
Published by Oracle SQL - dans OPÉRATEURS SQL
commenter cet article
11 mars 2012 7 11 /03 /mars /2012 13:32

 

Les Opérateurs d'Ensemble Oracle.

C'est quoi un Opérateur d'Ensemble Oracle. ?
C'est quoi un UNION ALL dans oracle. ?
C'est quoi un MINUS dans oracle. ?
C'est quoi un INTERSECT dans oracle. ?

 

L'opérateur d'ensemble combine le résultat de 2 ou plusieurs requêtes en un unique résultat.
Il n'y pas de priorité au niveau de l’exécution de ces requêtes composées, l'exécution se fait du plus imbriqué au moins imbriqué. Cependant des parenthèses peuvent définir l'ordre d'exécution.

Oracle retire automatiquement les lignes de doublons sauf si l'opérateur utilisé est UNION ALL.

Afin de pouvoir exécuter des requêtes composées, il est impératif que les expressions dans les listes SELECT comportent le même nombre de colonnes et aussi le même type de données.
La clause ORDER BY peut être utilisée en fin de requêtes, avec comme arguments les noms de colonnes du premier SELECT.

 

Description des Opérateurs Oracle UNION, UNION ALL, INTERSECT et MINUS.

 

UNION et UNION ALL.

SQL UNION ALL

 



L'opérateur UNION combine le résultat de deux requêtes SQL en éliminant les lignes retournées par les deux requêtes (doublons).
UNION agit sur toutes les colonnes.

L'opérateur UNION ALL retourne toutes les lignes sans éliminer les doublons.

 

INTERSECT.

SQL INTERSECT

 



L'opérateur INTERSECT retourne uniquement le résultat communs aux deux requêtes.

INTERSECT agit sur toutes les colonnes.
L'inversion des tables dans une intersection ne change pas le résultat.



 

MINUS.

SQL MINUS

 



L'opérateur MINUS retourne les lignes de la première requête qui ne se trouvent pas dans la deuxième requête.

MINUS agit sur toutes les colonnes.
L'inversion des tables avec MINUS change le résultat.



 

 

Haut de Page www.dba-ora.fr


Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Instruction SQL SELECT FROM WHERE
• Oracle SQL SOUS-REQUETES SELECT IN, ANY, ALL
• Instruction SQL GROUP BY
Repost 0
Published by Daniel R. - dans OPÉRATEURS SQL
commenter cet article
19 juin 2011 7 19 /06 /juin /2011 13:05

 

Opérateurs IN - ANY - ALL.

Comment comparer des valeurs avec les opérateurs select IN, ANY, et ALL dans une requête.

La sous-interrogation doit être placée entre parenthèses, son résultat sera utilisé par la requête de niveau supérieur pour la comparaison.

Les opérateurs = > < >= <= ramènent une ligne.
Les opérateurs IN, ANY et ALL ramènent plusieurs lignes.

 

Opérateur de comparaison IN, ANY et ALL.

OPERATEURS DE COMPARAISONS

RESULTATS

WHERE salaire IN(1200,1600,2000,2900) SALAIRE doit être égale à une des valeurs dans IN()
WHERE salaire NOT IN(1200,1600,2000,2900) SALAIRE ne doit pas être égale à une des valeurs dans IN()
WHERE salaire > ANY(1200,1600,2000,2900) SALAIRE doit être supérieur à au moins une des valeurs.
Donc plus que le minimum (+ de 1200).
WHERE salaire < ANY(1200,1600,2000,2900) SALAIRE doit être inférieur à au moins une des valeurs.
Donc moins que le maximum (- de 2900).
WHERE salaire > ALL(1200,1600,2000,2900) SALAIRE doit être supérieur au maximum de toutes les valeurs.
Donc plus que le maximum (+ de 2900).
WHERE salaire < ALL(1200,1600,2000,2900) SALAIRE doit être inférieur au minimum de toutes les valeurs.
Donc moins que le minimum (- de 1200).

 

Opérateur IN et NOT IN.

 
 SQL> SELECT ename, job, sal FROM EMP 2 WHERE sal IN(1300,1500,2450); ENAME JOB SAL ---------- --------- ---------- CLARK MANAGER 2450 TURNER SALESMAN 1500 MILLER CLERK 1300 SQL> SELECT ename, job, sal FROM EMP 2 WHERE sal NOT IN(1300,1500,2450); ENAME JOB SAL ---------- --------- ---------- SMITH CLERK 800 ALLEN SALESMAN 1600 WARD SALESMAN 1250 JONES MANAGER 2975 MARTIN SALESMAN 1250 BLAKE MANAGER 2850 SCOTT ANALYST 3000 KING PRESIDENT 5000 ADAMS CLERK 1100 JAMES CLERK 950 FORD ANALYST 3000 11 rows selected. SQL> 

 

Opérateur supérieur > ANY et inférieur < ANY.

 
 SQL> SELECT ename, job, sal FROM EMP 2 WHERE sal > ANY(1300,1500,2450); ENAME JOB SAL ---------- --------- ---------- ALLEN SALESMAN 1600 JONES MANAGER 2975 BLAKE MANAGER 2850 CLARK MANAGER 2450 SCOTT ANALYST 3000 KING PRESIDENT 5000 TURNER SALESMAN 1500 FORD ANALYST 3000 8 rows selected. SQL> SELECT ename, job, sal FROM EMP 2 WHERE sal < ANY(1300,1500,2450); ENAME JOB SAL ---------- --------- ---------- SMITH CLERK 800 ALLEN SALESMAN 1600 WARD SALESMAN 1250 MARTIN SALESMAN 1250 TURNER SALESMAN 1500 ADAMS CLERK 1100 JAMES CLERK 950 MILLER CLERK 1300 8 rows selected. SQL> 

 

Opérateur supérieur > ALL et inférieur < ALL.

 
 SQL> SELECT ename, job, sal FROM EMP 2 WHERE sal < ALL(1300,1500,2450); ENAME JOB SAL ---------- --------- ---------- SMITH CLERK 800 WARD SALESMAN 1250 MARTIN SALESMAN 1250 ADAMS CLERK 1100 JAMES CLERK 950 SQL> SELECT ename, job, sal FROM EMP 2 WHERE sal > ALL(1300,1500,2450); ENAME JOB SAL ---------- --------- ---------- JONES MANAGER 2975 BLAKE MANAGER 2850 SCOTT ANALYST 3000 KING PRESIDENT 5000 FORD ANALYST 3000 SQL> 
Repost 0
Published by Daniel Roesch - dans OPÉRATEURS SQL
commenter cet article
18 juin 2011 6 18 /06 /juin /2011 14:16

 

SQL GROUP BY clause.

Comment regrouper des lignes de ma table avec la clause de regroupement GROUP BY ?.

La clause GROUP BY permet de regrouper (agrégats) des enregistrements selon la valeur d'une expression.

 

SYNTAXE CLAUSE GROUP BY

 
 SELECT [ { { DISTINCT | UNIQUE } | ALL } ] [ schema. ] { table | view | materialized view } .* | column | expr [ [ AS ] c_alias ] FROM { table1 [, table2 ]...} [ WHERE conditions ] [ GROUP BY expr1 [, expr2]...] 

 

Quelques FONCTIONS de GROUPE utilisées avec GROUP BY.

FONCTION de GROUPE

Descriptions

AVG([DISTINCT | ALL] expr) Moyenne de expr
COUNT({* | [DISTINCT | ALL] expr}) Nombre de lignes
MAX([DISTINCT | ALL] expr) Maximum de expr
MIN([DISTINCT | ALL] expr) Minimum de expr
SUM([DISTINCT | ALL] expr) Somme de expr

 

Moyenne des salaires par Dept et Job.

 
 SQL> SELECT deptno, job, AVG(sal) AS "Moyenne Salaire" 2 FROM emp 3 GROUP BY deptno, job; DEPTNO JOB Moyenne Salaire ---------- --------- --------------- 20 CLERK 950 30 SALESMAN 1400 20 MANAGER 2975 30 CLERK 950 10 PRESIDENT 5000 30 MANAGER 2850 10 CLERK 1300 10 MANAGER 2450 20 ANALYST 3000 9 rows selected. 

 

Moyenne des salaires par Dept et Job lorsque JOB= CLERK uniquement.

 
 SQL> SELECT deptno, job, AVG(sal) AS "Moyenne Salaire" 2 FROM emp 3 WHERE job = 'CLERK' 4 GROUP BY deptno, job; DEPTNO JOB Moyenne Salaire ---------- --------- --------------- 20 CLERK 950 30 CLERK 950 10 CLERK 1300 SQL> 

 

Fonction de groupe AVG et COUNT sans la clause GROUP BY.

 
 SQL> SELECT AVG(sal) AS "Moyenne Salaire", 2 COUNT(empno) AS "Nbre d'employes", 3 COUNT(DISTINCT(deptno)) AS "Dept Distinct", 4 FROM emp 5 WHERE job = 'CLERK'; Moyenne Salaire Nbre d'employes Dept Distinct --------------- --------------- ------------- 1037.5 4 3 SQL> 

 

Fonction de groupe AVG et COUNT AVEC la clause GROUP BY.

 
 SQL> SELECT job, 2 AVG(sal) AS "Moyenne Salaire", 3 COUNT(empno) AS "Nbre d'employes", 4 COUNT(DISTINCT(deptno)) AS "Dept Distinct" 5 FROM emp 6 GROUP BY job; JOB Moyenne Salaire Nbre d'employes Dept Distinct --------- --------------- --------------- ------------- ANALYST 3000 2 1 CLERK 1037.5 4 3 MANAGER 2758.33 3 3 PRESIDENT 5000 1 1 SALESMAN 1400 4 1 SQL> 

 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Update conditionnées de Tables avec MERGE INTO
• Oracle SQL GROUP BY ROLLUP
• Oracle SQL GROUP BY CUBE
• Instruction SQL SELECT FROM WHERE
Repost 0
Published by Daniel Roesch - dans OPÉRATEURS SQL
commenter cet article
14 mai 2011 6 14 /05 /mai /2011 23:48

 

GROUP BY CUBE.

Vous pouvez utiliser l'extension CUBE pour produire des valeurs sous-total en l'utilisant avec la fonction SUM(). L'opération CUBE groupe les lignes sélectionnées sur la base des valeurs de toutes les combinaisons possibles des expressions dans la spécification, et renvoie une seule ligne d'informations succinctes sur chaque groupe. Vous pouvez utiliser l'opération CUBE pour produire des valeurs des données croisées.
Les fonctions d'agrégations telles que SUM, COUNT, AVG, MIN, MAX peuvent être utilisées.

Le CUBE s’exécute indépendamment de toute hiérarchie des métadonnées dans votre système. Leurs calculs sont basés entièrement sur les colonnes spécifiées dans l'instruction SELECT dans lequel ils apparaissent.
CUBE ne restreint pas la capacité des colonnes de la clause GROUP BY.

Ici, nous allons comparer le résultat de 2 requêtes, l'une avec un GROUP BY et l'autre avec un GROUP BY CUBE.

 

SELECT...GROUP BY.

 
  SELECT DEPTNO, JOB, SUM (SAL) FROM SCOTT.EMP GROUP BY (DEPTNO, JOB) ORDER BY DEPTNO; 
DEPTNO JOB SUM (SAL)
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

 

SELECT...GROUP BY CUBE.

 
  SELECT DEPTNO, JOB, SUM (SAL) FROM SCOTT.EMP GROUP BY CUBE (DEPTNO, JOB) ORDER BY DEPTNO ASC; 
DEPTNO JOB SUM (SAL)
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10   8750
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
20   10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30   9400
  ANALYST 6000
  CLERK 4150
  MANAGER 8275
  PRESIDENT 5000
  SALESMAN 5600
    29025

 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Update conditionnées de Tables avec MERGE INTO
• Oracle SQL GROUP BY ROLLUP
Repost 0
Published by Daniel Roesch - dans OPÉRATEURS SQL
commenter cet article
14 mai 2011 6 14 /05 /mai /2011 21:22

 

GROUP BY ROLLUP.

Vous pouvez utiliser l'extension ROLLUP pour produire des valeurs sous-total en l'utilisant avec la fonction SUM(). Lorsqu'il est utilisé avec SUM, ROLLUP génère des sous-totaux par rapport au niveau le plus détaillé au grand total. Les fonctions d'agrégations telles que SUM, COUNT, AVG, MIN, MAX peuvent être utilisées.

Le ROLLUP s’exécute indépendamment de toute hiérarchie des métadonnées dans votre système. Leurs calculs sont basés entièrement sur les colonnes spécifiées dans l'instruction SELECT dans lequel ils apparaissent.
ROLLUP ne restreint pas la capacité des colonnes de la clause GROUP BY.

Ici, nous allons comparer le résultat de 2 requêtes, l'une avec un GROUP BY et l'autre avec un GROUP BY ROLLUP.

 

SELECT...GROUP BY.

 
  SELECT DEPTNO, JOB, SUM (SAL) FROM SCOTT.EMP GROUP BY (DEPTNO, JOB) ORDER BY DEPTNO; 
DEPTNO JOB SUM (SAL)
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600

 

SELECT...GROUP BY ROLLUP.

 
  SELECT DEPTNO, JOB, SUM (SAL) FROM SCOTT.EMP GROUP BY ROLLUP (DEPTNO, JOB) ORDER BY DEPTNO; 
DEPTNO JOB SUM (SAL)
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10   8750
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
20   10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30   9400
    29025

 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Update conditionnées de Tables avec MERGE INTO
Repost 0
Published by Daniel Roesch - dans OPÉRATEURS SQL
commenter cet article