Microsoft SQL Server
CRÉER UNE VUE
Recherche…
CRÉER UNE VUE
CREATE VIEW view_EmployeeInfo
AS
SELECT EmployeeID,
FirstName,
LastName,
HireDate
FROM Employee
GO
Les lignes de vues peuvent être sélectionnées de la même manière que les tableaux:
SELECT FirstName
FROM view_EmployeeInfo
Vous pouvez également créer une vue avec une colonne calculée. Nous pouvons modifier la vue ci-dessus comme suit en ajoutant une colonne calculée:
CREATE VIEW view_EmployeeReport
AS
SELECT EmployeeID,
FirstName,
LastName,
Coalesce(FirstName,'') + ' ' + Coalesce(LastName,'') as FullName,
HireDate
FROM Employee
GO
Ce point de vue ajoute une colonne supplémentaire qui apparaîtra lorsque vous SELECT
lignes de celui - ci. Les valeurs de cette colonne supplémentaire dépendent des champs FirstName
et LastName
dans la table Employee
et sont automatiquement mises à jour en arrière-plan lorsque ces champs sont mis à jour.
CRÉER UNE VUE avec cryptage
CREATE VIEW view_EmployeeInfo
WITH ENCRYPTION
AS
SELECT EmployeeID, FirstName, LastName, HireDate
FROM Employee
GO
CREATE VIEW Avec INNER JOIN
CREATE VIEW view_PersonEmployee
AS
SELECT P.LastName,
P.FirstName,
E.JobTitle
FROM Employee AS E
INNER JOIN Person AS P
ON P.BusinessEntityID = E.BusinessEntityID
GO
Les vues peuvent utiliser des jointures pour sélectionner des données provenant de nombreuses sources telles que des tables, des fonctions de tableau ou même d'autres vues. Cet exemple utilise les colonnes FirstName et LastName de la table Person et la colonne JobTitle de la table Employee.
Cette vue peut maintenant être utilisée pour voir toutes les lignes correspondantes pour les gestionnaires de la base de données:
SELECT *
FROM view_PersonEmployee
WHERE JobTitle LIKE '%Manager%'
CREER une vue indexée
Pour créer une vue avec un index, la vue doit être créée à l'aide des mots-clés WITH SCHEMABINDING
:
CREATE VIEW view_EmployeeInfo
WITH SCHEMABINDING
AS
SELECT EmployeeID,
FirstName,
LastName,
HireDate
FROM [dbo].Employee
GO
Tous les index en cluster ou non peuvent être maintenant créés:
CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
EmployeeID ASC
)
Il y a des limitations aux vues indexées:
La définition de vue peut référencer une ou plusieurs tables de la même base de données.
Une fois l'index unique en cluster créé, des index non clusterisés supplémentaires peuvent être créés dans la vue.
Vous pouvez mettre à jour les données dans les tables sous-jacentes, y compris insérer, mettre à jour, supprimer et même tronquer.
Vous ne pouvez pas modifier les tables et les colonnes sous-jacentes. La vue est créée avec l'option WITH SCHEMABINDING.
Il ne peut pas contenir COUNT, MIN, MAX, TOP, les jointures externes ou quelques autres mots-clés ou éléments.
Pour plus d'informations sur la création de vues indexées, vous pouvez lire cet article MSDN
VUES groupées
Une vue groupée est basée sur une requête avec une clause GROUP BY. Comme chacun des groupes peut avoir plus d'une ligne dans la base à partir de laquelle il a été construit, il s'agit nécessairement de vues en lecture seule. Ces vues ont généralement une ou plusieurs fonctions d'agrégat et sont utilisées à des fins de génération de rapports. Ils sont également pratiques pour contourner les faiblesses de SQL. Considérons une vue qui montre la plus grande vente dans chaque état. La requête est simple:
https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/
CREATE VIEW BigSales (state_code, sales_amt_total)
AS SELECT state_code, MAX(sales_amt)
FROM Sales
GROUP BY state_code;
VUES UNION-ed
Les vues basées sur une opération UNION ou UNION ALL sont en lecture seule car il n'existe aucun moyen unique de mapper une modification sur une seule ligne dans l'une des tables de base. L'opérateur UNION supprimera les lignes en double des résultats. Les deux opérateurs UNION et UNION ALL masquent la table dont proviennent les lignes. Ces vues doivent utiliser un, car les colonnes d'un UNION [ALL] n'ont pas de nom propre. En théorie, une UNION de deux tables disjointes, dont aucune ne contient de lignes en double, devrait pouvoir être mise à jour.
https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/
CREATE VIEW DepTally2 (emp_nbr, dependent_cnt)
AS (SELECT emp_nbr, COUNT(*)
FROM Dependents
GROUP BY emp_nbr)
UNION
(SELECT emp_nbr, 0
FROM Personnel AS P2
WHERE NOT EXISTS
(SELECT *
FROM Dependents AS D2
WHERE D2.emp_nbr = P2.emp_nbr));