Skip to main content

SQLite创建视图:学习如何在SQLite中创建视图

什么是景观

在数据库理论中,视图是存储查询的结果集。视图是将查询打包到数据库中存储的命名对象的方法。

可以通过视图访问基础表的数据。视图定义中的查询引用的表称为基表。

视图在某些情况下很有用:

SQLite视图是只读的。这意味着不能使用INSERT、DELETE和UPDATE语句通过视图更新基表中的数据。

SQLite创建视图语句

要创建视图,请使用create view语句,如下所示:

CREATE [TEMP] VIEW [IF NOT EXISTS] view_name[(column-name-list)]
AS
select-statement;

首先,指定视图的名称。IF NOT EXISTS选项仅在不存在时创建新视图。如果视图已经存在,则它什么也不做。

其次,如果希望视图仅在当前数据库连接中可见,请使用“临时”或“临时”选项。该视图称为临时视图,只要数据库连接关闭,SQLite就会自动删除该临时视图。

第三,为视图指定SELECT语句。默认情况下,视图的列派生自SELECT语句的结果集。但是,可以指定与表的列名不同的视图列的名称

SQLite创建视图示例

让我们举一些使用CREATE view语句创建新视图的例子。

1) 创建视图以简化复杂查询

下面的查询使用内部join子句从示例数据库中的曲目、相册、媒体类型和流派表中获取数据。

SELECT
trackid,
tracks.name,
albums.Title AS album,
media_types.Name AS media,
genres.Name AS genres
FROM
tracks
INNER JOIN albums ON Albums.AlbumId = tracks.AlbumId
INNER JOIN media_types ON media_types.MediaTypeId = tracks.MediaTypeId
INNER JOIN genres ON genres.GenreId = tracks.GenreId;

试试看

sqlite CREATE VIEW example

要基于此查询创建视图,请使用以下语句:

CREATE VIEW v_tracks 
AS
SELECT
trackid,
tracks.name,
albums.Title AS album,
media_types.Name AS media,
genres.Name AS genres
FROM
tracks
INNER JOIN albums ON Albums.AlbumId = tracks.AlbumId
INNER JOIN media_types ON media_types.MediaTypeId = tracks.MediaTypeId
INNER JOIN genres ON genres.GenreId = tracks.GenreId;

试试看

从现在起,您可以使用以下简单查询,而不是上面复杂的查询。

SELECT * FROM v_tracks;

试试看

2) 创建具有自定义列名的视图

下面的语句创建一个名为v_albums的视图,其中包含相册标题和相册长度(以分钟为单位):

CREATE VIEW v_albums (
AlbumTitle,
Minutes
)
AS
SELECT albums.title,
SUM(milliseconds) / 60000
FROM tracks
INNER JOIN
albums USING (
AlbumId
)
GROUP BY AlbumTitle;

在本例中,我们为相册的view AlbumTitle指定了新列。表达式总和(毫秒)/60000的标题列和分钟数

此查询从v_albums视图返回数据:

SELECT * FROM v_albums;

在本教程中,您学习了数据库视图,以及如何使用CREATE VIEW语句在SQLite中创建新视图。