Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Création de la FAQ SQL
Voulez-vous participer ?

Le , par Maxence HUBICHE

0PARTAGES

0  0 
Bonjour à tous.

Nous avons l'ambition de fournir aux visiteurs une FAQ sur le langage SQL.

Ceci demande beaucoup de temps.

Voudriez-vous nous épauler ?

Pour cela, nous vous proposons de poster à la suite de ce message, toute question qui vous parait récurrente ou importante, ainsi que la réponse que vous apporteriez.

Merci beaucoup !

Si tout le monde participe un petit peu, il est probable que nous ayons un produit de qualité à proposer pour tous, assez rapidement.

Cordialement,

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de trotters213
Membre expert https://www.developpez.com
Le 02/05/2005 à 18:47

J'ouvre le bal
Quelques questions qui reviennent assez souvent :

Q Comment faire pour exécuter une requête contenant des caractères spéciaux (côtes, doubles côtes,...) ?
R En doublant le caractère en question :
Code : Sélectionner tout
1
2
INSERT INTO t_table 
VALUES ('Aujourd''hui')
Q Comment sélectionner les X "premiers" enregistrements :
R
Code : Sélectionner tout
1
2
SELECT TOP X t_champ 
FROM t_table
Q Comment sélectionner les X "derniers" enregistrements :
R
Code : Sélectionner tout
1
2
3
SELECT TOP X t_champ 
FROM t_table 
ORDER BY t_champ DESC
Q Comment sélectionner entre le X° et le Y° enregistrement (X<Y) :
R
Code : Sélectionner tout
1
2
3
4
5
6
7
SELECT * 
FROM &#40;SELECT TOP Y-X * 
      FROM &#40;SELECT TOP Y * 
            FROM t_table
            ORDER BY t_id&#41; AS t1 
      ORDER BY t_id DESC&#41; AS t2 
ORDER BY t_id
Q Les équivalents pour trouver les limites ?
R
Code : Sélectionner tout
1
2
3
4
5
Access et SQL Server &#58; TOP
MySQL et PostGreSQL &#58; LIMIT
Interbases &#58; ROWS
Paradox &#58; aucun 
Oracle &#58; ROWNUM -- corrigé par fadace
Cf : http://sqlpro.developpez.com/cours/s...onctions/#L1.8
Q Je suis sous MS SQL Server et la taille de mon fichier log n'arrête pas d'augmenter devenant bien plus grande que la taille de ma base , pourquoi et comment faire pour réduire cette taille ?
R Ce fichier conserve toutes les opérations entreprises sur la base (INSERT, DELETE, UPDATE,...) ce qui le fait grandir constamment.
Pour palier à ce problème, vous pouvez utiliser les requêtes suivantes qui tendront à limiter la taille du fichier log :
Code : Sélectionner tout
1
2
3
DBCC SHRINKFILE &#40;votre_base_Log, taille_maximale_voulue_pour_le_fichier_log&#41;
BACKUP LOG votre_base  WITH TRUNCATE_ONLY
DBCC SHRINKFILE &#40;votre_base_Log, taille_maximale_voulue_pour_le_fichier_log&#41;
Attention :
1. Il faut que le mode de recouvrement de la base soit en mode "Complet" (dans l'Entreprise Manager : Propriétés -> Option -> Récupération -> Modèle -> Complet).
2. Un fichier log trop petit peut entrainer une forte baisse des performances voir bloquer le serveur.
0  0 
Avatar de Maxence HUBICHE
Expert éminent https://www.developpez.com
Le 03/05/2005 à 12:50


merci beaucoup !
Au suivant !!!!
0  0 
Avatar de al1_24
Modérateur https://www.developpez.com
Le 03/05/2005 à 15:19
Comment mettre à jour une table à partir des données d'une autre table ?
Code : Sélectionner tout
1
2
3
4
update	MAJ 
set		CHAMP_CIBLE		= SRC.CHAMP_SOURCE
from	TABLE_SOURCE	as SRC
where	MAJ.CLE_JOINTURE = SRC.CLE_JOINTURE
Comment mettre à jour une table à partir des données d'une requête ?
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
update	MAJ
set		CHAMP_CIBLE		= SRC.CHAMP_SOURCE
from	TABLE_CIBLE		as MAJ
	,	&#40;	select 	CLE_JOINTURE
				,	count&#40;*&#41;	as CHAMP_SOURCE	-- exemple...
   			from	TABLE_SOURCE
   			group by CLE_JOINTURE
		&#41;	as SRC
where 	MAJ.CLE_JOINTURE = SRC.CLE_JOINTURE
0  0 
Avatar de Tchinkatchuk
Membre habitué https://www.developpez.com
Le 03/05/2005 à 15:20
Q Comment supprimer des n-uplets en cascade ?
R Juste lister les différentes possibilités afin d'aider à la recherche
1. ON DELETE ...
2. Batch de nuit
3. Procedures stockées
...

C'est un probleme que je me posais et c'est pas facile de trouver toutes les différents façons quand on y connait rien !
Mais je comprendrais que ca ne soit pas approprié
0  0 
Avatar de argoet
Membre confirmé https://www.developpez.com
Le 04/05/2005 à 8:41
Une petite FAQ sur les comparaisons de champs

comparer ce qui est comparable (Surtout sur les dates)
beaucoup de post sur le sujet
0  0 
Avatar de trotters213
Membre expert https://www.developpez.com
Le 06/05/2005 à 10:20
Q Comment utiliser les booléens quand le type n'existe pas ?
R En utilisant BIT(1) ou BYTE (1).
0  0 
Avatar de Maxence HUBICHE
Expert éminent https://www.developpez.com
Le 06/05/2005 à 15:14
Citation Envoyé par Tchinkatchuk
Q Comment supprimer des n-uplets en cascade ?
R Juste lister les différentes possibilités afin d'aider à la recherche
1. ON DELETE ...
2. Batch de nuit
3. Procedures stockées
...

C'est un probleme que je me posais et c'est pas facile de trouver toutes les différents façons quand on y connait rien !
Mais je comprendrais que ca ne soit pas approprié
je n'ai pas très bien compris la solution que tu apportes à la question.
tu pourrais reformuler s'il te plait ?
0  0 
Avatar de Maxence HUBICHE
Expert éminent https://www.developpez.com
Le 06/05/2005 à 15:15
Citation Envoyé par argoet
Une petite FAQ sur les comparaisons de champs

comparer ce qui est comparable (Surtout sur les dates)
beaucoup de post sur le sujet
c'est quoi la question ???
Et quelle est la réponse ???
0  0 
Avatar de Maxence HUBICHE
Expert éminent https://www.developpez.com
Le 06/05/2005 à 15:21
Bon, sinon, je suis en train de peaufiner la première version de cette FAQ.
Actuellement :
2 auteurs et 8 Q/R
bravo pour ceux qui ont participé.
mais à ce rythme, on n'est pas près de rattraper la FAQ Access (avec ses 607 Q/R)

Je fais quelques demandes en interne pour pouvoir publier, et je vous donne le lien, dans la foulée, pour que vous voyez ce que cela donne

Allez !
Courage !

On reprend à partir de là

0  0 
Avatar de argoet
Membre confirmé https://www.developpez.com
Le 06/05/2005 à 16:24
Comment Ajouter des jours / Heures / Minutes / Secondes à une date (ORACLE ?) :

La Pseudo Colonne SYSDATE Vous permet de connaitre la date et l'heure courante de votre systeme d'exploitation

Ajouter 1 à SYSDATE permet d'incrementer votre date d'une journée (Sysdate + 1)

L'utilisation des Fractions De Date : +1 Heure , + 1 minute , + 1 seconde .
exemples:

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> alter session set NLS_DATE_FORMAT='DD/MM/YYYY HH24&#58;MI&#58;SS';

Session altered.

SQL> select sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 from dual;

SYSDATE             SYSDATE+1/24        SYSDATE+1/1440      SYSDATE+1/86400
------------------- ------------------- ------------------- -------------------
06/05/2005 16&#58;20&#58;57 06/05/2005 17&#58;20&#58;57 06/05/2005 16&#58;21&#58;57 06/05/2005 16&#58;20&#58;58

SQL> select sysdate J, sysdate+30/&#40;24*60*60&#41; J_PLUS_30_SECS from dual;

J                   J_PLUS_30_SECS
------------------- -------------------
06/05/2005 16&#58;21&#58;58 06/05/2005 16&#58;22&#58;28

Expression de Date : Des Exemples
================================

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Maintenant &#58;                       SYSDATE
Demain / la Prochaine Journee &#58;    SYSDATE + 1
Dans 7 Jour &#58;                      SYSDATE + 7
Dans 1 heure &#58;                     SYSDATE + 1/24
Dans 3 heures &#58;                    SYSDATE + 3/24
Dans 1/2 Heure &#58;                   SYSDATE + 1/48
Dans 10 minutes &#58;                  SYSDATE + 10/1440
Dans 30 Secondes &#58;                 SYSDATE + 30/86400
Demain à 0h  &#58;                     TRUNC&#40;SYSDATE + 1&#41;
Demain à 8h du Matin &#58;             TRUNC&#40;SYSDATE + 1&#41; + 8/24 

Lundi Prochain à Midi &#58;            
Si NLS_TERRITORY='FRANCE'          NEXT_DAY&#40;TRUNC&#40;SYSDATE&#41;, 'LUNDI'&#41; + 12/24 
Sinon                              NEXT_DAY&#40;TRUNC&#40;SYSDATE&#41;, 'MONDAY'&#41; + 12/24      

1er Jour Du Mois Suivant à 0h &#58;    TRUNC&#40;LAST_DAY&#40;SYSDATE &#41; + 1&#41;  
1er Jour Du Mois Courant à 0h &#58;    TRUNC&#40;LAST_DAY&#40;ADD_MONTHS&#40;SYSDATE,-1&#41;&#41;&#41; + 1
0  0