40 questions a connaitre en SQL avant d'aller passer un entretien de recrutement

Pour suivre nos dernières actualités n'oubliez pas de vous abonner :
Publicité :

Vous préparez-vous à votre entretien de développeur sql ?     


Alors vous êtes au bon endroit.  

    

Ce guide vous aidera à améliorer vos compétences en SQL, à reprendre confiance en vous et à être prêt à travailler !  

    

Dans ce guide, vous trouverez une collection de questions d'entretien SQL posées dans des entreprises comme Google, Oracle, Amazon et Microsoft, etc. 


Chaque question est accompagnée d'une réponse, ce qui vous permet de gagner du temps pour préparer votre entretien.  

    

Ce guide contient également des problèmes pratiques SQL que vous pouvez résoudre immédiatement, ce qui est tout simplement le moyen le plus rapide et le plus facile d'éclaircir vos concepts de base de SQL.  

Plongeons-y...

1. C’est quoi une base de données

Une base de données est une accumulation organisée de données, stockées et extraites numériquement à partir d'un ordinateur local ou distant.

Il existe plusieurs types de bases de données.
- Les base de données relationnelles (SQL, POSTGRES)
- Les bases noSQL (MONGO)
- Les fichiers (Tabulaires ou non)

2. Qu'est-ce qu'un SGBD  (DBMS)?

SGBD signifie Système de gestion de base de données. Le SGBD est un logiciel système responsable de la création, de l'extraction, de la mise à jour et de la gestion de la base de données. Il garantit que nos données sont cohérentes, organisées et facilement accessibles en servant d'interface entre la base de données et ses utilisateurs finaux ou les logiciels d'application.

3. Qu'est-ce qu'un SGBDR (RDBMS) ? En quoi est-il différent du SGBD ?

SGBDR signifie Système de gestion de base de données relationnelle. La différence essentielle, par rapport au SGBD, est que le SGBDR stocke les données sous la forme d'une collection de tables et que des relations peuvent être définies entre les champs communs de ces tables. La plupart des systèmes modernes de gestion de bases de données tels que MySQL, Microsoft SQL Server, Oracle, IBM DB2 et Amazon Redshift sont basés sur des SGBDR. 

4.Que signifie SQL?

SQL est l'abréviation de Structured Query Language (langage de requête structuré). Il s'agit du langage standard pour les systèmes de gestion de bases de données relationnelles. Il est particulièrement utile pour traiter des données organisées composées d'entités (variables) et de relations entre les différentes entités des données.

5. Quelle est la différence entre SQL et MySQL ?

SQL est un langage standard permettant de récupérer et de manipuler des bases de données structurées. Au contraire, MySQL est un système de gestion de bases de données relationnelles, comme SQL Server, Oracle ou IBM DB2, qui est utilisé pour gérer des bases de données SQL.

6. Que sont les tableaux et les champs ?

Un tableau est une accumulation organisée de données stockées sous forme de lignes et de colonnes. Les colonnes peuvent être qualifiées de verticales et les lignes d'horizontales. Les colonnes d'un tableau sont appelées champs, tandis que les rangées sont appelées enregistrements.

7. Que sont les contraintes en SQL ?

Les contraintes sont utilisées pour spécifier les règles concernant les données dans la table. Elles peuvent être appliquées à un ou plusieurs champs d'une table SQL pendant la création de la table ou après sa création à l'aide de la commande ALTER TABLE. Les contraintes sont

  • NOT NULL - Empêche l'insertion d'une valeur NULL dans une colonne.
  • CHECK - Vérifie que toutes les valeurs d'un champ satisfont à une condition.
  • DEFAULT - Attribue automatiquement une valeur par défaut si aucune valeur n'a été spécifiée pour le champ.
  • UNIQUE - Assure l'insertion de valeurs uniques dans le champ.
  • INDEX - L'indexation d'un champ permet de retrouver plus rapidement les enregistrements.
  • PRIMARY KEY - Identifie de manière unique chaque enregistrement dans une table.
  • FOREIGN KEY - Assure l'intégrité référentielle pour un enregistrement dans une autre table.

8. Qu'est-ce qu'une clé primaire (Primary key)?

La contrainte PRIMARY KEY identifie de manière unique chaque ligne d'une table. Elle doit contenir des valeurs UNIQUES et comporte une contrainte implicite NOT NULL.     

Une table en SQL est strictement limitée à une et une seule clé primaire, qui est composée d'un ou plusieurs champs (colonnes).


CREATE TABLE Students ( /* Create table with a single field as primary key */

    ID INT NOT NULL

    Name VARCHAR(255)

    PRIMARY KEY (ID)

);


CREATE TABLE Students ( /* Create table with multiple fields as primary key */

    ID INT NOT NULL

    LastName VARCHAR(255)

    FirstName VARCHAR(255) NOT NULL,

    CONSTRAINT PK_Student

    PRIMARY KEY (ID, FirstName)

);


ALTER TABLE Students /* Set a column as primary key */

ADD PRIMARY KEY (ID);


ALTER TABLE Students /* Set multiple columns as primary key */

ADD CONSTRAINT PK_Student /*Naming a Primary Key*/

PRIMARY KEY (ID, FirstName);


9. Qu'est-ce qu'une contrainte UNIQUE ?

Une contrainte UNIQUE garantit que toutes les valeurs d'une colonne sont différentes. Elle assure l'unicité de la ou des colonnes et permet d'identifier chaque ligne de manière unique. Contrairement à la clé primaire, il peut y avoir plusieurs contraintes uniques définies par table. La syntaxe du code pour UNIQUE est assez similaire à celle de PRIMARY KEY et peut être utilisée de manière interchangeable.

CREATE TABLE Students ( /* Create table with a single field as unique */

    ID INT NOT NULL UNIQUE

    Name VARCHAR(255)

);


CREATE TABLE Students ( /* Create table with multiple fields as unique */

    ID INT NOT NULL

    LastName VARCHAR(255)

    FirstName VARCHAR(255) NOT NULL

    CONSTRAINT PK_Student

    UNIQUE (ID, FirstName)

);


ALTER TABLE Students /* Set a column as unique */

ADD UNIQUE (ID);


ALTER TABLE Students /* Set multiple columns as unique */

ADD CONSTRAINT PK_Student /* Naming a unique constraint */

UNIQUE (ID, FirstName);


10. Qu'est-ce qu'une clé étrangère (foreign key)?

Une FOREIGN KEY comprend un seul champ ou un ensemble de champs dans une table qui se réfère essentiellement à la PRIMARY KEY d'une autre table. La contrainte de clé étrangère garantit l'intégrité référentielle dans la relation entre deux tables.     

La table avec la contrainte de clé étrangère est appelée la table enfant, et la table contenant la clé candidate est appelée la table référencée ou parent.

CREATE TABLE Students ( /* Create table with foreign key - Way 1 */

    ID INT NOT NULL

    Name VARCHAR(255)

    LibraryID INT

    PRIMARY KEY (ID)

    FOREIGN KEY (Library_ID) REFERENCES Library(LibraryID)

);


CREATE TABLE Students ( /* Create table with foreign key - Way 2 */

    ID INT NOT NULL PRIMARY KEY

    Name VARCHAR(255)

    LibraryID INT FOREIGN KEY (Library_ID) REFERENCES Library(LibraryID)

);



ALTER TABLE Students /* Add a new foreign key */

ADD FOREIGN KEY (LibraryID)

REFERENCES Library (LibraryID);


11. Qu'est-ce qu'une jointure (join) ? Énumérez ses différents types.

La clause de jonction SQL est utilisée pour combiner des enregistrements (lignes) provenant de deux ou plusieurs tables dans une base de données SQL, sur la base d'une colonne liée entre les deux.

Il existe quatre types différents de jointures en SQL :  

   

(INNER)JOIN : Récupère les enregistrements qui ont des valeurs correspondantes dans les deux tables impliquées dans la jointure. Il s'agit de la jointure la plus utilisée pour les requêtes.


SELECT *

FROM Table_A

JOIN Table_B;


SELECT *

FROM Table_A

INNER JOIN Table_B;

LEFT (OUTER) JOIN : Récupère tous les enregistrements/rangs de la table de gauche et les enregistrements/rangs correspondants de la table de droite.


SELECT *

FROM Table_A A

LEFT JOIN Table_B B

ON A.col = B.col;

RIGHT (OUTER) JOIN : Récupère tous les enregistrements/rangs de la table de droite et les enregistrements/rangs correspondants de la table de gauche.


SELECT *

FROM Table_A A

RIGHT JOIN Table_B B

ON A.col = B.col;

FULL (OUTER) JOIN : Récupère tous les enregistrements pour lesquels il existe une correspondance dans la table de gauche ou de droite.
SELECT *

FROM Table_A A

FULL JOIN Table_B B

ON A.col = B.col;

12. What is a Self-Join?

Une auto-jonction (self join) est un cas de jointure régulière où une table est jointe à elle-même sur la base d'une relation entre ses propres colonnes. L'auto-jointure utilise la clause INNER JOIN ou LEFT JOIN et un alias de table est utilisé pour attribuer des noms différents à la table dans la requête.


SELECT A.emp_id AS "Emp_ID",A.emp_name AS "Employee",

B.emp_id AS "Sup_ID",B.emp_name AS "Supervisor"

FROM employee A, employee B

WHERE A.emp_sup = B.emp_id;


13. Qu'est-ce qu'une jonction croisée (CROSS JOIN) ?

La jointure croisée peut être définie comme un produit cartésien des deux tables incluses dans la jointure. La table après la jointure contient le même nombre de lignes que dans le produit croisé du nombre de lignes dans les deux tables. Si une clause WHERE est utilisée dans la jointure croisée, la requête fonctionnera comme un INNER JOIN. 

SELECT stu.name, sub.subject 

FROM students AS stu

CROSS JOIN subjects AS sub;


14. Qu'est-ce qu'un indice/index ? Expliquez ses différents types.

Un index de base de données est une structure de données qui permet de consulter rapidement les données d'une ou de plusieurs colonnes d'une table. Il améliore la vitesse des opérations d'accès aux données d'une table de base de données au prix d'écritures et de mémoire supplémentaires pour maintenir la structure de données de l'index.

CREATE INDEX index_name /* Create Index */

ON table_name (column_1, column_2);


DROP INDEX index_name; /* Drop Index */


Il existe différents types d'index qui peuvent être créés à des fins différentes :  

Unique and Non-Unique Index:
Les index uniques sont des index qui contribuent à maintenir l'intégrité des données en garantissant que deux lignes de données d'une table ne possèdent pas de valeurs de clés identiques. Une fois qu'un index unique a été défini pour une table, l'unicité est appliquée chaque fois que des clés sont ajoutées ou modifiées dans l'index.



CREATE UNIQUE INDEX myIndex

ON students (enroll_no);



Les index non uniques, quant à eux, ne sont pas utilisés pour appliquer des contraintes sur les tables auxquelles ils sont associés. Au lieu de cela, les index non uniques sont utilisés uniquement pour améliorer les performances des requêtes en maintenant un ordre trié des valeurs de données qui sont utilisées fréquemment.

Index clusterisé et non clusterisé :


Les index clusterisés sont des index dont l'ordre des lignes de la base de données correspond à l'ordre des lignes de l'index. C'est pourquoi un seul index clusterisé peut exister dans une table donnée, alors que plusieurs index non clusterisés peuvent exister dans la table. 

 La seule différence entre les index clusterisés et non clusterisés est que le gestionnaire de base de données tente de conserver les données dans la base de données dans le même ordre que celui dans lequel les clés correspondantes apparaissent dans l'index clusterisé. 

 Les index clusterisés peuvent améliorer les performances de la plupart des opérations de requête car ils fournissent un chemin d'accès linéaire aux données stockées dans la base de données.

15. Quelle est la différence entre un index clusterisé et un index non clusterisé ?

Comme nous l'avons expliqué ci-dessus, les différences peuvent être décomposées en trois petits facteurs

  1. L'index clusterisé modifie la façon dont les enregistrements sont stockés dans une base de données en fonction de la colonne indexée. L'index non groupé crée une entité distincte au sein de la table qui fait référence à la table originale.
  2. L'index en grappe est utilisé pour une extraction facile et rapide des données de la base de données, alors que l'extraction des enregistrements de l'index non en grappe est relativement plus lente.
  3. En SQL, une table peut avoir un seul index clusterisé alors qu'elle peut avoir plusieurs index non clusterisés.

16. Qu'est-ce que l'intégrité des données ?

L'intégrité des données est la garantie de l'exactitude et de la cohérence des données tout au long de leur cycle de vie. C'est un aspect essentiel de la conception, de la mise en œuvre et de l'utilisation de tout système qui stocke, traite ou extrait des données. Elle définit également les contraintes d'intégrité pour appliquer les règles de gestion aux données lorsqu'elles sont saisies dans une application ou une base de données. 

17. Qu'est-ce qu'une requête (query) ?

Une requête est une demande de données ou d'informations provenant d'une table de base de données ou d'une combinaison de tables. Une requête de base de données peut être soit une requête de sélection, soit une requête d'action.

SELECT fname, lname /* select query */

FROM myDb.students

WHERE student_id = 1;


UPDATE myDB.students /* action query */

SET fname = 'Captain', lname = 'America'

WHERE student_id = 1;


18. Qu'est-ce qu'une sous-requête ? Quels sont ses types ?

Une sous-requête est une requête à l'intérieur d'une autre requête, également connue sous le nom de requête imbriquée ou requête interne. Elle est utilisée pour restreindre ou améliorer les données à interroger par la requête principale, ce qui permet de restreindre ou d'améliorer le résultat de la requête principale respectivement. Par exemple, ici, nous récupérons les informations de contact des étudiants qui se sont inscrits en maths :  

SELECT name, email, mob, address

FROM myDb.contacts

WHERE roll_no IN (

SELECT roll_no

FROM myDb.students

WHERE subject = 'Maths');


Il existe deux types de sous-requêtes : corrélées et non corrélées.  

  • Une sous-requête corrélée ne peut pas être considérée comme une requête indépendante, mais elle peut faire référence à la colonne d'une table figurant dans le FROM de la requête principale.
  • Une sous-requête non corrélée peut être considérée comme une requête indépendante et la sortie de la sous-requête est substituée dans la requête principale.

19. Qu'est-ce que l'instruction SELECT?

L'opérateur SELECT en SQL est utilisé pour sélectionner des données dans une base de données. Les données renvoyées sont stockées dans une table de résultats, appelée jeu de résultats.

SELECT * FROM myDB.students;

20. Quelles sont les clauses courantes utilisées avec la requête SELECT en SQL ?

Voici quelques clauses SQL courantes utilisées en conjonction avec une requête SELECT :

  • La clause WHERE en SQL est utilisée pour filtrer les enregistrements qui sont nécessaires, sur la base de conditions spécifiques.    

La clause ORDER BY de SQL est utilisée pour trier les enregistrements en fonction de certains champs dans un ordre croissant (ASC) ou décroissant (DESC).
SELECT *

FROM myDB.students

WHERE graduation_year = 2019

ORDER BY studentID DESC;

  • La clause GROUP BY de SQL est utilisée pour regrouper les enregistrements contenant des données identiques et peut être utilisée en conjonction avec certaines fonctions d'agrégation pour produire des résultats résumés à partir de la base de données.

La clause HAVING en SQL est utilisée pour filtrer les enregistrements en combinaison avec la clause GROUP BY. Elle est différente de la clause WHERE, car cette dernière ne peut pas filtrer les enregistrements agrégés.


SELECT COUNT(studentId), country

FROM myDB.students

WHERE country != "INDIA"

GROUP BY country

HAVING COUNT(studentID) > 5;

21. What are UNION, MINUS and INTERSECT commands?
L'opérateur UNION combine et renvoie l'ensemble des résultats obtenus par deux ou plusieurs requêtes SELECT.

L'opérateur MINUS de SQL est utilisé pour supprimer les doublons du jeu de résultats obtenu par la deuxième requête SELECT du jeu de résultats obtenu par la première requête SELECT, puis renvoie les résultats filtrés de la première.

La clause INTERSECT de SQL combine le jeu de résultats obtenu par les deux requêtes SELECT lorsque les enregistrements de l'une correspondent à ceux de l'autre, puis renvoie cette intersection de jeux de résultats.


Certain conditions need to be met before executing either of the above statements in SQL -

  • Chaque instruction SELECT de la clause doit comporter le même nombre de colonnes.
  • Les colonnes doivent également avoir des types de données similaires
  • Les colonnes de chaque instruction SELECT doivent nécessairement avoir le même ordre.

SELECT name FROM Students /* Fetch the union of queries */

UNION

SELECT name FROM Contacts;


SELECT name FROM Students /* Fetch the union of queries with duplicates*/

UNION ALL

SELECT name FROM Contacts;


SELECT name FROM Students /* Fetch names from students */

MINUS /* that aren't present in contacts */

SELECT name FROM Contacts;


SELECT name FROM Students /* Fetch names from students */

INTERSECT /* that are present in contacts as well */

SELECT name FROM Contacts;


22. Qu'est-ce qu'un curseur ? Comment utiliser un curseur ?

Un curseur de base de données est une structure de contrôle qui permet de parcourir les enregistrements d'une base de données. Les curseurs facilitent en outre le traitement après la traversée, comme la récupération, l'ajout et la suppression d'enregistrements de la base de données. Ils peuvent être considérés comme un pointeur vers une ligne dans un ensemble de lignes.

Travailler avec le curseur SQL

  1. DECLARE un curseur après toute déclaration de variable. La déclaration du curseur doit toujours être associée à une instruction SELECT.
  2. Ouvrir le curseur pour initialiser le jeu de résultats. L'instruction OPEN doit être appelée avant d'extraire des lignes du jeu de résultats.
  3. L'instruction FETCH pour récupérer et passer à la ligne suivante dans le jeu de résultats.
  4. Appelez l'instruction CLOSE pour désactiver le curseur.
  5. Enfin, utilisez l'instruction DEALLOCATE pour supprimer la définition du curseur et libérer les ressources associées.

DECLARE @name VARCHAR(50) /* Declare All Required Variables */


DECLARE db_cursor CURSOR FOR /* Declare Cursor Name*/

SELECT name

FROM myDB.students

WHERE parent_name IN ('Sara', 'Ansh')


OPEN db_cursor /* Open cursor and Fetch data into @name */ 

FETCH next

FROM db_cursor

INTO @name


CLOSE db_cursor /* Close the cursor and deallocate the resources */

DEALLOCATE db_cursor


23. Que sont les entités et les relations ?

Entité : Une entité peut être un objet concret, tangible ou intangible, qui peut être facilement identifiable. Par exemple, dans la base de données d'un collège, les étudiants, les professeurs, les travailleurs, les départements et les projets peuvent être désignés comme des entités. Chaque entité possède certaines propriétés associées qui lui confèrent une identité.

Relations : Relations ou liens entre des entités qui ont quelque chose à voir les unes avec les autres. Par exemple : la table des employés dans la base de données d'une entreprise peut être associée à la table des salaires dans la même base de données.

24. Citez les différents types de relations en SQL.

  • One-to-One - On peut la définir comme la relation entre deux tables où chaque enregistrement d'une table est associé au maximum à un enregistrement de l'autre table.
  • One-to-Many & Many-to-One - Il s'agit de la relation la plus couramment utilisée lorsqu'un enregistrement dans une table est associé à plusieurs enregistrements dans l'autre table.
  • Many-to-Many - Elle est utilisée dans les cas où des instances multiples des deux côtés sont nécessaires pour définir une relation.
  • Self Referencing Relationships - Elle est utilisée lorsqu'une table doit définir une relation avec elle-même.

25. Qu'est-ce qu'un alias en SQL ?

Un alias est une fonctionnalité de SQL qui est prise en charge par la plupart des SGBDR, sinon tous. Il s'agit d'un nom temporaire attribué à une table ou à une colonne de table pour les besoins d'une requête SQL particulière. En outre, l'alias peut être utilisé comme une technique d'obscurcissement pour sécuriser les noms réels des champs de la base de données. Un alias de table est également appelé un nom de corrélation .  

Un alias est représenté explicitement par le mot-clé AS, mais dans certains cas, il peut aussi être utilisé sans ce mot-clé. Néanmoins, l'utilisation du mot-clé AS est toujours une bonne pratique.

SELECT A.emp_name AS "Employee" /* Alias using AS keyword */

B.emp_name AS "Supervisor"

FROM employee A, employee B /* Alias without AS keyword */

WHERE A.emp_sup = B.emp_id;



26. Qu'est-ce qu'une vue ?

Une vue en SQL est une table virtuelle basée sur le jeu de résultats d'une instruction SQL. Une vue contient des lignes et des colonnes, tout comme une vraie table. Les champs d'une vue sont des champs provenant d'une ou plusieurs tables réelles de la base de données.  

27. Qu'est-ce que la normalisation ?

La normalisation représente la manière d'organiser efficacement les données structurées dans la base de données. Elle comprend la création de tables, l'établissement de relations entre elles et la définition de règles pour ces relations. L'incohérence et la redondance peuvent être contrôlées sur la base de ces règles, ce qui ajoute de la flexibilité à la base de données.

28. Qu'est-ce que la dénormalisation ?

La dénormalisation est le processus inverse de la normalisation, où le schéma normalisé est converti en un schéma qui contient des informations redondantes. La performance est améliorée en utilisant la redondance et en gardant les données redondantes cohérentes. La raison pour laquelle la dénormalisation est effectuée est la surcharge produite dans le processeur de requête par une structure sur-normalisée.

29. Quelles sont les différentes formes de normalisation ?

Les formes normales sont utilisées pour éliminer ou réduire les redondances dans les tables de la base de données. Les différentes formes sont les suivantes :    


  1. First Normal Form
    Une relation est en première forme normale si chaque attribut de cette relation est un attribut à valeur unique. Si une relation contient un attribut composite ou à valeurs multiples, elle viole la première forme normale. Considérons la table d'étudiants suivante. Chaque étudiant de la table a un nom, une adresse et les livres qu'il a obtenus de la bibliothèque publique.


    Students Table

Student

Address

Books Issued

Salutation

Sara

Amanora Park Town 94

Until the Day I Die (Emily Carpenter),

Inception (Christopher Nolan)

Ms.

Ansh

62nd Sector A-10

The Alchemist (Paulo Coelho),

Inferno (Dan Brown)

Mr.

Sara

24th Street Park Avenue

Beautiful Bad (Annie Ward),

Woman 99 (Greer Macallister)

Mrs.

Ansh

Windsor Street 777

Dracula (Bram Stoker)

Mr.

  1. Comme nous pouvons l'observer, le champ Livres émis a plus d'une valeur par enregistrement et pour le convertir en 1NF, il faut le résoudre en enregistrements individuels séparés pour chaque livre émis. Vérifiez le tableau suivant sous la forme 1NF.

  1. Students Table (1st Normal Form)

Student

Address

Books Issued

Salutation

Sara

Amanora Park Town 94

Until the Day I Die (Emily Carpenter)

Ms.

Sara

Amanora Park Town 94

Inception (Christopher Nolan)

Ms.

Ansh

62nd Sector A-10

The Alchemist (Paulo Coelho)

Mr.

Ansh

62nd Sector A-10

Inferno (Dan Brown)

Mr.

Sara

24th Street Park Avenue

Beautiful Bad (Annie Ward)

Mrs.

Sara

24th Street Park Avenue

Woman 99 (Greer Macallister)

Mrs.

Ansh

Windsor Street 777

Dracula (Bram Stoker)

Mr.


  1. Second Normal Form
    Une relation est en seconde forme normale si elle satisfait aux conditions de la première forme normale et ne contient aucune dépendance partielle. Une relation en 2NF n'a pas de dépendance partielle, c'est-à-dire qu'elle n'a pas d'attribut non premier qui dépende d'un sous-ensemble correct de toute clé candidate de la table. Souvent, la spécification d'une clé primaire à une seule colonne est la solution au problème. Exemples

  • Example 1 - Considérons l'exemple ci-dessus. Comme nous pouvons l'observer, la table Students sous la forme 1NF possède une clé candidate sous la forme [Student, Address] qui peut identifier de manière unique tous les enregistrements de la table. Le champ Livres délivrés (attribut non primaire) dépend partiellement du champ Étudiant. Par conséquent, la table n'est pas en 2NF. Pour la convertir en 2ème forme normale, nous allons partitionner les tables en deux tout en spécifiant un nouvel attribut de clé primaire pour identifier les enregistrements individuels dans la table Students. La contrainte de clé étrangère sera définie sur l'autre table pour assurer l'intégrité référentielle.



Students Table (2nd Normal Form)

Student_ID

Student

Address

Salutation

1

Sara

Amanora Park Town 94

Ms.

2

Ansh

62nd Sector A-10

Mr.

3

Sara

24th Street Park Avenue

Mrs.

4

Ansh

Windsor Street 777

Mr.




Books Table (2nd Normal Form)

Student_ID

Book Issued

1

Until the Day I Die (Emily Carpenter)

1

Inception (Christopher Nolan)

2

The Alchemist (Paulo Coelho)

2

Inferno (Dan Brown)

3

Beautiful Bad (Annie Ward)

3

Woman 99 (Greer Macallister)

4

Dracula (Bram Stoker)


Example 2 - Considérons les dépendances suivantes dans la relation R(W,X,Y,Z)


  WX -> Y [W et X déterminent ensemble Y].

  XY -> Z [X et Y déterminent ensemble Z].

Ici, WX est la seule clé candidate et il n'y a pas de dépendance partielle, c'est-à-dire que tout sous-ensemble approprié de WX ne détermine aucun attribut non premier dans la relation.  

Third Normal Form
Une relation est dite de troisième forme normale si elle satisfait aux conditions de la deuxième forme normale et s'il n'y a pas de dépendance transitive entre les attributs non premiers, c'est-à-dire que tous les attributs non premiers sont déterminés uniquement par les clés candidates de la relation et par aucun autre attribut non premier. 

Example 1 - Considérons la table Students dans l'exemple ci-dessus. Comme nous pouvons l'observer, la table Students sous la forme 2NF possède une seule clé candidate Student_ID (clé primaire) qui peut identifier de manière unique tous les enregistrements de la table. Le champ Salutation (attribut non primaire), cependant, dépend du champ Student plutôt que de la clé candidate. Par conséquent, la table n'est pas en 3NF. Pour la convertir en 3ème forme normale, nous allons à nouveau diviser les tables en deux tout en spécifiant une nouvelle contrainte de clé étrangère pour identifier les salutations des enregistrements individuels dans la table Students. La contrainte de clé primaire pour la même chose sera définie sur la table Salutations pour identifier chaque enregistrement de manière unique.

Students Table (3rd Normal Form)

Student_ID

Student

Address

Salutation_ID

1

Sara

Amanora Park Town 94

1

2

Ansh

62nd Sector A-10

2

3

Sara

24th Street Park Avenue

3

4

Ansh

Windsor Street 777

1



Books Table (3rd Normal Form)

Student_ID

Book Issued

1

Until the Day I Die (Emily Carpenter)

1

Inception (Christopher Nolan)

2

The Alchemist (Paulo Coelho)

2

Inferno (Dan Brown)

3

Beautiful Bad (Annie Ward)

3

Woman 99 (Greer Macallister)

4

Dracula (Bram Stoker)




Salutations Table (3rd Normal Form)

Salutation_ID

Salutation

1

Ms.

2

Mr.

3

Mrs.


Example 2 - Consider the following dependencies in relation R(P,Q,R,S,T)
  P -> QR     [P together determine C]
  RS -> T     [B and C together determine D]
  Q -> S
  T -> P

For the above relation to exist in 3NF, all possible candidate keys in above relation should be {P, RS, QR, T}.

 Boyce-Codd Normal Form
Une relation est en forme normale de Boyce-Codd si elle satisfait aux conditions de la troisième forme normale et si, pour chaque dépendance fonctionnelle, le côté gauche est une superclé. En d'autres termes, une relation en BCNF a des dépendances fonctionnelles non triviales de la forme X -> Y, telles que X est toujours une super clé. Par exemple - Dans l'exemple ci-dessus, Student_ID sert de seul identifiant unique pour la table Students et Salutation_ID pour la table Salutations, ces tables existent donc en BCNF. Il n'en va pas de même pour la table Books et il peut y avoir plusieurs livres avec des noms de livres communs et le même Student_ID.

30. Que sont les instructions TRUNCATE, DELETE et DROP ?

L'instruction DELETE est utilisée pour supprimer les lignes d'une table.

DELETE FROM Candidates

WHERE CandidateId > 1000;


La commande TRUNCATE est utilisée pour supprimer toutes les lignes de la table et libérer l'espace contenant la table.

TRUNCATE TABLE Candidates;


La commande DROP est utilisée pour supprimer un objet de la base de données. Si vous supprimez une table, toutes les lignes de la table sont supprimées et la structure de la table est supprimée de la base de données.

DROP TABLE Candidates;

31. Quelle est la différence entre les instructions DROP et TRUNCATE ??

Si une table est supprimée, tout ce qui est associé à la table est également supprimé. Il s'agit notamment des relations définies entre la table et d'autres tables, des contrôles et des contraintes d'intégrité, des privilèges d'accès et des autres autorisations dont dispose la table. Pour créer et utiliser à nouveau la table dans sa forme originale, toutes ces relations, vérifications, contraintes, privilèges et relations doivent être redéfinies. En revanche, si une table est tronquée, aucun des problèmes ci-dessus n'existe et la table conserve sa structure d'origine.

32. Quelle est la différence entre les instructions DELETE et TRUNCATE ?

La commande TRUNCATE est utilisée pour supprimer toutes les lignes du tableau et libérer l'espace contenant le tableau.     

La commande DELETE supprime uniquement les lignes du tableau en fonction de la condition donnée dans la clause where ou supprime toutes les lignes du tableau si aucune condition n'est spécifiée. Mais elle ne libère pas l'espace contenant le tableau.

33. Qu'est-ce que les fonctions Aggregate et Scalar ?

Une fonction agrégée effectue des opérations sur une collection de valeurs pour renvoyer une seule valeur scalaire. Les fonctions d'agrégation sont souvent utilisées avec les clauses GROUP BY et HAVING de l'instruction SELECT. Voici les fonctions d'agrégation SQL les plus utilisées : 

  • AVG() - Calculates the mean of a collection of values.
  • COUNT() - Counts the total number of records in a specific table or view.
  • MIN() - Calculates the minimum of a collection of values.
  • MAX() - Calculates the maximum of a collection of values.
  • SUM() - Calculates the sum of a collection of values.
  • FIRST() - Fetches the first element in a collection of values.
  • LAST() - Fetches the last element in a collection of values.

Remarque : toutes les fonctions d'agrégation décrites ci-dessus ignorent les valeurs NULL, à l'exception de la fonction COUNT.

Une fonction scalaire renvoie une valeur unique basée sur la valeur d'entrée. Voici les fonctions scalaires SQL les plus utilisées :

  • LEN() - Calcule la longueur totale du champ (colonne) donné.
  • UCASE() - Convertit une collection de valeurs de chaîne en caractères majuscules.
  • LCASE() -Convertit une collection de valeurs de chaîne en caractères minuscules.
  • MID() - Extrait les sous-chaînes d'une collection de valeurs de chaîne dans un tableau.
  • CONCAT() - Concatène deux ou plusieurs chaînes de caractères.
  • RAND() - Génère une collection aléatoire de nombres de longueur donnée.
  • ROUND() - Calcule la valeur entière arrondie pour un champ numérique (ou des valeurs à virgule).
  • NOW() - Renvoie les données et l'heure actuelles.
  • FORMAT() - Définit le format d'affichage d'une collection de valeurs.

34. Qu'est-ce qu'une fonction définie par l'utilisateur ? Quels sont ses différents types ?

Les fonctions définies par l'utilisateur dans SQL sont comme les fonctions de tout autre langage de programmation qui acceptent des paramètres, effectuent des calculs complexes et renvoient une valeur. Elles sont écrites pour utiliser la logique de manière répétitive chaque fois que cela est nécessaire. Il existe deux types de fonctions SQL définies par l'utilisateur :

  • Scalar Function: As explained earlier, user-defined scalar functions return a single scalar value.
  • Table Valued Functions: User-defined table-valued functions return a table as output.
  • Inline: returns a table data type based on a single SELECT statement.
  • Multi-statement: returns a tabular result-set but, unlike inline, multiple SELECT statements can be used inside the function body.

35. What is OLTP?

OLTP (Online Transaction Processing) est une catégorie d'applications logicielles capables de prendre en charge des programmes orientés vers les transactions. Un attribut essentiel d'un système OLTP est sa capacité à maintenir la concurrence. Pour éviter les points de défaillance uniques, les systèmes OLTP sont souvent décentralisés. Ces systèmes sont généralement conçus pour un grand nombre d'utilisateurs qui effectuent de courtes transactions. Les requêtes de la base de données sont généralement simples, nécessitent des temps de réponse inférieurs à la seconde et renvoient relativement peu d'enregistrements. Voici un aperçu du fonctionnement d'un système OLTP [ Note - La figure n'est pas importante pour les entretiens ] -.

36. Quelles sont les différences entre OLTP et OLAP ?

OLTP (Online Transaction Processing) est une catégorie d'applications logicielles capables de prendre en charge des programmes orientés vers les transactions. Un attribut important d'un système OLTP est sa capacité à maintenir la concurrence. Les systèmes OLTP suivent souvent une architecture décentralisée pour éviter les points de défaillance uniques. Ces systèmes sont généralement conçus pour un large public d'utilisateurs finaux qui effectuent de courtes transactions. Les requêtes effectuées dans ces bases de données sont généralement simples, nécessitent des temps de réponse rapides et renvoient relativement peu d'enregistrements. Le nombre de transactions par seconde est une mesure efficace pour ces systèmes.  

OLAP est l'abréviation de Online Analytical Processing (traitement analytique en ligne), une catégorie de logiciels qui se caractérise par une fréquence relativement faible de transactions en ligne. Les requêtes sont souvent trop complexes et impliquent un grand nombre d'agrégations. Pour les systèmes OLAP, la mesure de l'efficacité dépend fortement du temps de réponse. Ces systèmes sont largement utilisés pour l'exploration de données ou la conservation de données historiques agrégées, généralement dans des schémas multidimensionnels.


37. Qu'est-ce que la collation ? Quels sont les différents types de sensibilité à la collation ?

La collation fait référence à un ensemble de règles qui déterminent comment les données sont triées et comparées. Les règles définissant la séquence de caractères correcte sont utilisées pour trier les données de caractères. Elle comprend des options permettant de spécifier la sensibilité à la casse, les marques d'accentuation, les types de caractères kana et la largeur des caractères. Vous trouverez ci-dessous les différents types de sensibilité à la collation :     

  • Case sensitivity: A and a are treated differently.
  • Accent sensitivity: a and á are treated differently.
  • Kana sensitivity: Japanese kana characters Hiragana and Katakana are treated differently.
  • Width sensitivity: Same character represented in single-byte (half-width) and double-byte (full-width) are treated differently.

38. Qu'est-ce qu'une procédure stockée ?

Une procédure stockée est une sous-routine disponible pour les applications qui accèdent à un système de gestion de base de données relationnelle (SGBDR). Ces procédures sont stockées dans le dictionnaire de données de la base. Le seul inconvénient de la procédure stockée est qu'elle ne peut être exécutée nulle part ailleurs que dans la base de données et qu'elle occupe plus de mémoire dans le serveur de base de données. Elle procure également un sentiment de sécurité et de fonctionnalité, car les utilisateurs qui ne peuvent pas accéder directement aux données peuvent se voir accorder un accès via les procédures stockées.

DELIMITER $$

CREATE PROCEDURE FetchAllStudents()

BEGIN

SELECTFROM myDB.students;

END $$

DELIMITER ;


39. Qu'est-ce qu'une procédure stockée récursive ?

Une procédure stockée qui s'appelle elle-même jusqu'à ce qu'une condition limite soit atteinte est appelée une procédure stockée récursive. Cette fonction récursive aide les programmeurs à déployer le même ensemble de code plusieurs fois, en fonction des besoins. Certains langages de programmation SQL limitent la profondeur de récursivité afin d'éviter qu'une boucle infinie d'appels de procédures ne provoque un débordement de pile, ce qui ralentit le système et peut entraîner des pannes.


DELIMITER $$ /* Set a new delimiter => $$ */

CREATE PROCEDURE calctotal( /* Create the procedure */

    IN number INT, /* Set Input and Ouput variables */

    OUT total INT

) BEGIN

DECLARE score INT DEFAULT NULL; /* Set the default value => "score" */

SELECT awards FROM achievements /* Update "score" via SELECT query */

WHERE id = number INTO score;

IF score IS NULL THEN SET total = 0; /* Termination condition */

ELSE

CALL calctotal(number+1); /* Recursive call */

SET total = total + score; /* Action after recursion */

END IF;

END $$ /* End of procedure */

DELIMITER ; /* Reset the delimiter */


40.  Comment créer des tables vides ayant la même structure qu'une autre table ?

La création de tables vides avec la même structure peut être réalisée intelligemment en récupérant les enregistrements d'une table dans une nouvelle table à l'aide de l'opérateur INTO tout en fixant une clause WHERE fausse pour tous les enregistrements. Ainsi, SQL prépare la nouvelle table avec une structure dupliquée pour accepter les enregistrements récupérés mais comme aucun enregistrement n'est récupéré en raison de la clause WHERE en action, rien n'est inséré dans la nouvelle table.

SELECT * INTO Students_copy

FROM Students WHERE 1 = 2;


41. Qu'est-ce que la correspondance de motifs en SQL?

Le filtrage SQL permet de rechercher un motif dans les données si vous n'avez aucune idée de ce que doit être ce mot. Ce type de requête SQL utilise des jokers pour faire correspondre un modèle de chaîne de caractères, plutôt que d'écrire le mot exact. L'opérateur LIKE est utilisé conjointement avec les jokers SQL pour extraire les informations requises.

Utilisation du caractère générique % pour effectuer une recherche simple         

 Le caractère générique % correspond à zéro ou plusieurs caractères de n'importe quel type et peut être utilisé pour définir des caractères génériques avant et après le motif. Recherchez un étudiant dans votre base de données dont le prénom commence par la lettre K :
SELECT *

FROM students

WHERE first_name LIKE 'K%'

Omettre les motifs à l'aide du mot-clé NOT         

 Utilisez le mot-clé NOT pour sélectionner les enregistrements qui ne correspondent pas au motif. Cette requête renvoie tous les étudiants dont le prénom ne commence pas par K.

SELECT *

FROM students

WHERE first_name NOT LIKE 'K%'

Faire correspondre un motif n'importe où en utilisant deux fois le caractère générique %. Rechercher dans la base de données un étudiant dont le prénom comporte un K.
SELECT *

FROM students

WHERE first_name LIKE '%Q%'

Utilisation du caractère générique _ pour faire correspondre un motif à une position spécifique       Le caractère générique _ correspond à un seul caractère, quel que soit son type. Il peut être utilisé conjointement avec le caractère générique %. Cette requête recherche tous les étudiants dont le prénom comporte la lettre K en troisième position.
SELECT *

FROM students

WHERE first_name LIKE '__K%'


Modèles de correspondance pour une longueur spécifique         

 Le caractère générique _ joue un rôle important de limitation lorsqu'il correspond à un seul caractère. Il limite la longueur et la position des résultats de la correspondance. Par exemple .
SELECT * /* Matches first names with three or more letters */

FROM students

WHERE first_name LIKE '___%'


SELECT * /* Matches first names with exactly four characters */

FROM students

WHERE first_name LIKE '____'


Tu as bien aimé l'article ou tu as mal aux yeux :

Le lien du PDF

Article écrit par :
Mikael Monjour
Data et Automatisation