Partage
  • Partager sur Facebook
  • Partager sur Twitter

FAQ du forum Base de données

À lire avant de poster

16 octobre 2011 à 4:50:27

SGBD, SGBDR... ça veut dire quoi ?
Catégorie : Général

Le sigle SGBD veut dire système de gestion de bases de données. SGBDR désigne donc les systèmes qui travaillent sur les bases de données relationnelles.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 4:54:09

Quels sont les différents SGBDR ?
Catégorie : Général

Voici une liste de quelques SGBD. Parmi les plus populaires, notons MySQL, PostgreSQL, Oracle Database, SQL Server et SQLite.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 5:13:36

Qu'est-ce qu'un index ?
Catégorie : Général

Lorsqu'un index est créé sur une colonne, cette dernière est triée puis stockée par le SGBDR. Ce procédé permet donc d'améliorer la vitesse d'exécution des requêtes SELECT, au détriment des INSERT, DELETE et UPDATE.

Il est souvent plus simple de comprendre le concept par l'exemple. Imaginons que nous avons écrit chacun des mots de la langue française, ainsi que leur définition, sur un bout de papier. Plaçons tous ses bouts de papier dans un sac. Si je vous demandais de trouver la définition du mot ordinateur, que feriez-vous ? Vous devriez sortir un bout de papier à la fois du sac, regarder si c'est le bon mot, et poursuivre votre recherche si ce n'est pas le cas. Ce serait évidemment très long.
Maintenant, plutôt que les bouts de papier, prenez un dictionnaire. Les mots sont triés par ordre alphabétique. Il est donc très simple d'y trouver le mot "ordinateur" : vous n'avez qu'à parcourir les mots jusqu'à celui que vous cherchez.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 5:22:26

Qu'est-ce qu'une contrainte ?
Catégorie : Général

Une contrainte est une sorte de condition données à une colonne ou à une table. Par exemple, utiliser une contrainte UNIQUE permet de s'assurer de ne pas retrouver deux valeurs identiques dans celle-ci. Une contrainte CHECK interdit l'insertion ou la mise à jour d'une valeur qui ne respecte pas une condition donnée.

Les clés primaires (PRIMARY KEYS) et clés secondaires (FOREIGN KEYS) sont également des contraintes.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 5:24:49

Ma question ne se trouve pas ici, que faire ?
Catégorie : Meta

Il est évident que cette FAQ ne peut rassembler toutes les questions. Si vous n'y trouvez pas votre bonheur, faites une recherche sur le forum ou alors à l'aide de votre moteur de recherche préféré. Si vous ne trouvez toujours pas une réponse satisfaisante, créez un nouveau sujet en prenant bien soin de lire les règles de ce forum.

-
Edité par Benzouye 23 août 2017 à 11:20:22

  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 5:26:35

Comment participer à la FAQ ?
Catégorie : Meta

Si vous pensez qu'une nouvelle question mérite d'être ajoutée à la FAQ, envoyez un message privé à Benzouye. Si la question est pertinente, elle sera ajoutée.

-
Edité par Benzouye 23 août 2017 à 11:10:10

  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 5:29:57

SGBD-agnostique ? Ça veut dire quoi ?
Catégorie : Meta

Cela signifie que les questions de cette catégorie ne dépendent pas d'un SGBD en particulier et devraient fonctionner quel que soit celui que vous utilisez. Par exemple, la requête suivante :
SELECT ma_colonne
FROM ma_table;

devrait fonctionner sur tous les SGBD, en supposant bien évidemment que la table ma_table existe et contient une colonne nommée ma_colonne.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 5:40:15

Comment récupérer les lignes qui sont en doublon ?
Catégorie : SGBD-agnostique

Il vous faut d'abord définir les critères selon lesquels une ligne est le double d'une autre. Admettons que vous ayez une table membres qui contiennent les colonnes pseudo et mot_de_passe, une ligne sera le double d'une autre si pseudo est égal dans les deux cas. Une telle requête permettra donc sélectionner uniquement les doublons (ou plus) :

SELECT pseudo
FROM membre
GROUP BY pseudo
HAVING COUNT(*) > 1;
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 5:47:18

Jointure interne, externe... quelle est la différence ?
Catégorie : SGBD-agnostique

Une jointure interne (INNER JOIN) joint les lignes d'un table uniquement lorsque la condition de jointure est respectée. Dans les cas où la condition est fausse, aucune ligne ne peut être jointe et ces lignes ne sont pas sélectionnées.

Dans le cas d'une jointure externe (LEFT OUTER JOIN, RIGHT OUTER JOIN ou encore FULL OUTER JOIN), les lignes d'une table sont jointes avec celles d'une autre table si la condition de jointure est respectée, mais contrairement aux jointures internes, une ligne où les valeurs sont nulles est jointe dans le cas où aucune correspondance n'est trouvée.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 5:53:42

Quelle est la différence entre les jointures externes LEFT, RIGHT et FULL ?
Catégorie : SGBD-agnostique

Voici le squelette d'une requête comportant une jointure externe :
SELECT *
FROM A
LEFT|RIGHT|FULL [OUTER] JOIN B
    ON ...;


Une LEFT OUTER JOIN lie toutes les lignes de la table A (table de gauche) avec celles de la table B (table de droite). Toutes les lignes de la table A seront sélectionnées au moins une fois et jumelées avec celles de la table B s'il y a une correspondance.

Une RIGHT OUTER JOIN lie toutes les lignes de la table B avec celles de la table A. Toutes les lignes de la table A seront sélectionnées au moins une fois et jumelées avec celles de la table B s'il y a une correspondance.

Une FULL OUTER JOIN est l'union des jointures de gauche et de droite sur les tables A et B. Nous pouvons réécrire une FULL OUTER JOIN en une requête comportement une LEFT OUTER JOIN et une RIGHT OUTER JOIN :
SELECT * 
FROM A
LEFT OUTER JOIN B
    ON ...
UNION
SELECT *
FROM A
RIGHT OUTER JOIN B
    ON ...;
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 5:56:47

Comment mettre à jour une table en fonction des valeurs des colonnes ?
Catégorie : SGBD-agnostique

Il suffit simplement d'effectuer l'action sur la colonne dans une requête UPDATE. Par exemple, si on veut ajouter 1 à chaque valeur d'une colonne dans une table, il suffit de faire ceci :
UPDATE ma_table
SET ma_colonne = ma_colonne + 1;


Ou encore, en supposant une fonction LOWER qui met tous les caractères d'une chaîne en minuscule, nous pouvons écrire :
UPDATE ma_table
SET ma_colonne = LOWER(ma_colonne);
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 6:09:20

Comment sélectionner une ligne au hasard ?
Catégorie : PostgreSQL

Ordonnez les lignes à l'aide de la fonction RANDOM(), et limitez-vous à une seule ligne :
SELECT *
FROM ma_table
ORDER BY RANDOM()
LIMIT 1;


N.B. RANDOM() génère une valeur aléatoire pour chaque ligne dans la table. Cela peut grandement affecter la vitesse d'exécution de celle-ci.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 6:11:54

Comment récupérer les N plus grandes lignes de chaque groupe ?
Catégorie : PostgreSQL

Depuis la version 8.4, vous pouvez utiliser les fonctions de fenêtrage ainsi que les CTE (Common Table Expressions) qui simplifient grandement une telle requête. Il vous suffit alors de vous baser sur une requête comme celle-ci :
WITH R_TABLE (A, B, R) AS (
SELECT A , RANK() OVER(PARTITION BY A ORDER BY X)
FROM ma_table
)
SELECT A
FROM R_TABLE
WHERE R >= N;

N est à remplacer par le nombre de lignes que vous voulez pour chaque groupe.

-
Edité par Benzouye 23 août 2017 à 11:19:17

  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 6:14:18

Comment sélectionner une ligne au hasard ?
Catégorie : MySQL

Ordonnez les lignes à l'aide de la fonction RAND(), et limitez-vous à une seule ligne :
SELECT *
FROM ma_table
ORDER BY RAND()
LIMIT 1;


N.B. RAND() génère une valeur aléatoire pour chaque ligne dans la table. Cela peut grandement affecter la vitesse d'exécution de celle-ci.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 6:17:35

Comment récupérer la plus grande ligne de chaque groupe ?
Catégorie : MySQL

Faites d'abord une sous-requête retourner la valeur maximale du groupe, puis joignez celle-ci à votre table. Par exemple, si vous voulez sélectionner la ligne où la date est la plus récente pour chaque id, basez-vous sur une requête du genre :
SELECT *
FROM ma_table
INNER JOIN (SELECT id, MAX(ma_date) AS ma_date
            FROM ma_table
            GROUP BY id) AS qqchose
    USING(id, ma_date)


N.B. Vous pouvez remplacer qqchose par un identifieur un peu plus descriptif.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2011 à 6:19:29

Quels sont les mots-clés réservés ?

Catégorie : MySQL

Vous pouvez retrouver la liste des mots-clés réservés de MySQL sur cette page. Vous ne pouvez pas utiliser ces mots-clés comme identifiants (nom de base de données, table, colonne, etc.) sans les entourer de backticks `. Notez toutefois que cette dernière pratique est déconseillée, cela encombrant inutilement les requêtes.

-
Edité par Benzouye 20 novembre 2020 à 13:22:22

  • Partager sur Facebook
  • Partager sur Twitter