Requêtes d'écriture du serveur MS SQL. Exécuter des requêtes SQL dans Management Studio. Ajout d'un champ calculé Moyenne

Expressions de tableau sont appelées sous-requêtes utilisées là où la présence d'une table est attendue. Il existe deux types d'expressions de tableau :

    tables dérivées ;

    expressions de tableau généralisées.

Ces deux formes d'expressions de tableau sont abordées dans les sous-sections suivantes.

Tableaux dérivés

Tableau dérivé est une expression de table incluse dans la clause FROM d'une requête. Les tables dérivées peuvent être utilisées dans les cas où l'utilisation d'alias de colonne n'est pas possible car le traducteur SQL traite une autre instruction avant que l'alias ne soit connu. L'exemple ci-dessous montre une tentative d'utilisation d'un alias de colonne dans une situation où une autre clause est en cours de traitement avant que l'alias ne soit connu :

UTILISER SampleDb ; SELECT MOIS (EnterDate) comme enter_month FROM Works_on GROUP BY enter_month ;

Essayer d'exécuter cette requête produira le message d'erreur suivant :

Msg 207, niveau 16, état 1, ligne 5 Nom de colonne non valide « enter_month ». (Message 207 : niveau 16, état 1, ligne 5 Nom de colonne invalide enter_month)

La raison de l'erreur est que la clause GROUP BY est traitée avant le traitement de la liste correspondante de l'instruction SELECT et que l'alias de la colonne enter_month est inconnu lorsque le groupe est traité.

Ce problème peut être résolu en utilisant une table dérivée contenant la requête précédente (sans la clause GROUP BY) car la clause FROM est exécutée avant la clause GROUP BY :

UTILISER SampleDb ; SELECT enter_month FROM (SELECT MONTH(EnterDate) as enter_month FROM Works_on) AS m GROUP BY enter_month;

Le résultat de l'exécution de cette requête sera le suivant :

En règle générale, une expression de table peut être placée n'importe où dans une instruction SELECT où un nom de table peut apparaître. (Le résultat d'une expression de table est toujours une table ou, dans des cas particuliers, une expression.) L'exemple ci-dessous montre l'utilisation d'une expression de table dans la liste de sélection d'une instruction SELECT :

Le résultat de cette requête :

Expressions de table génériques

Expression de table commune (OTB) est une expression de table nommée prise en charge par le langage Transact-SQL. Les expressions de table courantes sont utilisées dans les deux types de requêtes suivants :

    non récursif ;

    récursif.

Ces deux types de demandes sont abordés dans les sections suivantes.

OTB et requêtes non récursives

La forme non récursive d'OTB peut être utilisée comme alternative aux tables et vues dérivées. Généralement, l'OTB est déterminé par AVECclauses et une requête supplémentaire qui fait référence au nom utilisé dans la clause WITH. Dans Transact-SQL, la signification du mot clé WITH est ambiguë. Pour éviter toute ambiguïté, l'instruction précédant l'instruction WITH doit se terminer par un point-virgule.

UTILISER AdventureWorks2012 ; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") ET Fret > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005 ")/2,5 ;

La requête dans cet exemple sélectionne les commandes dont le total des taxes (TotalDue) est supérieur à la moyenne de toutes les taxes et dont les frais de transport (Freight) sont supérieurs à 40 % des taxes moyennes. La propriété principale de cette requête est sa longueur, puisque la sous-requête doit être écrite deux fois. Un des moyens possibles réduire la taille de la construction de requête reviendrait à créer une vue contenant une sous-requête. Mais cette solution est un peu compliquée car elle nécessite de créer une vue puis de la supprimer une fois l'exécution de la requête terminée. Une meilleure approche serait de créer un OTB. L'exemple ci-dessous montre l'utilisation d'OTB non récursif, qui raccourcit la définition de requête ci-dessus :

UTILISER AdventureWorks2012 ; AVEC price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT year_2005 FROM price_calc) ET Fret > (SELECT year_2005 FROM price_cal c ) /2,5;

La syntaxe de la clause WITH dans les requêtes non récursives est la suivante :

Le paramètre cte_name représente le nom OTB qui définit la table résultante et le paramètre column_list représente la liste des colonnes de l'expression de table. (Dans l'exemple ci-dessus, l'OTB s'appelle price_calc et comporte une colonne, year_2005.) Le paramètre inner_query représente une instruction SELECT qui spécifie le jeu de résultats de l'expression de table correspondante. L'expression de table définie peut ensuite être utilisée dans external_query. (La requête externe dans l'exemple ci-dessus utilise OTB price_calc et sa colonne year_2005 pour simplifier la requête doublement imbriquée.)

OTB et requêtes récursives

Cette section présente du matériel d'une complexité accrue. Par conséquent, lors de sa première lecture, il est recommandé de l’ignorer et d’y revenir plus tard. Les OTB peuvent être utilisés pour implémenter des récursions car les OTB peuvent contenir des références à eux-mêmes. La syntaxe OTB de base pour une requête récursive ressemble à ceci :

Les paramètres cte_name et column_list ont la même signification que dans OTB pour les requêtes non récursives. Le corps d'une clause WITH est constitué de deux requêtes combinées par l'opérateur UNION TOUS. La première requête n'est appelée qu'une seule fois et elle commence à accumuler le résultat de la récursion. Le premier opérande de l’opérateur UNION ALL ne fait pas référence à OTB. Cette requête est appelée requête de référence ou source.

La deuxième requête contient une référence à l'OTB et représente sa partie récursive. Pour cette raison, on l'appelle un membre récursif. Lors du premier appel à la partie récursive, la référence OTB représente le résultat de la requête de référence. Le membre récursif utilise le résultat du premier appel de requête. Après cela, le système appelle à nouveau la partie récursive. Un appel à un membre récursif s'arrête lorsqu'un appel précédent à celui-ci renvoie un jeu de résultats vide.

L'opérateur UNION ALL connecte les données accumulées ce moment lignes, ainsi que les lignes supplémentaires ajoutées par l'appel en cours au membre récursif. (La présence de l'opérateur UNION ALL signifie que les lignes en double ne seront pas supprimées du résultat.)

Enfin, le paramètre external_query spécifie la requête externe qu'OTB utilise pour récupérer tous les appels à la jointure des deux membres.

Pour démontrer la forme récursive d'OTB, nous utilisons la table Airplane définie et renseignée avec le code présenté dans l'exemple ci-dessous :

UTILISER SampleDb ; CREATE TABLE Avion (ContainingAssembly VARCHAR (10), ContainedAssembly VARCHAR (10), QuantityContained INT, UnitCost DECIMAL (6,2)); INSÉRER DANS LES VALEURS DE L'Avion ("Avion", "Fuselage", 1, 10) ; INSÉRER DANS LES VALEURS DE L'Avion ("Avion", "Ailes", 1, 11) ; INSÉRER DANS LES VALEURS DE L'Avion ("Avion", "Queue", 1, 12); INSÉRER DANS LES VALEURS DE L'AVION ("Fuselage", "Salon", 1, 13); INSÉRER DANS LES VALEURS DE L'AVION ("Fuselage", "Cockpit", 1, 14) ; INSÉRER DANS LES VALEURS DE L'AVION ("Fuselage", "Nose", 1, 15); INSÉRER DANS LES VALEURS DE L'AVION ("Cabine", NULL, 1,13); INSÉRER DANS LES VALEURS DE L'AVION ("Cockpit", NULL, 1, 14); INSÉRER DANS LES VALEURS DE L'AVION ("Nez", NULL, 1, 15); INSÉRER DANS LES VALEURS DE L'AVION ("Ailes", NULL,2, 11); INSÉRER DANS LES VALEURS DE L'AVION ("Queue", NULL, 1, 12);

Le tableau Avion comporte quatre colonnes. La colonne ContainingAssembly identifie l'assembly et la colonne ContainedAssembly identifie les pièces (une par une) qui composent l'assembly correspondant. La figure ci-dessous montre une illustration graphique d'un type possible d'avion et de ses composants :

Le tableau Avion se compose des 11 lignes suivantes :

L'exemple suivant utilise la clause WITH pour définir une requête qui calcule le coût total de chaque build :

UTILISER SampleDb ; AVEC list_of_parts(assembly1, quantité, coût) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly EST NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST(l.quantity * l.cost AS DECIMAL(6,2) ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Pièce", quantité "Quantité", coût "Prix" FROM list_of_parts ;

La clause WITH définit une liste OTB nommée list_of_parts, composée de trois colonnes : assembly1, quantité et coût. La première instruction SELECT de l'exemple n'est appelée qu'une seule fois pour stocker les résultats de la première étape du processus de récursion. L'instruction SELECT sur la dernière ligne de l'exemple affiche le résultat suivant.

SQL ou Structured Query Language est un langage utilisé pour gérer les données dans un système de base de données relationnelle (SGBDR). Cet article couvrira les applications couramment utilisées Commandes SQL, que tout programmeur devrait connaître. Ce matériel est idéal pour ceux qui souhaitent parfaire leurs connaissances en SQL avant un entretien d'embauche. Pour ce faire, regardez les exemples donnés dans l'article et rappelez-vous que vous avez étudié les bases de données en binôme.

Notez que certains systèmes de bases de données nécessitent un point-virgule à la fin de chaque instruction. Le point-virgule est pointeur standardà la fin de chaque instruction SQL. Les exemples utilisent MySQL, un point-virgule est donc requis.

Mise en place d'une base de données pour des exemples

Créez une base de données pour démontrer le fonctionnement des équipes. Pour travailler, vous devrez télécharger deux fichiers : DLL.sql et InsertStatements.sql. Après cela, ouvrez un terminal et connectez-vous à la console MySQL à l'aide de la commande suivante (l'article suppose que MySQL est déjà installé sur le système) :

Mysql -u racine -p

Entrez ensuite votre mot de passe.

Exécutez la commande suivante. Appelons la base de données « université » :

CRÉER UNE BASE DE DONNÉES universitaire ; UTILISER l'université ; SOURCE ; SOURCE

Commandes pour travailler avec des bases de données

1. Afficher les bases de données disponibles

AFFICHER LES BASES DE DONNÉES ;

2. Créez une nouvelle base de données

CRÉER UNE BASE DE DONNÉES ;

3. Sélection d'une base de données à utiliser

UTILISER ;

4. Importez des commandes SQL à partir d'un fichier .sql

SOURCE ;

5. Supprimez la base de données

SUPPRIMER LA BASE DE DONNÉES ;

Travailler avec des tableaux

6. Afficher les tables disponibles dans la base de données

AFFICHER LES TABLEAUX ;

7. Créez un nouveau tableau

CRÉER UN TABLEAU ( , , CLÉ PRIMAIRE ( ), CLÉ ÉTRANGÈRE ( ) LES RÉFÉRENCES ());

Contraintes d'intégrité lors de l'utilisation de CREATE TABLE

Vous devrez peut-être créer des restrictions sur certaines colonnes d'un tableau. Lors de la création d'un tableau, vous pouvez définir les restrictions suivantes :

  • une cellule de tableau ne peut pas avoir une valeur NULL ;
  • clé primaire - PRIMARY KEY (col_name1, col_name2, ...) ;
  • clé étrangère - CLÉ ÉTRANGÈRE (col_namex1, …, col_namexn) RÉFÉRENCES table_name(col_namex1, …, col_namexn) .

Vous pouvez spécifier plusieurs clés primaires. Dans ce cas, vous obtiendrez une clé primaire composite.

Exemple

Créer une table "instructeur" :

CREATE TABLE instructeur (ID CHAR(5), nom VARCHAR(20) NOT NULL, nom_dept VARCHAR(20), salaire NUMERIC(8,2), CLÉ PRIMAIRE (ID), CLÉ ÉTRANGÈRE (nom_dept) RÉFÉRENCES département(nom_dept)) ;

8. Informations sur le tableau

Vous pouvez afficher diverses informations (type de valeur, clé ou non) sur les colonnes de la table avec la commande suivante :

DÉCRIRE ;

9. Ajout de données au tableau

INSÉRER DANS (, , , ...) VALEURS ( , , , …);

Lorsque vous ajoutez des données à chaque colonne d'un tableau, vous n'avez pas besoin de spécifier les noms des colonnes.

INSÉRER DANS VALEURS ( , , , …);

10. Mise à jour des données du tableau

MISE À JOUR ENSEMBLE = , = , ... OÙ ;

11. Suppression de toutes les données du tableau

SUPPRIMER DE ;

12. Supprimer un tableau

TABLEAU DE DÉPÔT ;

Commandes pour créer des requêtes

13. SÉLECTIONNER

SELECT est utilisé pour récupérer les données d'une table spécifique :

SÉLECTIONNER , , … DEPUIS ;

La commande suivante peut afficher toutes les données du tableau :

SÉLECTIONNER * DEPUIS ;

14. SÉLECTIONNER DISTINCT

Les colonnes du tableau peuvent contenir des données en double. Utilisez SELECT DISTINCT pour récupérer uniquement les données non dupliquées.

SÉLECTIONNER DISTINCT , , … DEPUIS ;

15. OÙ

Vous pouvez utiliser le mot clé WHERE dans SELECT pour spécifier des conditions dans une requête :

SÉLECTIONNER , , … DEPUIS ;

Les conditions suivantes peuvent être précisées dans la demande :

  • comparaison de texte ;
  • comparaison de valeurs numériques;
  • opérateurs logiques ET (et), OU (ou) et NON (négation).

Exemple

Essayez les commandes suivantes. Faites attention aux conditions spécifiées dans OÙ :

SELECT * FROM cours WHERE dept_name=’Comp. Sci.'; SELECT * FROM cours WHERE crédits>3 ; SELECT * FROM cours WHERE dept_name="Comp. Sci." ET crédits>3 ;

16. GROUPER PAR

L'opérateur GROUP BY est souvent utilisé avec fonctions d'agrégation tels que COUNT, MAX, MIN, SUM et AVG pour regrouper les valeurs de sortie.

SÉLECTIONNER , , … DEPUIS PAR GROUPE ;

Exemple

Affichons le nombre de cours pour chaque faculté :

SELECT COUNT(course_id), dept_name FROM course GROUP BY dept_name ;

17. AVOIR

Le mot clé HAVING a été ajouté à SQL car WHERE ne peut pas être utilisé avec les fonctions d'agrégation.

SÉLECTIONNER , , ... DEPUIS PAR GROUPE AYANT

Exemple

Affichons une liste des facultés qui ont plus d'un cours :

SELECT COUNT(course_id), dept_name FROM course GROUP BY dept_name HAVING COUNT(course_id)>1 ;

18. COMMANDER PAR

ORDER BY est utilisé pour trier les résultats de la requête par ordre décroissant ou croissant. ORDER BY triera par ordre croissant sauf si ASC ou DESC est spécifié.

SÉLECTIONNER , , … DEPUIS COMMANDÉ PAR , , …ASC|DESC;

Exemple

Affichons une liste de cours par ordre croissant et décroissant de crédits :

SELECT * FROM cours ORDER PAR crédits ; SELECT * FROM cours ORDER BY crédits DESC;

19. ENTRE

BETWEEN est utilisé pour sélectionner des valeurs de données dans une plage spécifique. Numérique et valeurs de texte, ainsi que les dates.

SÉLECTIONNER , , … DEPUIS ENTRE ET ;

Exemple

Affichons une liste des instructeurs dont le salaire est supérieur à 50 000, mais inférieur à 100 000 :

SÉLECTIONNER * FROM instructeur OÙ salaire ENTRE 50000 ET 100000 ;

20. COMME

L'opérateur LIKE est utilisé dans WHERE pour spécifier un modèle de recherche pour une valeur similaire.

Il existe deux opérateurs gratuits utilisés dans LIKE :

  • % (aucun, un ou plusieurs caractères) ;
  • _ (un caractère).
SÉLECTIONNER , , … DEPUIS COMME ;

Exemple

Affichons une liste de cours dont les noms contiennent "to" et une liste de cours dont les noms commencent par "CS-" :

SELECT * FROM cours WHERE titre LIKE '%to%'; SELECT * FROM cours WHERE course_id LIKE "CS-___" ;

21. DANS

En utilisant IN, vous pouvez spécifier plusieurs valeurs pour la clause WHERE :

SÉLECTIONNER , , … DEPUIS DANS ( , , …);

Exemple

Affichons une liste d'étudiants des majors Comp. Sci., Physique et Elec. Ing. :

SELECT * FROM student WHERE dept_name IN ('Comp. Sci.', 'Physics', 'Elec. Eng.');

22. REJOIGNEZ

JOIN est utilisé pour lier deux ou plusieurs tables en utilisant des attributs communs en leur sein. L'image ci-dessous montre différentes manières se joint à SQL. Notez la différence entre une jointure externe gauche et une jointure externe droite :

SÉLECTIONNER , , … DEPUIS REJOINDRE SUR = ;

Exemple 1

Nous afficherons une liste de tous les cours et des informations pertinentes sur les facultés :

SELECT * FROM cours REJOINDRE le département ON course.dept_name=department.dept_name ;

Exemple 2

Nous afficherons une liste de tous les cours obligatoires et des détails les concernant :

SELECT prereq.course_id, title, dept_name, credits, prereq_id FROM prereq LEFT OUTER JOIN course ON prereq.course_id=course.course_id ;

Exemple 3

Nous afficherons une liste de tous les cours, qu'ils soient obligatoires ou non :

SELECT course.course_id, title, dept_name, credits, prereq_id FROM prereq RIGHT OUTER JOIN course ON prereq.course_id=course.course_id ;

23. Voir

View est une table SQL virtuelle créée à la suite de l'exécution d'une expression. Il contient des lignes et des colonnes et ressemble beaucoup à une table SQL classique. View affiche toujours les dernières informations de la base de données.

Création

CRÉER UNE VUE COMME SÉLECTIONNER , , … DEPUIS ;

Suppression

VUE GOUTTE ;

Exemple

Créons une vue composée de cours avec 3 crédits :

24. Fonctions agrégées

Ces fonctions permettent d'obtenir un résultat agrégé lié aux données en question. Les fonctions d'agrégation suivantes sont couramment utilisées :

  • COUNT (col_name) - renvoie le nombre de lignes ;
  • SUM (col_name) - renvoie la somme des valeurs de cette colonne ;
  • AVG (col_name) - renvoie la valeur moyenne d'une colonne donnée ;
  • MIN (col_name) - renvoie la plus petite valeur d'une colonne donnée ;
  • MAX (col_name) - Renvoie la plus grande valeur d'une colonne donnée.

25. Sous-requêtes imbriquées

Les sous-requêtes imbriquées sont des requêtes SQL qui incluent des clauses SELECT , FROM et WHERE imbriquées dans une autre requête.

Exemple

Retrouvons les cours qui ont été dispensés à l'automne 2009 et au printemps 2010 :

SELECT DISTINCT course_id FROM section OÙ semestre = 'Automne' ET année = 2009 ET course_id IN (SELECT course_id FROM section OÙ semestre = 'Printemps' ET année = 2010);

SQL- Langage de requêtes structurées.
Dans cette revue, nous examinerons les types de requêtes SQL les plus courants.
Le standard SQL est défini ANSI(Institut national américain de normalisation).
SQL est un langage destiné spécifiquement aux bases de données relationnelles.

Partitionnement SQL :


DDL
(Langage de définition de données) - ce qu'on appelle le langage de description de schéma en ANSI, consiste en des commandes qui créent des objets (tables, index, vues, etc.) dans la base de données.
DML(Langage de manipulation des données) est un ensemble de commandes qui déterminent quelles valeurs sont représentées dans les tableaux à un moment donné.
DCD(Langage de gestion des données) se compose de fonctionnalités qui déterminent s'il faut autoriser ou non un utilisateur à effectuer certaines actions. Ils font partie de l'ANSI DDL. N'oubliez pas ces noms. Ce ne sont pas des langages différents, mais des sections de commandes SQL regroupées selon leurs fonctions.

Types de données:

SQL Server - Types de données

Description

bigint (entier 8)

bigint (entier 8)

binaire(n)

binaire(ni image

personnage
(synonyme carboniser)

national personnage ou ntexte

caractère variable(synonyme char variable varchar)

caractère national variable ou ntexte

Dateheure

dateheure

décimal

alias numérique

double precision

double precision

entier (entier 4) (synonyme : int)

entier (entier 4)

caractère national(synonyme: caractère national, nchar)

caractère national

Numérique(synonymes : décimal, déc)

caractère national variable(synonymes : omble national variable, nvarchar)

Caractère national variable

Petite date et heure

dateheure

petit entier (entier 2)

petit entier (entier 2)

Petit argent

variante_sql

N'est plus pris en charge

Ntexte
À partir de SQL Server 2005, son utilisation n'est pas recommandée.

Horodatage

Non supporté

minusculeint (entier 1)

minusculeint (entier 1)

Identifiant unique

identifiant unique

varbinaire(n)

varbinaire(ni image

petite dateheure

dateheure

petit entier (entier 2)

petit entier (entier 2)

petit argent

variante_sql

Non supporté

horodatage

Non supporté

minusculeint (entier 1)

minusculeint (entier 1)

identifiant unique

identifiant unique

varbinaire(n)

varbinaire(ni image

Table des types de données dans SQL Server 2000

QU'EST-CE QU'UNE DEMANDE ?

Demande est une commande que vous donnez à votre programme de base de données. Les requêtes font partie du langage DML. Toutes les requêtes SQL consistent en une seule commande. La structure de cette commande est d'une simplicité trompeuse car vous devez l'étendre pour effectuer des évaluations et des manipulations de données très complexes.

Commande SELECT :

SÉLECTIONNER« Sélectionner » est la commande la plus fréquemment utilisée ; elle permet de sélectionner des données dans le tableau.
Type de requête utilisant SELECT :

SELECT id, nom_utilisateur, ville, jour_naissance FROM users_base ;

Une telle requête affichera depuis la table users_base toutes les valeurs des colonnes spécifiées séparées par des virgules après Commandes SÉLECTIONNER. De plus, vous pouvez afficher toutes les colonnes avec un seul caractère, * c'est-à-dire SELECT * FROM utilisateurs_base ; - une telle requête affichera toutes les données de la table.

Structure de la commande SELECT :

SELECT (Noms de colonnes séparés par des virgules qui doivent être affichés dans la requête) FROM (nom de la table dans la base de données)
- C'est le type de demande le plus simple. Il existe des commandes supplémentaires pour une récupération pratique des données (voir ci-dessous « Fonctions »)

Commandes DML :

Les valeurs peuvent être placées et supprimées des champs à l'aide de trois commandes DML (Data Manipulation Language) :
INSÉRER(Insérer)
MISE À JOUR(Mise à jour, modification),
SUPPRIMER(Supprimer)

Commande INSÉRER :

INSERT INTO users_base (nom_utilisateur, ville, jour_naissance) VALEURS ('Alexandre', 'Rostov', '20/06/1991');

La commande INSERT est livrée avec le préfixe INTO (in to), puis entre parenthèses se trouvent les noms des colonnes dans lesquelles on doit insérer des données, puis vient la commande VALUES (valeurs) et entre parenthèses les valeurs viennent tour à tour (c'est Il est nécessaire de respecter l'ordre des valeurs avec les colonnes, les valeurs doivent être dans le même ordre que les colonnes que vous avez spécifiées).

Commande MISE À JOUR :

UPDATE users_base SET user_name = 'Alexey';

La commande UPDATE met à jour les valeurs dans un tableau. Vient d'abord la commande UPDATE elle-même, puis le nom de la table, après la commande SET (set), puis le nom de la colonne et sa valeur entre guillemets (des guillemets sont placés si la valeur est au format chaîne, s'il s'agit d'une valeur numérique et que la colonne n'est pas lié au type de données vchar ou à tout autre type de chaîne, les guillemets n'ont aucune signification.)

Commande SUPPRIMER :

DELETE FROM users_base WHERE user_name = 'Vasily';

La commande DELETE supprime la ligne entière et identifie la ligne à l'aide du critère WHERE. Dans ce cas, cette requête supprimerait toutes les lignes dans lesquelles la valeur de la colonne user_name était Vasily. Nous parlerons du critère WHERE et d'autres un peu plus tard.

Critères, fonctions, conditions, etc. ce qui nous aide en SQL :

La clause WHERE est une clause de la commande SELECT et d'autres commandes DML qui vous permet de définir des prédicats dont la condition peut être vraie ou fausse pour n'importe quelle ligne de la table. La commande récupère uniquement les lignes de la table pour lesquelles cette instruction est vraie.
Exemple:
SELECT id, ville, jour de naissance FROM users_base WHERE user_name = 'Alexey';- une telle requête affichera uniquement les lignes qui correspondent à la condition WHERE, à savoir toutes les lignes dans lesquelles la colonne user_name a la valeur Alexey.

ORDER BY - condition de tri des lignes sélectionnées. Possède 2 critères ASC et DESC. ASC (tri de A à Z ou de 0 à 9)

DESC (à l'opposé de ASC).
Exemple:
SELECT id, ville, jour de naissance FROM users_base ORDER BY user_name ASC ; - une telle requête affichera les valeurs triées par la colonne nom_utilisateur de A à Z (A-Z ; 0-9)

Cette condition peut également être utilisée conjointement avec la clause WHERE.
Exemple:
SELECT id, city,birth_day FROM users_base WHERE user_name = 'Alexey' ORDER BY id ASC ;

DISTINCT est un argument qui vous permet d'éliminer les valeurs doubles de votre clause SELECT. Ceux. si vous avez des valeurs en double dans une colonne, disons nom_utilisateur, alors DISTINCT vous montrera une seule valeur, par exemple, vous avez 2 personnes nommées Alexey dans votre base de données, alors une requête utilisant la fonction DISTINCT ne vous montrera qu'une seule valeur que l'on rencontre en premier...
Exemple:
SELECT DISTINCT nom_utilisateur FROM utilisateurs_base ;- une telle requête nous montrera les valeurs de tous les enregistrements dans la colonne user_name, mais elles ne seront pas répétées, c'est-à-dire si vous aviez un nombre infini de valeurs répétitives, alors elles ne seront pas affichées...

AND - prend deux booléens (sous la forme A ET B) comme arguments et les évalue par rapport à la vérité, s'ils sont tous les deux vrais.
Exemple:
SELECT * FROM users_base WHERE city = 'Rostov' AND user_name = 'Alexander';- affichera toutes les valeurs du tableau où le nom de la ville apparaît sur une seule ligne (dans ce cas, Rostov et le nom d'utilisateur Alexander.

OR - prend deux booléens (sous la forme A OU B) comme arguments et évalue si l'un d'eux est correct.

SELECT * FROM users_base WHERE city = 'Rostov' OU user_name = 'Alexander';- affichera toutes les valeurs du tableau où le nom de la ville de Rostov ou le nom d'utilisateur Alexandre apparaît dans la ligne.

NOT - prend un seul booléen (sous la forme NOT A) comme arguments et change sa valeur de faux à vrai ou de vrai à faux.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Alexander';- affichera toutes les valeurs du tableau où le nom de la ville de Rostov apparaît sur une ligne ou le nom d'utilisateur n'est pas exactement Alexandre.

IN - définit un ensemble de valeurs dans lesquelles une valeur donnée peut ou non être incluse.
SELECT * FROM users_base WHERE ville IN ('Vladivostok', 'Rostov');- une telle requête affichera toutes les valeurs du tableau contenant les noms des villes spécifiées dans la colonne ville

Between est similaire à l’opérateur IN. Contrairement à la définition par des nombres à partir d'un ensemble, comme le fait IN, BETWEEN définit une plage dont les valeurs doivent diminuer pour rendre le prédicat vrai.
SELECT * FROM users_base WHERE id BETWEEN 1 AND 10 ;- affiche toutes les valeurs du tableau qui seront comprises entre 1 et 10 dans la colonne id

COUNT - Produit les numéros de ligne ou les valeurs non NULL des champs sélectionnés par la requête.
SELECT COUNT (*) FROM utilisateurs_base ;- affichera le nombre de lignes dans ce tableau.
SELECT COUNT (DISTINCT nom_utilisateur) FROM utilisateurs_base ;- affichera le nombre de lignes avec les noms d'utilisateurs (non répétées)

SOMME - produit la somme arithmétique de toutes les valeurs sélectionnées pour un champ donné.
SELECT SUM (id) FROM utilisateurs_base ;- affichera la somme des valeurs de toutes les lignes de la colonne id.

AVG - fait la moyenne de toutes les valeurs sélectionnées de ce champ.
SELECT AVG (id) FROM utilisateurs_base ;- affichera la moyenne de toutes les valeurs sélectionnées de la colonne id

MAX - produit la plus grande de toutes les valeurs sélectionnées pour ce champ.

MIN - produit la plus petite de toutes les valeurs sélectionnées pour ce champ.

Création de tableaux :

CREATE TABLE users_base (identifiant entier, texte du nom d'utilisateur, texte de la ville, date et heure du jour de naissance) ;- exécuter une telle commande entraînera la création de la table pour laquelle j'ai donné des exemples... Tout est simple ici, on écrit la commande CREATE TABLE, suivie du nom de la table que l'on souhaite créer, puis entre parenthèses, séparés par des virgules, les noms des colonnes et leur type de données. C'est la manière standard de créer une table en SQL. Je vais maintenant donner un exemple de création de tables dans SQL Server 2005 :

DÉFINIR ANSI_NULLS SUR
ALLER
ACTIVER QUOTED_IDENTIFIER
ALLER
SI NON EXISTE (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N."") ET tapez (N"U"))
COMMENCER
CRÉER UNE TABLE .(

PAS NUL,
PAS NUL,
PAS NUL,
CLÉ PRIMAIRE EN GROUPE
A.S.C.


FIN
ALLER
DÉFINIR ANSI_NULLS SUR
ALLER
ACTIVER QUOTED_IDENTIFIER
ALLER
SI NON EXISTE (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N."") ET tapez (N"U"))
COMMENCER
CRÉER UNE TABLE .(
IDENTITE(1,1) NON NULLE,
NUL,
NUL,
CLÉ PRIMAIRE EN GROUPE
A.S.C.
)AVEC (IGNORE_DUP_KEY = OFF) ON
) SUR TEXTIMAGE_ON
FIN
ALLER
DÉFINIR ANSI_NULLS SUR
ALLER
ACTIVER QUOTED_IDENTIFIER
ALLER
SI NON EXISTE (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N."") ET tapez (N"U"))
COMMENCER
CRÉER UNE TABLE .(
IDENTITE(1,1) NON NULLE,
NUL,
NUL,
CLÉ PRIMAIRE EN GROUPE
A.S.C.
)AVEC (IGNORE_DUP_KEY = OFF) ON
) SUR
FIN

La syntaxe dans SQL Server 2005 est un autre sujet, je voulais juste montrer que j'ai décrit les bases de la programmation SQL, vous pouvez atteindre le sommet par vous-même en connaissant les bases.

Si vous avez des questions sur ce sujet, écrivez-moi

Développer une application qui démontre les opérations de base sur les données dans une base de données telle que MS SQL Server, à savoir :

  • connecter la base de données à l'application ;
  • afficher les tables de la base de données sur le formulaire ;
  • ajout nouvelle entréeà la base de données ;
  • modifier un enregistrement ;
  • supprimer une entrée.

Comme base, on prend la base de données Education.dbo, dont le processus de création est décrit en détail

La figure 1 montre la structure de la base de données Education.dbo. Comme le montre la figure, la base de données s'appelle :

sasha-pc\sqlexpress.Education.dbo

Ici « sasha-pc » est l'identifiant de l'ordinateur sur le réseau, « sqlexpress » est le nom du serveur de base de données, « Education.dbo » est le nom de la base de données.

Riz. 1. Base de données Education.dbo

La base de données contient deux tables : Student et Session. La structure des tableaux est la suivante.

Tableau des étudiants.

Tableau des séances.

Performance

1. Créer nouveau projet dans MS Visual Studio en tant qu'application Windows Forms.

Créez un nouveau projet de type Application Windows Forms. Un exemple de création d'un nouveau projet est décrit en détail

2. Créez une nouvelle vue pour afficher les données de la table Student.

Pour afficher les données des tables de base de données, vous pouvez utiliser différentes façons. L'un d'eux est la création de vues générées à l'aide de MS Visual Studio.

Dans notre cas, les données du tableau seront affichées sur le formulaire dans un contrôle de type DataGridView. Après avoir créé des vues, il est très pratique de les associer à des éléments DataGridView.

Pour créer une vue, vous devez appeler la commande « Ajouter une nouvelle vue » dans le menu contextuel, qui est appelée en cliquant avec le bouton droit sur l'élément « Vues » de la base de données Education.dbo (Figure 2).

Riz. 2. Appel de la commande pour ajouter une nouvelle vue

En conséquence, la fenêtre « Ajouter une table » s'ouvrira (Figure 3). Dans la fenêtre, vous devez sélectionner les tables ajoutées à la vue.

Riz. 3. Sélection des tables sur lesquelles sera basée la nouvelle vue

Dans notre cas, sélectionnez la table Étudiant et confirmez votre choix en cliquant sur le bouton Ajouter. L'étape suivante consiste à fermer la fenêtre en sélectionnant le bouton Fermer.

Après avoir terminé les étapes, une fenêtre sera générée dans laquelle vous devrez sélectionner les champs qui doivent être affichés dans la vue (sur le formulaire). Sélectionnez tous les champs (Figure 4).

Lorsque vous sélectionnez des champs, les champs de la table Étudiant sont affichés en haut de la zone de travail. A l'aide de la souris, vous pouvez sélectionner les champs souhaités pour la présentation.

Ainsi, la zone médiane de la fenêtre affiche les noms des champs sélectionnés, le tableau dans lequel ils existent (voir Fig. 4), la possibilité de trier, de filtrer, etc.

Le bas de la zone affiche le texte de requête SQL correspondant utilisé pour créer la vue.

Riz. 4. Sélection des champs du tableau Étudiant à afficher dans la vue

Après avoir choisi une équipe

Fichier->Enregistrer tout Fichier->Enregistrer la vue1

Une fenêtre s'ouvrira dans laquelle vous devrez spécifier le nom de la vue. Définissez le nom « View Student » (Figure 5).

Riz. 5. Spécifier un nom pour la vue

Une fois les étapes terminées, la fenêtre de présentation ressemblera à celle illustrée à la figure 6.

Riz. 6. Afficher la représentation des étudiants dans la base de données

Vous pouvez désormais héberger un contrôle DataGridView et l'associer à une vue.

3. Placez le contrôle DataGridView et configurez la connexion avec la base de données.

Avant de placer le contrôle DataGridView, vous devez passer en mode conception de formulaire "Form1.cs".

L'élément DataGridView est un tableau qui peut afficher des données. Ce contrôle se trouve dans le panneau ToolBox. Tout d'abord, nous ajustons légèrement la taille du formulaire, puis y plaçons le contrôle DataGridView (Figure 7). Cela créera une instance d'objet nommée dataGridView1 par défaut.

Riz. 7. Fenêtre de sélection du contrôle DataGridView et de la source de données

Après avoir placé le contrôle DataGridView sur le formulaire, dans le coin supérieur droit, vous pouvez choisir de configurer la source de données. En conséquence, la fenêtre « Tâches DataGridView » s'ouvrira. Dans cette fenêtre, vous devez sélectionner le menu contextuel « Choisir la source de données ».

Dans le menu qui s'ouvre, sélectionnez la commande « Ajouter une source de données du projet... » (Fig. 7). Après cela, une fenêtre d'assistant s'ouvre dans laquelle la source de données est sélectionnée séquentiellement.

La figure 8 montre le " Assistant de configuration de source de données», dans lequel le type de source de données est sélectionné. Dans notre cas, nous installons « Base de données ».

Riz. 8. Sélection d'un type de source de données

Dans la fenêtre suivante (Figure 9), le modèle de source de données est sélectionné. Vous devez sélectionner DataSet.

Riz. 9. Sélection d'un modèle de source de données

Dans la fenêtre illustrée à la figure 10, vous devez spécifier la connexion de données que vous souhaitez utiliser pour vous connecter à la base de données. Dans notre cas, nous devons sélectionner la base de données " sasha-pc\sqlexpress\Education.dbo«.

Riz. 10. Sélection d'une connexion de données

La fenêtre suivante (Figure 11) suggère d'enregistrer la chaîne de connexion dans le fichier de configuration de l'application. Nous laissons tout tel quel et passons à la fenêtre suivante.

Riz. 11. Proposition de sauvegarde de la chaîne de connexion à la base de données Connection String dans le fichier de configuration de l'application

Après avoir créé une connexion à la base de données, divers objets de base de données s'affichent (Figure 12). Dans notre cas, nous devons sélectionner la vue « Afficher l'étudiant » et tous les champs de celle-ci. Les champs cochés seront affichés dans le composant de type DataGridView.

Riz. 12. Sélection des objets de base de données à afficher dans DataGridView

Après avoir sélectionné le bouton Terminer, les objets sélectionnés (vue View Student) de la base de données Education.dbo seront affichés (Figure 13).

Riz. 13. Contrôle DataGridView avec les champs View Student sélectionnés

De la même manière, vous pouvez configurer des vues contenant n'importe quel champ de n'importe quelle table de base de données. De plus, les champs de différentes tables peuvent être affichés dans une seule vue.

4. Définition de l'apparence du contrôle DataGridView.

Si vous exécutez l'application, vous recevrez les données de la vue View Student, qui correspond à la table Student dans la base de données (Figure 14).

Riz. 14. Lancement de l'application pour exécution

Comme vous pouvez le voir sur la figure 14, les données de la table dataGridView1 sont affichées normalement, mais la conception peut être ajustée.

Un champ de type DataGridView permet d'ajuster l'apparence des champs qui sont affichés.

Pour appeler des commandes d'édition de champs, appelez simplement le menu contextuel en cliquant avec le bouton droit sur le contrôle dataGridView1.

Le menu propose divers commandes utiles, qui vous permettent de contrôler l'apparence et le fonctionnement du DataGridView :

  • commande pour bloquer le contrôle (Lock Controls);
  • commande d'édition des champs affichés dans la vue (Modifier les colonnes...) ;
  • commande pour ajouter de nouveaux champs, par exemple ceux calculés (Ajouter une colonne).

Dans notre cas, vous devez sélectionner la commande « Modifier les colonnes... » (Figure 15).

Riz. 15. Commande "Modifier les colonnes..." dans le menu contextuel

En conséquence, la fenêtre « Modifier les colonnes » s'ouvrira, dans laquelle vous pourrez personnaliser l'apparence des champs de présentation à votre guise (Figure 16).

Riz. 16. Fenêtre de paramétrage de la vue des champs dans la vue « View Student »

Dans la fenêtre de la figure 16, pour n'importe quel champ, vous pouvez configurer le nom, l'alignement, la largeur, la possibilité de modifier les données, etc.

5. Chaîne de connexion

Afin d'apporter des modifications à la base de données, vous devez obtenir une chaîne de connexion à la base de données Connection String .

Il existe différentes manières d'obtenir la chaîne de connexion à la base de données. L'une d'elles repose sur la lecture de cette ligne dans la fenêtre Propriétés de la base de données Education.dbo (Fig. 17).

Riz. 17. Définir une chaîne de connexion

Pour sauvegarder la chaîne dans le programme, une variable interne du type chaîne. À l'aide du presse-papiers, copiez la chaîne de connexion dans la variable de chaîne décrite.

Dans le texte du fichier « Form1.cs » au début de la description de la classe Form1, vous devez décrire la variable :

chaîne conn_string = ;

Pour le moment, le texte de la classe Form1 est le suivant :

classe partielle publique Form1 : Formulaire { chaîne conn_string = @"Source de données=(local)\SQLEXPRESS;Catalogue initial=Éducation;Sécurité intégrée=True;Pooling=False"; formulaire public1() { InitializeComponent(); } privé void Form1_Load (expéditeur d'objet, EventArgs e) { // TODO : Cette ligne de code charge les données dans la table "educationDataSet.View_Student". Tu peux déplacez-le ou retirez-le, si nécessaire. } }

6. Création nouvelle forme pour démontrer les commandes de manipulation de données.

Afin de pouvoir traiter les données de l'enregistrement en cours, vous devez créer un nouveau formulaire. Le processus de création d'un nouveau formulaire dans MS Visual Studio - C# est décrit en détail.

L'ajout d'un nouveau formulaire se fait avec la commande :

Projet -> Ajouter un formulaire Windows...

Dans la fenêtre « Nouvel élément » qui s'ouvre, vous devez sélectionner l'élément « Windows Form ».

Laissez le nouveau nom de fichier de formulaire par défaut « Form2.cs ».

La figure 18 montre une vue du nouveau formulaire.

Nous plaçons les types de contrôles suivants sur le formulaire :

  • deux commandes de bouton (boutons OK et Annuler). En conséquence, deux objets nommés bouton1 et bouton2 seront reçus ;
  • quatre contrôles Label pour créer des messages d'information ;
  • quatre contrôles de type TextBox pour la saisie des données dans les champs Num_book, Name, Group, Year.

Vous devez configurer les propriétés suivantes des contrôles :

  • dans la propriété du bouton de contrôle1 Text = « OK » ;
  • dans la propriété de contrôle bouton2 Text = « Annuler » ;
  • dans la propriété du bouton de contrôle1 DialogResult = "OK" ;
  • dans la propriété du bouton de contrôle2 DialogResult = "Annuler" ;
  • dans la propriété label1 du contrôle Text = "Num_book";
  • dans la propriété label2 du contrôle Text = "Name";
  • dans la propriété label3 du contrôle Text = "Group" ;
  • dans le contrôle label4, la propriété Text = "Year".

Nous configurons également la visibilité des contrôles TextBox. Pour ce faire, dans tous les contrôles textBox1, textBox2, textBox3, textBox4, la valeur de la propriété Modifiers = « public ».

Riz. 18. Vue du formulaire nouvellement créé

7. Ajout de boutons pour appeler des commandes permettant de manipuler les données de la table Student.

Pour un travail ultérieur, vous devez utiliser la souris pour passer au formulaire principal Form1.

Ajoutez trois boutons au formulaire principal de l'application Form1 (Button). Trois variables d'objet seront automatiquement créées avec les noms bouton1, bouton2, bouton3. Dans chacun de ces boutons, nous effectuons les réglages suivants (fenêtre Propriétés) :

  • dans la propriété bouton bouton1 Texte = « Insérer… » (insérer un enregistrement);
  • dans la propriété bouton bouton2 Texte = « Modifier… » (modifier l'entrée) ;
  • dans la propriété bouton bouton3 Texte = "Supprimer".

À la suite des modifications apportées, le formulaire principal ressemblera à celui illustré à la figure 19.

Riz. 19. Formulaire principal de la demande

8. Programmation d'un événement clic sur le bouton « Insérer... ».

Le gestionnaire d'événements de clic sur le bouton « Insérer » ressemble à ceci :

bouton vide privé1_Click_1 (expéditeur de l'objet, EventArgs e) { chaîne cmd_text; Form2 f2 = nouveau Form2(); si (f2.ShowDialog() == DialogResult .OK) { cmd_text = "INSÉRER DANS LES VALEURS DE L'Étudiant (" + """ + f2.textBox1.Text + "" , "" + f2.textBox2.Text + "" , "" + f2.textBox3.Text + "" , " + f2.textBox4.Text + ")" ; // crée une connexion à la base de données SqlConnection sql_conn = new SqlConnection(conn_string); // crée une commande sur Langage SQL SqlCommand sql_comm = new SqlCommand(cmd_text, sql_conn); sql_conn.Open(); // ouvre la connexion sql_comm.ExecuteNonQuery(); // exécute la commande en langage SQL sql_conn.Close(); // fermer la connexion ce .view_StudentTableAdapter.Fill (ce .educationDataSet.View_Student); } }

Form2 est appelé en premier. Après avoir reçu le résultat « OK » (en appuyant sur le bouton correspondant), dans Form2, les champs remplis dans les éléments de type TextBox sont inclus dans la chaîne de requête SQL. La requête SQL pour ajouter une nouvelle ligne ressemble à :

INSÉRER DANS Étudiant VALEURS (valeur1, valeur2, valeur3, valeur4)

où valeur1 correspond au numéro du carnet de notes ; valeur2 – nom de famille de l’étudiant ; valeur3 – groupe dans lequel l'étudiant étudie ; valeur4 – année d’entrée.

La chaîne de connexion à la base de données Connection String est décrite dans la variable conn_string (voir paragraphe 5). L'objet de classe SqlConnection connecte l'application aux sources de données. De plus, la classe Connection gère l'authentification des utilisateurs, la mise en réseau, l'identification de la base de données, la mise en mémoire tampon des connexions et le traitement des transactions.

La commande SQL qui ajoute un enregistrement à une table est encapsulée dans la classe SqlCommand. Le constructeur de la classe SqlCommand prend deux paramètres : une chaîne de requête SQL (variable cmd_text) et un objet de la classe SqlConnection.

La méthode ExecuteNonQuery() est implémentée dans l'interface IDBCommand. La méthode implémente des commandes SQL qui ne renvoient pas de données. Ces commandes incluent les commandes INSERT, DELETE, UPDATE, ainsi que les procédures stockées qui ne renvoient pas de données. La méthode ExecuteNonQuery() renvoie le nombre d'enregistrements impliqués.

9. Programmation d'un événement clic sur le bouton « Modifier... ».

Le gestionnaire d'événements de clic sur le bouton « Modifier » ressemble à ceci :

private void button2_Click (expéditeur d'objet, EventArgs e) ( string cmd_text; Form2 f2 = new Form2 (); int index; string num_book; index = dataGridView1.CurrentRow.Index; num_book = Convert .ToString(dataGridView1.Value); f2.textBox1 .Text = num_book; f2.textBox2.Text = Convertir .ToString(dataGridView1.Value); f2.textBox3.Text = Convertir .ToString(dataGridView1.Value); f2.textBox4.Text = Convertir .ToString(dataGridView1.Value); if (f2.ShowDialog() == DialogResult .OK) ( cmd_text = "MISE À JOUR Étudiant SET Num_book = ""+ f2.textBox1.Text + "", " + " = "" + f2.textBox2.Text + "", " + " = "" + f2.textBox3.Text + "", " + "Année = " + f2 .TextBox4.Text + "What num_book =" " + num_book +" "" "" SQLConNection SQL_Conn = Nouveau SQLConNECTION (Conn_String); SQLCMAND SQL_comm = Nouveau SQLCMANT (CMD_TEXT, sql_conn); sql_conn.open (); sql_comm.executenonquery () ; sql_conn.Close(); ceci .view_StudentTableAdapter.Fill(ce .educationDataSet.View_Student); ) )

Ce gestionnaire exécute une commande UPDATE SQL qui modifie la valeur actuelle de l'enregistrement actif.

10. Programmation d'un événement de clic sur le bouton « Supprimer ».

Le gestionnaire d'événements de clic sur le bouton « Supprimer » ressemble à ceci :

private void button3_Click (expéditeur de l'objet, EventArgs e) ( string cmd_text = "DELETE FROM Student" ; int index; string num_book; index = dataGridView1.CurrentRow.Index; num_book = Convert.ToString(dataGridView1.Value); cmd_text = "SUPPRIMER DE L'Étudiant OÙ . = ""+ num_book + """ ; SqlConnection sql_conn = new SqlConnection (conn_string); SqlCommand sql_comm = new SqlCommand (cmd_text, sql_conn); sql_conn.Open(); sql_comm.ExecuteNonQuery(); sql_conn.Close(); cet adaptateur .view_StudentTable. Remplissez (ce .educationDataSet.View_Student); )

Ce gestionnaire exécute la commande SQL DELETE pour supprimer un enregistrement.

Rubriques connexes

  • Sortie d'une table de base de données Microsoft Access

SQL Server Management Studio fournit un outil complet pour créer tous types de requêtes. Avec son aide, vous pouvez créer, enregistrer, charger et modifier des requêtes. De plus, vous pouvez travailler sur des requêtes sans vous connecter à aucun serveur. Cet outil offre également la possibilité de développer des requêtes pour différents projets.

Vous pouvez travailler avec des requêtes à l'aide de l'éditeur de requêtes ou de l'explorateur de solutions. Cet article couvre ces deux outils. En plus de ces deux composants de SQL Server Management Studio, nous examinerons le débogage du code SQL à l'aide du débogueur intégré.

Éditeur de requête

Pour ouvrir le panneau Éditeur de requête Éditeur de requête, dans la barre d'outils SQL Server Management Studio, cliquez sur le bouton Nouvelle requête. Ce panneau peut être étendu pour afficher des boutons permettant de créer toutes les requêtes possibles, pas seulement les requêtes du moteur de base de données. Par défaut, il est créé nouvelle requête Composant Moteur de base de données, mais en cliquant sur le bouton correspondant dans la barre d'outils, vous pouvez également créer des requêtes MDX, XMLA, etc.

La barre d'état en bas du panneau de l'éditeur de requête indique l'état de la connexion de l'éditeur au serveur. Si vous ne vous connectez pas automatiquement au serveur, lorsque vous lancez l'éditeur de requête, une boîte de dialogue Se connecter au serveur apparaît, vous permettant de sélectionner le serveur auquel vous connecter et le mode d'authentification.

La modification des requêtes hors ligne offre plus de flexibilité que lorsque vous êtes connecté à un serveur. Pour éditer des requêtes, il n'est pas nécessaire de se connecter au serveur, et la fenêtre de l'éditeur de requêtes peut être déconnectée d'un serveur (à l'aide de la commande de menu Requête --> Connexion --> Déconnecter) et connectée à un autre sans ouvrir une autre fenêtre d'éditeur. Pour sélectionner le mode d'édition hors ligne, utilisez la boîte de dialogue Connexion au serveur qui s'ouvre lorsque vous lancez l'éditeur. type spécifique demandes, cliquez simplement sur le bouton Annuler.

Vous pouvez utiliser l'éditeur de requête pour effectuer les tâches suivantes :

    créer et exécuter des instructions Transact-SQL ;

    enregistrer les instructions du langage Transact-SQL créées dans un fichier ;

    créer et analyser des plans d'exécution pour les requêtes courantes ;

    illustrant graphiquement le plan d'exécution de la requête sélectionnée.

L'éditeur de requêtes contient un éditeur de texte et une barre d'outils avec un ensemble de boutons pour différentes actions. La fenêtre principale de l'éditeur de requêtes est divisée horizontalement en un panneau de requêtes (en haut) et un panneau de résultats (en bas). Les instructions Transact-SQL (c'est-à-dire les requêtes) à exécuter sont saisies dans le volet supérieur et les résultats du traitement de ces requêtes par le système sont affichés dans le volet inférieur. La figure ci-dessous montre un exemple de saisie d'une requête dans l'éditeur de requête et les résultats de l'exécution de cette requête :

La première instruction de requête USE spécifie d'utiliser la base de données SampleDb comme base de données actuelle. La deuxième instruction, SELECT, récupère toutes les lignes de la table Employee. Pour exécuter cette requête et afficher les résultats, dans la barre d'outils de l'éditeur de requête, cliquez sur le bouton Exécuter ou appuyez sur F5.

Vous pouvez ouvrir plusieurs fenêtres de l'éditeur de requête, c'est-à-dire établir plusieurs connexions à une ou plusieurs instances du moteur de base de données. Une nouvelle connexion est créée en cliquant sur le bouton Nouvelle requête de la barre d'outils SQL Server Management Studio.

La barre d'état en bas de la fenêtre de l'éditeur de requête affiche les informations suivantes relatives à l'exécution des instructions de requête :

    le statut de l'opération en cours (par exemple, « Demande terminée avec succès » );

    nom du serveur de base de données ;

    nom d'utilisateur actuel et ID de processus serveur ;

    nom actuel de la base de données ;

    temps passé à exécuter la dernière requête ;

    nombre de lignes trouvées.

L'un des principaux avantages de SQL Server Management Studio est sa facilité d'utilisation, qui s'applique également à l'éditeur de requêtes. L'éditeur de requête fournit de nombreuses fonctionnalités pour faciliter le codage des instructions Transact-SQL. Il utilise notamment la coloration syntaxique pour améliorer la lisibilité des instructions Transact-SQL. Tous les mots réservés sont affichés en bleu, les variables sont affichées en noir, les chaînes sont affichées en rouge et les commentaires sont affichés en vert.

De plus, l'éditeur de requêtes est doté d'une aide contextuelle appelée Aide dynamique, grâce auquel vous pouvez obtenir des informations sur une instruction spécifique. Si vous ne connaissez pas la syntaxe d'une instruction, sélectionnez-la dans l'éditeur, puis appuyez sur la touche F1. Vous pouvez également mettre en évidence les paramètres de diverses instructions Transact-SQL pour obtenir de l'aide à leur sujet dans la documentation en ligne.

SQL Management Studio prend en charge SQL Intellisense, qui est un type d'outil de saisie semi-automatique. En d’autres termes, ce module suggère l’achèvement le plus probable des éléments d’instruction Transact-SQL partiellement saisis.

L'explorateur d'objets peut également vous aider à modifier des requêtes. Par exemple, si vous souhaitez savoir comment créer une instruction CREATE TABLE pour la table Employee, cliquez avec le bouton droit sur la table dans l'Explorateur d'objets et le résultat menu contextuel sélectionnez Table de script en tant que -> CRÉER vers -> Nouvelle fenêtre de l'éditeur de requête. La fenêtre de l'éditeur de requête contenant l'instruction CREATE TABLE créée de cette manière est illustrée dans la figure ci-dessous. Cette fonctionnalité s'applique également à d'autres objets, tels que les procédures stockées et les fonctions.

Le navigateur d'objets est très utile pour afficher graphiquement le plan d'exécution d'une requête particulière. Le plan d'exécution de requête est l'option d'exécution sélectionnée par l'optimiseur de requête parmi plusieurs options possibles répondre à une demande spécifique. Entrez la requête requise dans le panneau supérieur de l'éditeur, sélectionnez une séquence de commandes dans le menu Requête --> Afficher le plan d'exécution estimé, et le plan d'exécution de cette requête sera affiché dans le panneau inférieur de la fenêtre de l'éditeur.

Explorateur de solution

La modification des requêtes dans SQL Server Management Studio est basée sur la méthode des solutions. Si vous créez une requête vide à l'aide du bouton Nouvelle requête, elle sera basée sur une solution vide. Vous pouvez le voir en exécutant une séquence de commandes à partir du menu Affichage --> Explorateur de solutions immédiatement après l'ouverture d'une requête vide.

La décision peut porter sur aucun, un ou plusieurs projets. Une solution vide, associée à aucun projet. Pour associer un projet à une solution, fermez la solution vide, l'Explorateur de solutions et l'éditeur de requête, puis créez un nouveau projet en exécutant Fichier --> Nouveau --> Projet. Dans la fenêtre Nouveau projet qui s'ouvre, sélectionnez l'option Scripts SQL Server dans le volet central. Un projet est une manière d'organiser des fichiers dans un emplacement spécifique. Vous pouvez attribuer un nom au projet et choisir un emplacement pour son emplacement sur le disque. Lorsque vous créez un nouveau projet, une nouvelle solution est automatiquement lancée. Le projet peut être ajouté à solution existanteà l'aide de l'Explorateur de solutions.

Pour chaque projet créé, l'Explorateur de solutions affiche les dossiers Connexions, Requêtes et Divers. Pour ouvrir une nouvelle fenêtre de l'éditeur de requêtes pour un projet donné, cliquez avec le bouton droit sur son dossier Requêtes et sélectionnez Nouvelle requête dans le menu contextuel.

Débogage de SQL Server

SQL Server, à partir de SQL Server 2008, dispose d'un débogueur de code intégré. Pour démarrer une session de débogage, sélectionnez Déboguer --> Démarrer le débogage dans le menu principal de SQL Server Management Studio. Nous verrons comment fonctionne le débogueur à l'aide d'un exemple utilisant un lot de commandes. Un lot est une séquence logique d'instructions SQL et d'extensions procédurales envoyée au moteur de base de données pour exécuter toutes les instructions qu'il contient.

La figure ci-dessous montre un package qui compte le nombre d'employés travaillant sur le projet p1. Si ce nombre est 4 ou plus, alors un message correspondant s'affiche. Sinon, les noms et prénoms des salariés sont affichés.

Pour arrêter l'exécution d'un package à une instruction spécifique, vous pouvez définir des points d'arrêt, comme le montre la figure. Pour cela, cliquez à gauche de la ligne sur laquelle vous souhaitez vous arrêter. Lorsque le débogage commence, l’exécution s’arrête à la première ligne de code, marquée d’une flèche jaune. Pour poursuivre l'exécution et le débogage, sélectionnez la commande de menu Debug --> Continue. Les instructions par lots continueront à s'exécuter jusqu'au premier point d'arrêt et la flèche jaune s'arrêtera à ce stade.

Les informations relatives au processus de débogage sont affichées dans deux panneaux en bas de la fenêtre de l'éditeur de requête. Des informations sur différents types Les informations de débogage sont regroupées dans ces panneaux sur plusieurs onglets. Le volet de gauche contient l'onglet Autos, l'onglet Locals et jusqu'à cinq onglets Watch. Le volet de droite contient les onglets Pile d'appels, Threads, Points d'arrêt, Fenêtre de commande, Fenêtre d'exécution et Sortie. L'onglet Locals affiche les valeurs des variables, l'onglet Call Stack affiche les valeurs de la pile d'appels et l'onglet Breakpoints affiche les informations sur les points d'arrêt.

Pour terminer le processus de débogage, exécutez une séquence de commandes depuis le menu principal Debug -> Stop Debugging ou cliquez sur le bouton bleu de la barre d'outils du débogueur.

SQL Server 2012 ajoute plusieurs nouvelles fonctionnalités au débogueur intégré dans SQL Server Management Studio. Vous pouvez désormais y effectuer un certain nombre des opérations suivantes :

    Spécifiez une condition de point d'arrêt. Condition de point d'arrêt est une expression SQL dont la valeur évaluée détermine si l'exécution du code s'arrêtera ou non à un moment donné. Pour spécifier une condition de point d'arrêt, cliquez avec le bouton droit sur l'icône de point d'arrêt rouge et sélectionnez Condition dans le menu contextuel. La boîte de dialogue Condition de point d'arrêt s'ouvre, vous permettant de saisir l'expression booléenne requise. De plus, si vous devez arrêter l'exécution si l'expression est vraie, vous devez définir le commutateur Is True. Si l'exécution doit être arrêtée si l'expression a changé, vous devez alors définir le commutateur When Changed.

    Spécifiez le nombre d'accès au point d'arrêt. Le nombre d'accès est la condition permettant d'arrêter l'exécution à un point donné en fonction du nombre de fois où ce point d'arrêt a été atteint pendant l'exécution. Lorsque le nombre de passes spécifié et toute autre condition spécifiée pour un point d'arrêt donné sont atteints, le débogueur effectue l'action spécifiée. La condition d'abandon de l'exécution basée sur le nombre d'accès peut être l'une des suivantes :

    1. inconditionnel (action par défaut) (Pause toujours) ;

      si le nombre de hits est égal à la valeur spécifiée (Pause lorsque son nombre est égal à une valeur spécifiée) ;

      si le nombre d'accès est un multiple d'une valeur spécifiée (interruption lorsque le nombre d'accès est égal à un multiple d'une valeur spécifiée) ;

      Break lorsque son compte est supérieur ou égal à une valeur spécifiée.

    Pour définir le nombre d'accès pendant le débogage, cliquez avec le bouton droit sur l'icône du point d'arrêt requis dans l'onglet Points d'arrêt, sélectionnez Nombre d'accès dans le menu contextuel, puis sélectionnez l'une des conditions dans la boîte de dialogue Nombre d'accès au point d'arrêt qui s'ouvre dans la liste précédente. Pour les options qui nécessitent une valeur, saisissez-la dans la zone de texte à droite de la liste déroulante des conditions. Pour enregistrer les conditions spécifiées, cliquez sur OK.

    Spécifiez un filtre de point d'arrêt. Un filtre de point d'arrêt limite l'opération de point d'arrêt aux seuls ordinateurs, processus ou threads spécifiés. Pour définir un filtre de point d'arrêt, cliquez avec le bouton droit sur le point d'arrêt souhaité et sélectionnez Filtre dans le menu contextuel. Ensuite, dans la boîte de dialogue Filtres de point d'arrêt qui s'ouvre, spécifiez les ressources auxquelles vous souhaitez limiter l'exécution de ce point d'arrêt. Pour enregistrer les conditions spécifiées, cliquez sur OK.

    Spécifiez une action à un point d'arrêt. La condition When Hit spécifie l’action à entreprendre lorsque l’exécution par lots atteint un point d’arrêt donné. Par défaut, lorsque la condition de nombre d'accès et la condition d'arrêt sont satisfaites, l'exécution est abandonnée. Alternativement, un message prédéfini peut être affiché.

    Pour spécifier quoi faire lorsqu'un point d'arrêt est atteint, cliquez avec le bouton droit sur l'icône rouge du point d'arrêt et sélectionnez Lorsqu'il est atteint dans le menu contextuel. Dans la boîte de dialogue Lorsque le point d'arrêt est atteint qui s'ouvre, sélectionnez l'action que vous souhaitez entreprendre. Pour enregistrer les conditions spécifiées, cliquez sur OK.

    Utilisez la fenêtre Quick Watch. Vous pouvez afficher la valeur d'une expression Transact-SQL dans la fenêtre QuickWatch, puis enregistrer l'expression dans la fenêtre Espion. Pour ouvrir la fenêtre Quick Watch, sélectionnez Quick Watch dans le menu Débogage. L'expression dans cette fenêtre peut être sélectionnée dans la liste déroulante Expression ou saisie dans ce champ.

    Utilisez l’info-bulle Informations rapides. Lorsque vous passez votre souris sur un identifiant de code, Quick Info ( Information brève) affiche son annonce dans une fenêtre pop-up.




Haut