精华内容
下载资源
问答
  • 在mysql中,可以使用“CREATE VIEW”语句来创建视图,语法格式为“CREATE VIEW AS ”;其中“”不能包含FROM子句中的子查询,不能引用预处理语句参数。创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以...

    在mysql中,可以使用“CREATE VIEW”语句来创建视图,语法格式为“CREATE VIEW AS ”;其中“”不能包含FROM子句中的子查询,不能引用预处理语句参数。

    2a367756900dab02e306ed607d5d0b1c.png

    创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。

    基本语法

    可以使用 CREATE VIEW 语句来创建视图。

    语法格式如下:CREATE VIEW AS

    语法说明如下。:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。

    :指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。

    对于创建视图中的 SELECT 语句的指定存在以下限制:用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。

    SELECT 语句不能引用系统或用户变量。

    SELECT 语句不能包含 FROM 子句中的子查询。

    SELECT 语句不能引用预处理语句参数。

    视图定义中引用的表或视图必须存在。但是,创建完视图后,可以删除定义引用的表或视图。可使用 CHECK TABLE 语句检查视图定义是否存在这类问题。

    视图定义中允许使用 ORDER BY 语句,但是若从特定视图进行选择,而该视图使用了自己的 ORDER BY 语句,则视图定义中的 ORDER BY 将被忽略。

    视图定义中不能引用 TEMPORARY 表(临时表),不能创建 TEMPORARY 视图。

    WITH CHECK OPTION 的意思是,修改视图时,检查插入的数据是否符合 WHERE 设置的条件。

    创建基于单表的视图

    MySQL 可以在单个数据表上创建视图。

    查看 test_db 数据库中的 tb_students_info 表的数据,如下所示。mysql> SELECT * FROM tb_students_info;

    +----+--------+---------+------+------+--------+------------+

    | id | name | dept_id | age | sex | height | login_date |

    +----+--------+---------+------+------+--------+------------+

    | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 |

    | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |

    | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |

    | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |

    | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |

    | 6 | John | 2 | 21 | M | 172 | 2015-11-11 |

    | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |

    | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |

    | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |

    | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |

    +----+--------+---------+------+------+--------+------------+

    10 rows in set (0.00 sec)

    【实例 1】在 tb_students_info 表上创建一个名为 view_students_info 的视图,输入的 SQL 语句和执行结果如下所示。mysql> CREATE VIEW view_students_info

    -> AS SELECT * FROM tb_students_info;

    Query OK, 0 rows affected (0.00 sec)

    mysql> SELECT * FROM view_students_info;

    +----+--------+---------+------+------+--------+------------+

    | id | name | dept_id | age | sex | height | login_date |

    +----+--------+---------+------+------+--------+------------+

    | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 |

    | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |

    | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |

    | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |

    | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |

    | 6 | John | 2 | 21 | M | 172 | 2015-11-11 |

    | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |

    | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |

    | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |

    | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |

    +----+--------+---------+------+------+--------+------------+

    10 rows in set (0.04 sec)

    默认情况下,创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。

    【实例 2】在 tb_students_info 表上创建一个名为 v_students_info 的视图,输入的 SQL 语句和执行结果如下所示。mysql> CREATE VIEW v_students_info

    -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date)

    -> AS SELECT id,name,dept_id,age,sex,height,login_date

    -> FROM tb_students_info;

    Query OK, 0 rows affected (0.06 sec)

    mysql> SELECT * FROM v_students_info;

    +------+--------+------+-------+-------+----------+------------+

    | s_id | s_name | d_id | s_age | s_sex | s_height | s_date |

    +------+--------+------+-------+-------+----------+------------+

    | 1 | Dany | 1 | 24 | F | 160 | 2015-09-10 |

    | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |

    | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |

    | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |

    | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |

    | 6 | John | 2 | 21 | M | 172 | 2015-11-11 |

    | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |

    | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |

    | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |

    | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |

    +------+--------+------+-------+-------+----------+------------+

    10 rows in set (0.01 sec)

    可以看到,view_students_info 和 v_students_info 两个视图中的字段名称不同,但是数据却相同。因此,在使用视图时,可能用户不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。

    创建基于多表的视图

    MySQL 中也可以在两个以上的表中创建视图,使用 CREATE VIEW 语句创建。

    【实例 3】在表 tb_student_info 和表 tb_departments 上创建视图 v_students_info,输入的 SQL 语句和执行结果如下所示。mysql> CREATE VIEW v_students_info

    -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date)

    -> AS SELECT id,name,dept_id,age,sex,height,login_date

    -> FROM tb_students_info;

    Query OK, 0 rows affected (0.06 sec)

    mysql> SELECT * FROM v_students_info;

    +------+--------+------+-------+-------+----------+------------+

    | s_id | s_name | d_id | s_age | s_sex | s_height | s_date |

    +------+--------+------+-------+-------+----------+------------+

    | 1 | Dany | 1 | 24 | F | 160 | 2015-09-10 |

    | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |

    | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |

    | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |

    | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |

    | 6 | John | 2 | 21 | M | 172 | 2015-11-11 |

    | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |

    | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |

    | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |

    | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |

    +------+--------+------+-------+-------+----------+------------+

    10 rows in set (0.01 sec)

    通过这个视图可以很好地保护基本表中的数据。视图中包含 s_id、s_name 和 dept_name,s_id 字段对应 tb_students_info 表中的 id 字段,s_name 字段对应 tb_students_info 表中的 name 字段,dept_name 字段对应 tb_departments 表中的 dept_name 字段。

    展开全文
  • 视图是通过存放SQL查询语句,使其被使用时能够创建出一张临时表。视图创建临时表,不储存数据,只储存SQL语句。如何创建视图?-- 创建视图create view 视图名称(,,...)as;注意:视图列名应与查询语句中的列名一一...

    一、视图

    什么是视图?

    视图是通过存放SQL查询语句,使其被使用时能够创建出一张临时表。

    视图创建临时表,不储存数据,只储存SQL语句。

    如何创建视图?

    -- 创建视图create view 视图名称(,,...)

    as

    ;

    注意:视图列名应与查询语句中的列名一一对应!

    在查询编辑器写好创建视图的SQL语句后,点击运行,然后在视图中刷新,可以看到创建好的视图。

    如何使用视图?

    视图有什么用?

    对于重复使用的SQL语句,可使用视图进行打包,从而避免重复造轮子;此外,在复杂语句的情况下,使用视图可以简化语句,提高效率。

    由于视图存储的是SQL语句,所以,原表更新时,视图创建的临时表也会同步更新;另外,也不占用很多存储空间。

    视图的注意事项?

    注意1:避免在视图是基础上创建视图,因为多重视图会降低SQL的性能和效率。

    注意2:不能往视图里插入数据。

    二、子查询

    什么是子查询?

    子查询是一次性的视图,在查询中再嵌套一个查询。

    子查询在运行SQL语句时产生临时表,结束后消失。

    存在子查询的情况下,会先运行子查询的语句,然后才运行外层的查询语句。

    如何使用子查询?...from (子查询)

    ... in (子查询)

    ...any (子查询)

    ...all (子查询)

    4个关键字后都可以接子查询

    例1(any + 子查询):哪些学生的成绩比课程0002的全部成绩里的任意一个高?

    -- 哪些学生的成绩比课程0002的全部成绩里的任意一个高?select 学号,成绩

    from score

    where 成绩 > any(

    select 成绩

    from score

    where 课程号 = '0002'

    );

    例2(all + 子查询):哪些学生的成绩比课程0002的全部成绩里的都高?

    -- 哪些学生的成绩比课程0002的全部成绩里的都高?select 学号,成绩

    from score

    where 成绩 > all(

    select 成绩

    from score

    where 课程号 = '0002'

    );

    子查询有什么用?

    偶尔使用的查询语句,且里面需要嵌套查询语句,则使用子查询;如果需要重复使用的,则使用视图。

    子查询的注意事项?

    注意1:all、any、in等得到的是数字集合,不能进行运算

    注意2:子查询可以嵌套子查询,但应尽量避免层层嵌套,因为会影响阅读和性能

    注意3:子查询尽量用as赋予名称,方便阅读

    加上子查询后的SQL运行顺序:

    三、标量子查询

    标量子查询是只返回一个值的子查询。

    因为只返回一个值,所以标量子查询可以进行比较运算,以及搭配in、any、all和between使用。

    例如:查询大于平均成绩学生的学号和成绩

    四、关联子查询

    什么是关联子查询?

    关联子查询的特点是利用主查询与子查询的关联条件,将各自查询结果相互传递。

    SQL语句的正常运行顺序是:子查询 → 主查询。但是关联子查询不一样,顺序是:主查询 → 子查询 → 主查询,循环执行,直到将主查询的所有值都查询完毕。

    例如:查找出每个课程中 大于对应课程平均成绩的学生

    -- 查找出每个课程中 大于对应课程平均成绩的学生select 学号,课程号,成绩

    from score as s1

    where 成绩 > (select avg(成绩)

    from score as s2

    where s1.课程号 = s2.课程号

    );

    第一步:运行主查询,

    select 学号,课程号,成绩 from score;

    得到结果如下:

    第二步:取出第一行的值,套入子查询继续运行。因为子查询中s1.课程号 = s2.课程号,所以子查询的语句相当于:

    select avg(成绩)

    from score

    where 课程号 = '0001';

    得到的结果是:

    第三步:将这个结果套入外层的主查询,同时课程号依然是‘0001’

    select 学号,课程号,成绩

    from score as s1

    where 成绩 >70

    and 课程号 = '0001';

    结果如下:

    第四步:进入下一个循环,即取第二行的值,然后套入子查询继续运行

    第五步:将每个循环得到的值进行合并,得到最后的结果

    关联子查询的运行逻辑如图所示:

    什么时候使用关联子查询?

    需要在每个组里进行比较的时候。

    五、常用函数

    六、SQLZOO练习题

    展开全文
  • 在mysql中,可以使用“CREATE VIEW”语句来创建视图,语法格式为“CREATE VIEW AS ”;其中“”不能包含FROM子句中的子查询,不能引用预处理语句参数。(推荐教程:mysql视频教程)创建视图是指在已经存在的 MySQL ...

    在mysql中,可以使用“CREATE VIEW”语句来创建视图,语法格式为“CREATE VIEW AS ”;其中“”不能包含FROM子句中的子查询,不能引用预处理语句参数。

    6ee2433d1b96279cbd68fe62d1417430.png

    (推荐教程:mysql视频教程)

    创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。

    基本语法

    可以使用 CREATE VIEW 语句来创建视图。

    语法格式如下:

    CREATE VIEW AS

    语法说明如下。

    :指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。

    :指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。

    对于创建视图中的 SELECT 语句的指定存在以下限制:

    用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。

    SELECT 语句不能引用系统或用户变量。

    SELECT 语句不能包含 FROM 子句中的子查询。

    SELECT 语句不能引用预处理语句参数。

    视图定义中引用的表或视图必须存在。但是,创建完视图后,可以删除定义引用的表或视图。可使用 CHECK TABLE 语句检查视图定义是否存在这类问题。

    视图定义中允许使用 ORDER BY 语句,但是若从特定视图进行选择,而该视图使用了自己的 ORDER BY 语句,则视图定义中的 ORDER BY 将被忽略。

    视图定义中不能引用 TEMPORARY 表(临时表),不能创建 TEMPORARY 视图。

    WITH CHECK OPTION 的意思是,修改视图时,检查插入的数据是否符合 WHERE 设置的条件。

    创建基于单表的视图

    MySQL 可以在单个数据表上创建视图。

    查看 test_db 数据库中的 tb_students_info 表的数据,如下所示。

    mysql> SELECT * FROM tb_students_info; +----+--------+---------+------+------+--------+------------+ | id | name | dept_id | age | sex | height | login_date | +----+--------+---------+------+------+--------+------------+ | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 | | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 | | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 | | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 | | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 | | 6 | John | 2 | 21 | M | 172 | 2015-11-11 | | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 | | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 | | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 | | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 | +----+--------+---------+------+------+--------+------------+ 10 rows in set (0.00 sec)

    【实例 1】在 tb_students_info 表上创建一个名为 view_students_info 的视图,输入的 SQL 语句和执行结果如下所示。

    mysql> CREATE VIEW view_students_info -> AS SELECT * FROM tb_students_info; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM view_students_info; +----+--------+---------+------+------+--------+------------+ | id | name | dept_id | age | sex | height | login_date | +----+--------+---------+------+------+--------+------------+ | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 | | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 | | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 | | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 | | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 | | 6 | John | 2 | 21 | M | 172 | 2015-11-11 | | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 | | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 | | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 | | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 | +----+--------+---------+------+------+--------+------------+ 10 rows in set (0.04 sec)

    默认情况下,创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。

    【实例 2】在 tb_students_info 表上创建一个名为 v_students_info 的视图,输入的 SQL 语句和执行结果如下所示。

    mysql> CREATE VIEW v_students_info -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date) -> AS SELECT id,name,dept_id,age,sex,height,login_date -> FROM tb_students_info; Query OK, 0 rows affected (0.06 sec) mysql> SELECT * FROM v_students_info; +------+--------+------+-------+-------+----------+------------+ | s_id | s_name | d_id | s_age | s_sex | s_height | s_date | +------+--------+------+-------+-------+----------+------------+ | 1 | Dany | 1 | 24 | F | 160 | 2015-09-10 | | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 | | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 | | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 | | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 | | 6 | John | 2 | 21 | M | 172 | 2015-11-11 | | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 | | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 | | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 | | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 | +------+--------+------+-------+-------+----------+------------+ 10 rows in set (0.01 sec)

    可以看到,view_students_info 和 v_students_info 两个视图中的字段名称不同,但是数据却相同。因此,在使用视图时,可能用户不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。

    创建基于多表的视图

    MySQL 中也可以在两个以上的表中创建视图,使用 CREATE VIEW 语句创建。

    【实例 3】在表 tb_student_info 和表 tb_departments 上创建视图 v_students_info,输入的 SQL 语句和执行结果如下所示。

    mysql> CREATE VIEW v_students_info -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date) -> AS SELECT id,name,dept_id,age,sex,height,login_date -> FROM tb_students_info; Query OK, 0 rows affected (0.06 sec) mysql> SELECT * FROM v_students_info; +------+--------+------+-------+-------+----------+------------+ | s_id | s_name | d_id | s_age | s_sex | s_height | s_date | +------+--------+------+-------+-------+----------+------------+ | 1 | Dany | 1 | 24 | F | 160 | 2015-09-10 | | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 | | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 | | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 | | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 | | 6 | John | 2 | 21 | M | 172 | 2015-11-11 | | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 | | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 | | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 | | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 | +------+--------+------+-------+-------+----------+------------+ 10 rows in set (0.01 sec)

    通过这个视图可以很好地保护基本表中的数据。视图中包含 s_id、s_name 和 dept_name,s_id 字段对应 tb_students_info 表中的 id 字段,s_name 字段对应 tb_students_info 表中的 name 字段,dept_name 字段对应 tb_departments 表中的 dept_name 字段。

    展开全文
  • 在mysql中,可以使用“CREATE VIEW”语句来创建视图,语法格式为“CREATE VIEW AS ”;其中“”不能包含FROM子句中的子查询,不能引用预处理语句参数。创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以...

    在mysql中,可以使用“CREATE VIEW”语句来创建视图,语法格式为“CREATE VIEW AS ”;其中“”不能包含FROM子句中的子查询,不能引用预处理语句参数。

    2a367756900dab02e306ed607d5d0b1c.png

    创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。

    基本语法

    可以使用 CREATE VIEW 语句来创建视图。

    语法格式如下:CREATE VIEW AS

    语法说明如下。:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。

    :指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。

    对于创建视图中的 SELECT 语句的指定存在以下限制:用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。

    SELECT 语句不能引用系统或用户变量。

    SELECT 语句不能包含 FROM 子句中的子查询。

    SELECT 语句不能引用预处理语句参数。

    视图定义中引用的表或视图必须存在。但是,创建完视图后,可以删除定义引用的表或视图。可使用 CHECK TABLE 语句检查视图定义是否存在这类问题。

    视图定义中允许使用 ORDER BY 语句,但是若从特定视图进行选择,而该视图使用了自己的 ORDER BY 语句,则视图定义中的 ORDER BY 将被忽略。

    视图定义中不能引用 TEMPORARY 表(临时表),不能创建 TEMPORARY 视图。

    WITH CHECK OPTION 的意思是,修改视图时,检查插入的数据是否符合 WHERE 设置的条件。

    创建基于单表的视图

    MySQL 可以在单个数据表上创建视图。

    查看 test_db 数据库中的 tb_students_info 表的数据,如下所示。mysql> SELECT * FROM tb_students_info;

    +----+--------+---------+------+------+--------+------------+

    | id | name | dept_id | age | sex | height | login_date |

    +----+--------+---------+------+------+--------+------------+

    | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 |

    | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |

    | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |

    | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |

    | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |

    | 6 | John | 2 | 21 | M | 172 | 2015-11-11 |

    | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |

    | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |

    | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |

    | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |

    +----+--------+---------+------+------+--------+------------+

    10 rows in set (0.00 sec)

    【实例 1】在 tb_students_info 表上创建一个名为 view_students_info 的视图,输入的 SQL 语句和执行结果如下所示。mysql> CREATE VIEW view_students_info

    -> AS SELECT * FROM tb_students_info;

    Query OK, 0 rows affected (0.00 sec)

    mysql> SELECT * FROM view_students_info;

    +----+--------+---------+------+------+--------+------------+

    | id | name | dept_id | age | sex | height | login_date |

    +----+--------+---------+------+------+--------+------------+

    | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 |

    | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |

    | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |

    | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |

    | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |

    | 6 | John | 2 | 21 | M | 172 | 2015-11-11 |

    | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |

    | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |

    | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |

    | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |

    +----+--------+---------+------+------+--------+------------+

    10 rows in set (0.04 sec)

    默认情况下,创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。

    【实例 2】在 tb_students_info 表上创建一个名为 v_students_info 的视图,输入的 SQL 语句和执行结果如下所示。mysql> CREATE VIEW v_students_info

    -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date)

    -> AS SELECT id,name,dept_id,age,sex,height,login_date

    -> FROM tb_students_info;

    Query OK, 0 rows affected (0.06 sec)

    mysql> SELECT * FROM v_students_info;

    +------+--------+------+-------+-------+----------+------------+

    | s_id | s_name | d_id | s_age | s_sex | s_height | s_date |

    +------+--------+------+-------+-------+----------+------------+

    | 1 | Dany | 1 | 24 | F | 160 | 2015-09-10 |

    | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |

    | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |

    | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |

    | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |

    | 6 | John | 2 | 21 | M | 172 | 2015-11-11 |

    | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |

    | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |

    | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |

    | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |

    +------+--------+------+-------+-------+----------+------------+

    10 rows in set (0.01 sec)

    可以看到,view_students_info 和 v_students_info 两个视图中的字段名称不同,但是数据却相同。因此,在使用视图时,可能用户不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。

    创建基于多表的视图

    MySQL 中也可以在两个以上的表中创建视图,使用 CREATE VIEW 语句创建。

    【实例 3】在表 tb_student_info 和表 tb_departments 上创建视图 v_students_info,输入的 SQL 语句和执行结果如下所示。mysql> CREATE VIEW v_students_info

    -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date)

    -> AS SELECT id,name,dept_id,age,sex,height,login_date

    -> FROM tb_students_info;

    Query OK, 0 rows affected (0.06 sec)

    mysql> SELECT * FROM v_students_info;

    +------+--------+------+-------+-------+----------+------------+

    | s_id | s_name | d_id | s_age | s_sex | s_height | s_date |

    +------+--------+------+-------+-------+----------+------------+

    | 1 | Dany | 1 | 24 | F | 160 | 2015-09-10 |

    | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |

    | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |

    | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |

    | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |

    | 6 | John | 2 | 21 | M | 172 | 2015-11-11 |

    | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |

    | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |

    | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |

    | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |

    +------+--------+------+-------+-------+----------+------------+

    10 rows in set (0.01 sec)

    通过这个视图可以很好地保护基本表中的数据。视图中包含 s_id、s_name 和 dept_name,s_id 字段对应 tb_students_info 表中的 id 字段,s_name 字段对应 tb_students_info 表中的 name 字段,dept_name 字段对应 tb_departments 表中的 dept_name 字段。

    展开全文
  • 2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。3.如果是JOIN的话,它是走嵌套查询...
  • 什么情况下执行相同的sql查询语句会使用同一个Sqlsession?设么情况下相同的sql查询语句会创建不同的Sqlsession从而导致一级缓存失效?(不好意思默认是5C,发布时候没注意,有会的我可以加微信发红包)
  • 适用于所有屏幕大小的设计 固定宽度的静态网站很快被灵活的响应式设计所取代,该设计可以根据屏幕大小进行上扩和下扩。...实现响应式设计的主要途径是使用 CSS 媒体查询。在本文中,我们将了解如...
  • 如果您喜欢使用mq-scss,则还可以使用以下这些: 允许您在JavaScript文件中使用mq-scss样式的媒体查询。 mq-scss样式可解决CSS中缺少容器查询的问题。 内容 安装 如果您以前从未使用过npm,请安装
  • 数据库中存在多种对象,表和视图都是数据库中的对象,创建视图时名称不能和表明重名,视图实际上是代表了一段sql查询语句,可以理解成视图是一张虚拟的表,表中的数据会随着原表的改变而改变。 为什么使用视图? ...
  • 视图有什么用①SQL查询语句若频繁使用,那么可以创建视图以便重复使用②保证数据的最新状态③节省存放数据的空间3.注意事项①避免在视图基础上再去创建视图(多重视图会降低视图的使用效率)②...
  • 当数据库中数据量很大时,查找数据会变得很慢,我们就可以通过索引来提高数据库的查询效率。 索引的使用 查看表中已有索引: show index from 表名; 说明: 主键列会自动创建索引 索引的创建: -- ....
  • 1.对于mysql,不推荐使用查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。 2.子查询就更别用了,效率太差,执行子...
  • 经常有同学问我,我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。 另外插入一个题外话,个人认为团队要合理的使用ORM,可以参考 ORM的权衡和抉择...
  • 一、Select语句:67页select语句除了可以查看数据库中的表格和视图的信息外,还可以查看SQL Server的系统信息、复制、创建数据表,其查询功能强大,是SQL语言的灵魂语句,也是SQL中使用频率最高的语句。基本select...
  • 适当的使用索引可以提高数据检索速度,可以给经常需要进行查询的字段创建索引  Oracle的索引分为5种:唯一索引,组合索引,反向键索引,位图索引,基于函数的索引  创建索引的标准语法:  CREATE INDEX ...
  • 一:视图1.什么是视图:从 SQL的角度来看,视图和表是相同的,...第二个优点就是可以将频繁使用的 SELECT 语句保存成视图,这样就不用每次都重新书写了,可以大大提高效率。3.创建视图CREATE VIEW 视图名称(<视图...
  • 视图有什么用①SQL查询语句若频繁使用,那么可以创建视图以便重复使用②保证数据的最新状态③节省存放数据的空间3.注意事项①避免在视图基础上再去创建视图(多重视图会降低视图的使用效率)②...
  • 经常有同学问我,我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。 另外插入一个题外话,个人认为团队要合理的使用ORM,可以参考 ORM的权衡和抉择。...
  • 2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。 3.如果是JOIN的话,它是走嵌套查询...
  • Mysql视图的创建使用 ... 视图是MySQL的一种虚拟表,实际的表我们可以看到每一行的数据,而视图是另一种形式的表,他可以将任何的查询结果变成一种虚拟的表方便下一次进行查询,例如如下两张表。 ...
  • 2.根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合,它存储了要执行检索的查询语句的定义,以便在引用该视图时使用。二.why(为什么要用视图?视图的优点)1.简化数...
  • 使用序列创建主键

    千次阅读 2018-01-11 11:35:44
    的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。创建序列需 要CREATE SEQUENCE系统权限。序列的创建语法如下: CREATE SEQUENCE 序列名 [INCREMENT BY n

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,000
精华内容 1,200
关键字:

创建查询可以使用什么