视图

视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。

临时表搜索

SELECT
    *
FROM
    (
        SELECT
            nid,
            NAME
        FROM
            tb1
        WHERE
            nid > 2
    ) AS A
WHERE
    A. NAME > 'alex';

1、创建视图

--格式:CREATE VIEW 视图名称 AS  SQL语句
CREATE VIEW v1 AS 
SELET nid, 
    name
FROM
    A
WHERE
    nid > 4

2、删除视图

--格式:DROP VIEW 视图名称

DROP VIEW v1

3、修改视图

-- 格式:ALTER VIEW 视图名称 AS SQL语句

ALTER VIEW v1 AS
SELET A.nid,
    B. NAME
FROM
    A
LEFT JOIN B ON A.id = B.nid
LEFT JOIN C ON A.id = C.nid
WHERE
    A.id > 2
AND C.nid < 5

4、使用视图

使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。

select * from v1

实践操作

MariaDB [sqlexample]> select * from score;
+-----+------------+-----------+-----+
| sid | student_id | course_id | num |
+-----+------------+-----------+-----+
|   1 |          1 |         1 |  10 |
|   2 |          1 |         2 |   9 |
|   5 |          1 |         4 |  66 |
|   6 |          2 |         1 |   8 |
|   8 |          2 |         3 |  68 |
|   9 |          2 |         4 |  99 |
|  10 |          3 |         1 |  77 |
|  11 |          3 |         2 |  66 |
|  12 |          3 |         3 |  87 |
|  13 |          3 |         4 |  99 |
|  14 |          4 |         1 |  79 |
|  15 |          4 |         2 |  11 |
|  16 |          4 |         3 |  67 |
|  17 |          4 |         4 | 100 |
|  18 |          5 |         1 |  79 |
|  19 |          5 |         2 |  11 |
|  20 |          5 |         3 |  67 |
|  21 |          5 |         4 | 100 |
|  22 |          6 |         1 |   9 |
|  23 |          6 |         2 | 100 |
|  24 |          6 |         3 |  67 |
|  25 |          6 |         4 | 100 |
|  26 |          7 |         1 |   9 |
|  27 |          7 |         2 | 100 |
|  28 |          7 |         3 |  67 |
|  29 |          7 |         4 |  88 |
|  30 |          8 |         1 |   9 |
|  31 |          8 |         2 | 100 |
|  32 |          8 |         3 |  67 |
|  33 |          8 |         4 |  88 |
|  34 |          9 |         1 |  91 |
|  35 |          9 |         2 |  88 |
|  36 |          9 |         3 |  67 |
|  37 |          9 |         4 |  22 |
|  38 |         10 |         1 |  90 |
|  39 |         10 |         2 |  77 |
|  40 |         10 |         3 |  43 |
|  41 |         10 |         4 |  87 |
|  42 |         11 |         1 |  90 |
|  43 |         11 |         2 |  77 |
|  44 |         11 |         3 |  43 |
|  45 |         11 |         4 |  87 |
|  46 |         12 |         1 |  90 |
|  47 |         12 |         2 |  77 |
|  48 |         12 |         3 |  43 |
|  49 |         12 |         4 |  87 |
|  52 |         13 |         3 |  87 |
|  53 |          2 |         2 |  65 |
+-----+------------+-----------+-----+
48 rows in set (0.00 sec)

MariaDB [sqlexample]> create view tem1 as select * from score where course_id in (1,2);
Query OK, 0 rows affected (0.02 sec)

MariaDB [sqlexample]> select * from tem1;
+-----+------------+-----------+-----+
| sid | student_id | course_id | num |
+-----+------------+-----------+-----+
|   1 |          1 |         1 |  10 |
|   2 |          1 |         2 |   9 |
|   6 |          2 |         1 |   8 |
|  10 |          3 |         1 |  77 |
|  11 |          3 |         2 |  66 |
|  14 |          4 |         1 |  79 |
|  15 |          4 |         2 |  11 |
|  18 |          5 |         1 |  79 |
|  19 |          5 |         2 |  11 |
|  22 |          6 |         1 |   9 |
|  23 |          6 |         2 | 100 |
|  26 |          7 |         1 |   9 |
|  27 |          7 |         2 | 100 |
|  30 |          8 |         1 |   9 |
|  31 |          8 |         2 | 100 |
|  34 |          9 |         1 |  91 |
|  35 |          9 |         2 |  88 |
|  38 |         10 |         1 |  90 |
|  39 |         10 |         2 |  77 |
|  42 |         11 |         1 |  90 |
|  43 |         11 |         2 |  77 |
|  46 |         12 |         1 |  90 |
|  47 |         12 |         2 |  77 |
|  53 |          2 |         2 |  65 |
+-----+------------+-----------+-----+
24 rows in set (0.01 sec)

MariaDB [sqlexample]> show tables;
+----------------------+
| Tables_in_sqlexample |
+----------------------+
| class                |
| course               |
| score                |
| student              |
| teacher              |
| tem1                 |
| userinfo             |
+----------------------+
7 rows in set (0.00 sec)

MariaDB [sqlexample]> create view tem2 as select score.sid,score.course_id,score.num,student.sname from score left join student on score.student_id = student.sid where course_id in (1,2);
Query OK, 0 rows affected (0.01 sec)

MariaDB [sqlexample]> show tables;
+----------------------+
| Tables_in_sqlexample |
+----------------------+
| class                |
| course               |
| score                |
| student              |
| teacher              |
| tem1                 |
| tem2                 |
| userinfo             |
+----------------------+
8 rows in set (0.00 sec)

MariaDB [sqlexample]> select * from tem2;
+-----+-----------+-----+-----------+
| sid | course_id | num | sname     |
+-----+-----------+-----+-----------+
|   1 |         1 |  10 | 马大狗    |
|   2 |         2 |   9 | 马大狗    |
|   6 |         1 |   8 | 钢蛋      |
|  10 |         1 |  77 | 张三      |
|  11 |         2 |  66 | 张三      |
|  14 |         1 |  79 | 张一      |
|  15 |         2 |  11 | 张一      |
|  18 |         1 |  79 | 张二      |
|  19 |         2 |  11 | 张二      |
|  22 |         1 |   9 | 张四      |
|  23 |         2 | 100 | 张四      |
|  26 |         1 |   9 | 铁锤      |
|  27 |         2 | 100 | 铁锤      |
|  30 |         1 |   9 | 李三      |
|  31 |         2 | 100 | 李三      |
|  34 |         1 |  91 | 李一      |
|  35 |         2 |  88 | 李一      |
|  38 |         1 |  90 | 李二      |
|  39 |         2 |  77 | 李二      |
|  42 |         1 |  90 | 李四      |
|  43 |         2 |  77 | 李四      |
|  46 |         1 |  90 | 如花      |
|  47 |         2 |  77 | 如花      |
|  53 |         2 |  65 | 钢蛋      |
+-----+-----------+-----+-----------+
24 rows in set (0.00 sec)

MariaDB [sqlexample]> alter view tem2 as select * from student;
Query OK, 0 rows affected (0.00 sec)

MariaDB [sqlexample]> select * from tem2;
+-----+--------+----------+-----------+
| sid | gender | class_id | sname     |
+-----+--------+----------+-----------+
|   1 | 男     |        1 | 马大狗    |
|   2 | 女     |        1 | 钢蛋      |
|   3 | 男     |        1 | 张三      |
|   4 | 男     |        1 | 张一      |
|   5 | 女     |        1 | 张二      |
|   6 | 男     |        1 | 张四      |
|   7 | 女     |        2 | 铁锤      |
|   8 | 男     |        2 | 李三      |
|   9 | 男     |        2 | 李一      |
|  10 | 女     |        2 | 李二      |
|  11 | 男     |        2 | 李四      |
|  12 | 女     |        3 | 如花      |
|  13 | 男     |        3 | 刘三      |
|  14 | 男     |        3 | 刘一      |
|  15 | 女     |        3 | 刘二      |
|  16 | 男     |        3 | 刘四      |
|  17 | 女     |        1 | 鸭蛋      |
|  18 | 女     |        1 | 鸭蛋1     |
|  19 | 女     |        1 | 鸭蛋2     |
|  20 | 女     |        1 | 鸭蛋3     |
+-----+--------+----------+-----------+
20 rows in set (0.00 sec)

MariaDB [sqlexample]> select * from tem1;
+-----+------------+-----------+-----+
| sid | student_id | course_id | num |
+-----+------------+-----------+-----+
|   1 |          1 |         1 |  10 |
|   2 |          1 |         2 |   9 |
|   6 |          2 |         1 |   8 |
|  10 |          3 |         1 |  77 |
|  11 |          3 |         2 |  66 |
|  14 |          4 |         1 |  79 |
|  15 |          4 |         2 |  11 |
|  18 |          5 |         1 |  79 |
|  19 |          5 |         2 |  11 |
|  22 |          6 |         1 |   9 |
|  23 |          6 |         2 | 100 |
|  26 |          7 |         1 |   9 |
|  27 |          7 |         2 | 100 |
|  30 |          8 |         1 |   9 |
|  31 |          8 |         2 | 100 |
|  34 |          9 |         1 |  91 |
|  35 |          9 |         2 |  88 |
|  38 |         10 |         1 |  90 |
|  39 |         10 |         2 |  77 |
|  42 |         11 |         1 |  90 |
|  43 |         11 |         2 |  77 |
|  46 |         12 |         1 |  90 |
|  47 |         12 |         2 |  77 |
|  53 |          2 |         2 |  65 |
+-----+------------+-----------+-----+
24 rows in set (0.00 sec)

MariaDB [sqlexample]> select * from tem1 where sid > 16;
+-----+------------+-----------+-----+
| sid | student_id | course_id | num |
+-----+------------+-----------+-----+
|  18 |          5 |         1 |  79 |
|  19 |          5 |         2 |  11 |
|  22 |          6 |         1 |   9 |
|  23 |          6 |         2 | 100 |
|  26 |          7 |         1 |   9 |
|  27 |          7 |         2 | 100 |
|  30 |          8 |         1 |   9 |
|  31 |          8 |         2 | 100 |
|  34 |          9 |         1 |  91 |
|  35 |          9 |         2 |  88 |
|  38 |         10 |         1 |  90 |
|  39 |         10 |         2 |  77 |
|  42 |         11 |         1 |  90 |
|  43 |         11 |         2 |  77 |
|  46 |         12 |         1 |  90 |
|  47 |         12 |         2 |  77 |
|  53 |          2 |         2 |  65 |
+-----+------------+-----------+-----+
17 rows in set (0.00 sec)