Section courante

A propos

Section administrative du site

 Langage  Installation  Elément  Tutoriel  GUI  Outils  Déployer  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Planification de l'installation
Planification d'une migration
SQL Server 2005 Developer
SQL Server 2008 R2 Developer
SQL Server 2012 Developer
SQL Server 2014 Developer
SQL Server 2016 Developer
SQL Server 2017 Developer
SQL Server 2019 Developer
Type de données élémentaire
Les instructions de boucles
Référence des mots réservés
Référence des instructions
Référence des fonctions
Référence des bases de données systèmes
Référence des tables systèmes
Référence des vues systèmes
Référence des utilisateurs par défaut
Référence des Stored Procedures système
Objets de base du SQL
Gérer les données avec Transact-SQL
Langage de définition de données/Data Definition Language (DDL)
Instructions DML : Instructions INSERT, UPDATE, DELETE et MERGE
Recherche en texte intégral (Full-Text Search)
Prise en charge de JSON dans SQL Server
STORED PROCEDURES
Les opérations
Activer l'intégration de SQL Server de CLR à l'aide de Transact-SQL
Afficher l'historique des requêtes SQL
Afficher tous les index dans une base de données SQL Server
Afficher toutes les tables dans une base de données
Comment identifier les requêtes SQL d'exécution lente dans SQL Server
Exporter la base de données SQL Server dans un fichier SQL
Exporter des tables dans un fichier .SQL avec Microsoft SQL Server Management Studio
Obtenir le nom du serveur et des bases de données dans SQL Server
SQL Server Management Studio (SSMS)
DBeaver
HeidiSQL
Navicat
SQL Server Analytic Services (SSAS)
SQL Server Data Tools (SSDT)
SQL Server Integration Services (SSIS)
SQL Server Reporting Services (SSRS)
sqlcmd
SQL Data Compare (Redgate)
SSIS avec SQL Server Management Studio (SSMS)
SSIS avec Visual Studio 2017
Références des codes d'erreur du SQL Server
Référence de termes et du vocabulaire
Préface
Notes légal
Dictionnaire
Recherche

Gérer les données avec Transact-SQL

Le Transact-SQL (T-SQL) est le langage principal utilisé pour gérer et manipuler les données dans SQL Server et Azure SQL Database. Si vous travaillez avec l'un des produits SQL de Microsoft - en tant que développeur, DBA, professionnel de la BI, analyste de données, scientifique des données ou à tout autre titre - vous devez connaître votre T-SQL.

Créer des requêtes Transact-SQL SELECT

Pour écrire du code T-SQL correct et robuste, il est important de comprendre d'abord les racines du langage, ainsi qu'un concept appelé traitement de requête logique. Vous devez également comprendre la structure de l'instruction SELECT et comment utiliser ses clauses pour effectuer des tâches de manipulation de données telles que le filtrage et le tri. Vous devez souvent combiner des sources différentes, et l'un des moyens d'y parvenir dans T-SQL consiste à utiliser des opérateurs ensemblistes.

Comprendre les fondements de T-SQL

De nombreux aspects de l'informatique, comme les langages de programmation, évoluent en fonction de l'intuition et de la tendance actuelle. Sans fondements solides, leur durée de vie peut être très courte, et s'ils survivent, les changements sont souvent très rapides en raison des changements de tendances. Le T-SQL est différent, principalement parce qu'il repose sur des bases solides - les mathématiques. Vous n'avez pas besoin d'être mathématicien pour bien écrire du SQL, mais tant que vous comprenez ce que sont ces fondements et certains de leurs principes clefs, vous comprendrez mieux le langage que vous utilisez.

Évolution de T-SQL

Comme mentionné, contrairement à de nombreux autres aspects de l'informatique, le T-SQL est basé sur de solides bases mathématiques. Comprendre certains des principaux principes de ces fondations peut vous aider à mieux comprendre la langue avec laquelle vous traitez. Ensuite, vous penserez en termes T-SQL lors du codage de T-SQL, par opposition au codage avec T-SQL tout en pensant en termes procéduraux.

Le T-SQL est le langage principal utilisé pour gérer et manipuler les données dans les systèmes de gestion de base de données relationnelle (SGBDR) SQL Server (le produit de la boîte) et Azure SQL Database (la plate-forme infonuagique). La base de code pour la plate-forme infonuagique et le produit en boîte est une base de code unifiée. Pour plus de simplicité, le terme SQL Server en référence aux deux, en ce qui concerne T-SQL. Le SQL Server prend également en charge d'autres langages, tels que Visual C# et Visual Basic .NET, mais T-SQL est généralement le langage préféré pour la gestion et la manipulation des données.

Le T-SQL est un dialecte du SQL standard. Le SQL est une norme de l'Organisation internationale de normalisation (ISO) et de l'American National Standard Institute (ANSI). Les deux normes pour SQL sont fondamentalement les mêmes. La norme SQL ne cesse d'évoluer avec le temps. Voici une liste des principales révisions de la norme à ce jour :

Tous les principaux fournisseurs de bases de données, y compris Microsoft, mettre ne oeuvre un dialecte de SQL comme langage de programmation principal pour gérer et manipuler les données dans leurs plateformes de bases de données. Par conséquent, les éléments de base du langage se ressemblent. Cependant, chaque fournisseur décide quelles fonctionnalités implémenter et quelles fonctionnalités ne pas implémenter. De plus, la norme laisse parfois certains aspects comme choix d'implémentation. Chaque fournisseur met en oeuvre également généralement des extensions à la norme dans les cas où le fournisseur estime qu'une fonctionnalité importante n'est pas couverte par la norme.

Écrire de manière standard est considéré comme une bonne pratique. Lorsque vous le faites, votre code est plus portable. Vos connaissances sont également plus portables, car il vous est facile de commencer à travailler avec de nouvelles plates-formes. Lorsque le dialecte avec lequel vous travaillez prend en charge à la fois une manière standard et non standard de faire quelque chose, vous devriez toujours préférer la forme standard comme choix par défaut. Vous ne devriez envisager une option non standard que lorsqu'elle présente pour vous un avantage important que celui couvert par l'alternative standard.

À titre d'exemple de choix de la forme standard, T-SQL prend en charge deux opérateurs "différent de" : <> et !=. Le premier est standard et le second ne l'est pas. Dans ce cas, le choix devrait être évident : optez pour le standard !

Comme exemple de cas où le choix de standard ou non standard dépend des circonstances, considérez ce qui suit : T-SQL prend en charge plusieurs fonctions convertissant une expression source en un type cible. Parmi elles se trouvent les fonctions CAST et CONVERT. Le premier est standard et le second ne l'est pas. La fonction CONVERT non standard a un paramètre de style que CAST ne prend pas en charge. Étant donné que CAST est standard, vous devez le considérer comme votre choix par défaut pour les conversions. Vous devriez envisager d'utiliser CONVERT uniquement lorsque vous devez vous fier au paramètre de style.

Un autre exemple de choix de la forme standard est la terminaison des instructions T-SQL. Selon la norme SQL, vous devez terminer vos instructions par un point-virgule. La documentation T-SQL spécifie que ne pas terminer toutes les instructions par un point-virgule est une fonctionnalité déconseillée, mais T-SQL ne l'applique actuellement pas à toutes les instructions, mais uniquement dans les cas où il y aurait autrement une ambiguïté des éléments de code. Par exemple, une instruction précédant la clause WITH d'une expression de table commune (CTE) doit être terminée car cette clause peut également être utilisée pour définir un indicateur de table dans l'instruction précédente. Comme autre exemple, l'instruction MERGE doit être terminée en raison d'une ambiguïté possible du mot clef MERGE. Vous devez toujours suivre la norme et mettre fin à toutes vos déclarations, même lorsque cela n'est actuellement pas requis.

Le SQL standard est basé sur le modèle de relation, étant un modèle mathématique pour la gestion et la manipulation des données. Le modèle de relation a été initialement créé et proposé par Edgar F. Codd en 1969. Après sa création, il a été expliqué et développé par Codd, Chris Date, Hugh Drawen et d'autres.

Une idée fausse courante est que le nom «relationnel» est à voir avec les relations entre les tables (c'est-à-dire les clefs étrangères). En fait, la véritable source du nom du modèle est la relation de concept mathématique. Une relation dans le modèle de relation est ce que SQL représente avec une table. Les deux ne sont pas synonymes. On pourrait dire qu'une table est une tentative par SQL de représenter une relation (en plus d'une variable de relation, mais ce n'est pas nécessaire d'en parler ici). Certains disent que ce n'est pas une tentative très réussie. Même si SQL est basé sur le modèle relationnel, il s'en écarte de plusieurs manières. Mais il est important de noter qu'au fur et à mesure que vous comprenez les principes du modèle, vous pouvez utiliser SQL - ou plus précisément, le dialecte que vous utilisez - de manière relationnelle.

Pour en revenir à une relation, c'est ce que SQL essaie de représenter avec une table : une relation a un entête et un corps. L'entête est un ensemble d'attributs (ce que SQL tente de représenter avec des colonnes), chacun d'un type donné. Un attribut est identifié par un nom et un nom de type. Le corps est un ensemble de tuples (ce que SQL tente de représenter avec des lignes). L'entête de chaque tuple est l'entête de la relation. Chaque valeur de l'attribut de chaque tuple est de son type respectif. Certains des aspects les plus importants à comprendre à propos de T-SQL découlent des fondements fondamentaux du modèle relationnel : la théorie des ensembles et la logique des prédicats.

N'oubliez pas que l'entête est un ensemble d'attributs et que le corps est un ensemble de tuples. Alors, qu'est-ce qu'un ensemble ? Selon le créateur de la théorie mathématique des ensembles, Georg Cantor, un ensemble est décrit comme suit : «Par "ensemble", nous entendons toute collection M en un ensemble d'objets m définis et distincts (étant appelés les «éléments» de M) de notre perception ou de notre pensée.»

Il y a un certain nombre d'éléments très importants dans la définition qui, s'ils sont compris, devraient avoir des implications directes sur vos pratiques de codage T-SQL. Un élément nécessitant un avis est le terme entier. Un ensemble doit être considéré comme un tout. Cela signifie que vous n'interagissez pas avec les éléments individuels de l'ensemble, mais plutôt avec l'ensemble dans son ensemble. Remarquez le terme distinct; un ensemble n'a pas de doublons. Codd a fait remarquer une fois sur l'aspect de l'absence de doublons : «Si quelque chose est vrai, le dire deux fois ne le rendra pas plus vrai.» Par exemple, l'ensemble {a, b, c} est considéré égal à l'ensemble {a, a, b, c, c, c}. Un autre aspect critique d'un ensemble n'apparaît pas explicitement dans la définition susmentionnée de Cantor, mais est plutôt implicite ; il n'y a aucune pertinence pour l'ordre des éléments dans un ensemble. En revanche, une séquence (étant un ensemble ordonné) a un ordre pour ses éléments. La combinaison des aspects aucun doublon et aucune pertinence pour l'ordre signifie que la collection {a, b, c} est telle que définie, mais pas la collection (b, a, c, c, a, c).

L'autre branche des mathématiques sur laquelle le modèle de relation est basé s'appelle la logique des prédicats. Un prédicat est une expression qui, lorsqu'elle est attribuée à un objet, fait une proposition vraie ou fausse. Par exemple, «salaire supérieur à 45 000 $» est un prédicat. Vous pouvez évaluer ce prédicat pour un employé spécifique, auquel cas vous avez une proposition. Par exemple, supposons que pour un employé en particulier, le salaire est de 50 000 $. Lorsque vous évaluez la proposition pour cet employé, vous obtenez une proposition vraie. En d'autres termes, un prédicat est une proposition paramétrée.

Le modèle relationnel utilise des prédicats comme l'un de ses éléments de base. Vous pouvez appliquer l'intégrité des données à l'aide de prédicats. Vous pouvez filtrer les données à l'aide de prédicats. Vous pouvez même utiliser des prédicats pour définir le modèle de données lui-même. Vous d'abord les propositions d'identité devant être entreposées dans la base de données. Voici un exemple de proposition : une commande avec l'ID de commande 12345 a été passée le 16 février 2007 par le client avec l'ID 77, et traitée par l'ID d'employé 37. Vous créez ensuite des prédicats à partir des propositions en supprimant les données et en gardant l'entête. N'oubliez pas que l'entête est un ensemble d'attributs, chacun identifié par un nom et un nom de type. Dans cet exemple, vous avez orderid INT, orderdate DATE, custid INT et empid INT.

Utiliser T-SQL de manière relationnelle

Comme mentionné, T-SQL est basé sur SQL, qui à son tour est basé sur le modèle relationnel. Cependant, il existe un certain nombre de façons dont SQL, et donc T-SQL, s'écarte du modèle relationnel. Mais T-SQL vous donne suffisamment d'outils pour que si vous comprenez le modèle de relation, vous puissiez utiliser le langage de manière relationnelle, et ainsi écrire un code plus correct.

Rappelez-vous qu'une relation a un titre et un corps. Le titre est un ensemble d'attributs et le corps est un ensemble de tuples. Rappelons qu'un ensemble est censé être considéré comme un tout. C'est que cela se traduit dans T-SQL et que vous êtes censé écrire des requêtes interagissant avec les tables dans leur ensemble. Vous devriez essayer d'éviter d'utiliser des constructions itératives telles que des curseurs et des boucles parcourant les lignes une par une. Vous devriez également essayer d'éviter de penser en termes itératifs, car ce type de pensée est ce qui conduit à des solutions itératives.

Pour les personnes ayant une formation en programmation procédurale, la façon naturelle d'interagir avec les données (dans un fichier, un ensemble d'enregistrements ou un lecteur de données) consiste à effectuer des itérations. Ainsi, l'utilisation de curseurs et d'autres constructions itératives dans T-SQL est, en quelque sorte, une extension de ce qu'ils savent déjà. Cependant, la manière correcte du point de vue du modèle relationnel n'est pas d'interagir avec les lignes une à la fois, mais plutôt d'utiliser des opérations relationnelles et de renvoyer un résultat relationnel. Ceci, en T-SQL, se traduit par l'écriture de requêtes.

N'oubliez pas non plus qu'un ensemble n'a pas de doublons. En d'autres termes, il a des membres uniques. Le T-SQL n'applique pas toujours cette règle. Par exemple, vous pouvez créer une table sans clef. Dans ce cas, vous êtes autorisé à avoir des lignes en double dans la table. Pour suivre la théorie relationnelle, vous devez appliquer l'unicité dans vos tables. Par exemple, vous pouvez imposer l'unicité dans vos tables en utilisant une clef primaire ou une contrainte unique.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mercredi, le 23 juin 2021