當前位置:首頁 » 考試成績 » mysql創建學生成績視圖

mysql創建學生成績視圖

發布時間: 2021-02-19 02:15:45

Ⅰ 資料庫編寫 創建視圖view2,查詢所有學生的學號,姓名和平均成績

create view view2(sno,savg,sname)
as select Student.Sno,Sname,AVG((cast(StudentCourse.Grade as int)))
from Student join StudentCourse
on StudentCourse.Sno=Student.Sno
group by Student.Sno,Student.Sname
即可復,反正制Sno已經保證唯一了,再加上Sname也無法再干擾什麼了。

Ⅱ mysql創建視圖

mysql創建視圖

  1. 首先查詢select select_priv,create_view_priv from mysql.user where user ='root';

  2. 創建視圖create view depart_view as select * from depart;

  3. 查詢試圖結構:desc depart_view;

  4. 第二鍾創建視圖:create view depart_view2(id,name) as select id,name from depart;

    以上是單表上創建視圖;

  5. 多表的視圖創建:create algorithm=merge view student_view1(id,name,sex) as select worker.id,name,sex from worker,student where worker.id = student.w_id with local check option;

  6. 查看視圖的方法:

    1、describe student_view1;

    2、show create view student_view1;

    3、show table status like '視圖名' ;

    所有視圖定義都存在information_schema資料庫下的views表中。查詢views表,可以查看到資料庫中所有視圖的詳細信息。查詢的語句如下:select * from information_schema.views;

Ⅲ 資料庫編寫創建視圖 查詢所有學生的學號,姓名,課程名,成績 在視圖中的「學號」列上創建一個非聚集索引

createviewdbo.view1(sno,sname,cname,grade)
withschemabinding
asselectStudent.Sno,Student.Sname,Course.Cname,StudentCourse.Grade
from
dbo.Studentjoindbo.StudentCourseonStudentCourse.Sno=Student.Sno
joindbo.CourseonCourse.Cno=StudentCourse.Cno

Ⅳ Mysql的題目:創建一個視圖,包含student表中班級代碼是20000001,20000002

create view v_student as

select * from student t where t.代碼 in('20000001','20000002','20000003')

Ⅳ mysql怎樣建立視圖

create or replace view v_name
as
select t1.*,t2.*,t3.*
from A表 t1, B表 t2, C表 t3
where t1.a=t2.b and t2.b1=t3.c

Ⅵ MySQL 如何創建視圖求高手。

create view viewname
as
select score.sid,sname,cname,score
from score left join student1 on score.sid=student1.sid
left join course on score.cid=course.cid

Ⅶ mysql 資料庫怎麼創建視圖

視圖來的創建:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name

[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]

其中:自OR REPLACE :若所創建的試圖已經存在,ORACLE自動重建該視圖;
FORCE:不管基表是否存在ORACLE都會自動創建該視圖;
NOFORCE :只有基表都存在ORACLE才會創建該視圖:
alias:為視圖產生的列定義的別名;
subquery :一條完整的SELECT語句,可以在該語句中定義別名;
WITH CHECK OPTION :插入或修改的數據行必須滿足視圖定義的約束;
WITH READ ONLY :該視圖上不能進行任何DML操作。

Ⅷ mysql多表查詢並創建視圖

MySQL在多個數據表上創建視圖

在MySQL中,使用CREATE VIEW語句也可以在兩個或兩個以上的數據表上創建視圖。

實例

在department表和worker表上創建一個名為worker_view1的視圖。

1. 創建視圖的代碼如下:

CREATE ALGORITHM=MERGE VIEW
worker_view1(name,department,sex,age,location)
AS SELECT name,department.d_name,sex,birthday,address
FROM worker,department WHERE worker.d_id=department.d_id
WITH LOCAL CHECK OPTION;
在DOS提示符窗口中查看MySQL在多個數據表上創建視圖的操作效果。如下圖所示:

在DOS提示符窗口中查看MySQL在多個數據表上創建視圖的操作效果

從上圖中可以看出,代碼的執行結果顯示視圖創建成功。

2. 使用DESC語句查詢虛擬表的結構。如下圖所示:

使用DESC語句查詢虛擬表的結構

從上圖中可以看出,視圖worker_view1的屬性分別為name、department、sex、age和location。

視圖指定的屬性列表對應著兩個不同的表的屬性列(欄位)。

視圖的屬性名與屬性列表中的屬性名相同。

該實例中的SELECT語句查詢出了department表的d_name欄位,還有worker表的name、sex、birthday和address。其中,department表的d_name欄位對應視圖的department欄位;worker表的birthday欄位對應視圖的age欄位。

同時,視圖worker_view1的ALGORITHM的值指定為MERGE。還增加了WITH LOCAL CHECK OPTION約束。

本示例說明,視圖可以將多個表上的操作簡潔的表示出來。

提示

同時在多個表上創建視圖是非常有用的。比如,系統中有student表、department表、score表和grade表,分別存儲學生的信息、院系信息、課程信息和成績信息。可以在這4個表上創建一個視圖,用來顯示學生姓名、學號、班級、院系、所選課程和課程成績。

Ⅸ 如何在MySQL中創建視圖

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

該語句能創建新的視圖,如果給定了OR REPLACE子句,該語句還能替換已有的視圖。select_statement是一種SELECT語句,它給出了視圖的定義。該語句可從基表或其他視圖進行選擇。
該語句要求具有針對視圖的CREATE VIEW許可權,以及針對由SELECT語句選擇的每一列上的某些許可權。對於在SELECT語句中其他地方使用的列,必須具有SELECT許可權。如果還有OR REPLACE子句,必須在視圖上具有DROP許可權。
視圖屬於資料庫。在默認情況下,將在當前資料庫創建新視圖。要想在給定資料庫中明確創建視圖,創建時,應將名稱指定為db_name.view_name。
mysql> CREATE VIEW test.v AS SELECT * FROM t;

表和視圖共享資料庫中相同的名稱空間,因此,資料庫不能包含具有相同名稱的表和視圖。
視圖必須具有唯一的列名,不得有重復,就像基表那樣。默認情況下,由SELECT語句檢索的列名將用作視圖列名。要想為視圖列定義明確的名稱,可使用可選的column_list子句,列出由逗號隔開的ID。column_list中的名稱數目必須等於SELECT語句檢索的列數。
SELECT語句檢索的列可以是對表列的簡單引用。也可以是使用函數、常量值、操作符等的表達式。
對於SELECT語句中不合格的表或視圖,將根據默認的資料庫進行解釋。通過用恰當的資料庫名稱限定表或視圖名,視圖能夠引用表或其他資料庫中的視圖。
能夠使用多種SELECT語句創建視圖。視圖能夠引用基表或其他視圖。它能使用聯合、UNION和子查詢。SELECT甚至不需引用任何錶。在下面的示例中,定義了從另一表選擇兩列的視圖,並給出了根據這些列計算的表達式:
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty | price | value |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+

視圖定義服從下述限制:
· SELECT語句不能包含FROM子句中的子查詢。
· SELECT語句不能引用系統或用戶變數。
· SELECT語句不能引用預處理語句參數。
· 在存儲子程序內,定義不能引用子程序參數或局部變數。
· 在定義中引用的表或視圖必須存在。但是,創建了視圖後,能夠舍棄定義引用的表或視圖。要想檢查視圖定義是否存在這類問題,可使用CHECK TABLE語句。
· 在定義中不能引用TEMPORARY表,不能創建TEMPORARY視圖。
· 在視圖定義中命名的表必須已存在。
· 不能將觸發程序與視圖關聯在一起。
在視圖定義中允許使用ORDER BY,但是,如果從特定視圖進行了選擇,而該視圖使用了具有自己ORDER BY的語句,它將被忽略。
對於定義中的其他選項或子句,它們將被增加到引用視圖的語句的選項或子句中,但效果未定義。例如,如果在視圖定義中包含LIMIT子句,而且從特定視圖進行了選擇,而該視圖使用了具有自己LIMIT子句的語句,那麼對使用哪個LIMIT未作定義。相同的原理也適用於其他選項,如跟在SELECT關鍵字後的ALL、DISTINCT或SQL_SMALL_RESULT,並適用於其他子句,如INTO、FOR UPDATE、LOCK IN SHARE MODE、以及PROCEDURE。
如果創建了視圖,並通過更改系統變數更改了查詢處理環境,會影響從視圖獲得的結果:
mysql> CREATE VIEW v AS SELECT CHARSET(CHAR(65)), COLLATION(CHAR(65));
Query OK, 0 rows affected (0.00 sec)

mysql> SET NAMES 'latin1';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM v;
+-------------------+---------------------+
| CHARSET(CHAR(65)) | COLLATION(CHAR(65)) |
+-------------------+---------------------+
| latin1 | latin1_swedish_ci |
+-------------------+---------------------+
1 row in set (0.00 sec)

mysql> SET NAMES 'utf8';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM v;
+-------------------+---------------------+
| CHARSET(CHAR(65)) | COLLATION(CHAR(65)) |
+-------------------+---------------------+
| utf8 | utf8_general_ci |
+-------------------+---------------------+
1 row in set (0.00 sec)

可選的ALGORITHM子句是對標准SQL的MySQL擴展。ALGORITHM可取三個值:MERGE、TEMPTABLE或UNDEFINED。如果沒有ALGORITHM子句,默認演算法是UNDEFINED(未定義的)。演算法會影響MySQL處理視圖的方式。
對於MERGE,會將引用視圖的語句的文本與視圖定義合並起來,使得視圖定義的某一部分取代語句的對應部分。
對於TEMPTABLE,視圖的結果將被置於臨時表中,然後使用它執行語句。
對於UNDEFINED,MySQL將選擇所要使用的演算法。如果可能,它傾向於MERGE而不是TEMPTABLE,這是因為MERGE通常更有效,而且如果使用了臨時表,視圖是不可更新的。
明確選擇TEMPTABLE的1個原因在於,創建臨時表之後、並在完成語句處理之前,能夠釋放基表上的鎖定。與MERGE演算法相比,鎖定釋放的速度更快,這樣,使用視圖的其他客戶端不會被屏蔽過長時間。
視圖演算法可以是UNDEFINED,有三種方式:
· 在CREATE VIEW語句中沒有ALGORITHM子句。
· CREATE VIEW語句有1個顯式ALGORITHM = UNDEFINED子句。
· 為僅能用臨時表處理的視圖指定ALGORITHM = MERGE。在這種情況下,MySQL將生成告警,並將演算法設置為UNDEFINED。
正如前面所介紹的那樣,通過將視圖定義中的對應部分合並到引用視圖的語句中,對MERGE進行處理。在下面的示例中,簡要介紹了MERGE的工作方式。在該示例中,假定有1個具有下述定義的視圖v_merge:
CREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS
SELECT c1, c2 FROM t WHERE c3 > 100;

示例1:假定發出了下述語句:
SELECT * FROM v_merge;

MySQL以下述方式處理語句:
· v_merge成為t
· *成為vc1、vc2,與c1、c2對應
· 增加視圖WHERE子句
所產生的將執行的語句為:
SELECT c1, c2 FROM t WHERE c3 > 100;

示例2:假定發出了下述語句:
SELECT * FROM v_merge WHERE vc1 < 100;

該語句的處理方式與前面介紹的類似,但vc1 < 100變為c1 < 100,並使用AND連接詞將視圖的WHERE子句添加到語句的WHERE子句中(增加了圓括弧以確保以正確的優先順序執行子句部分)。所得的將要執行的語句變為:
SELECT c1, c2 FROM t WHERE (c3 > 100) AND (c1 < 100);

事實上,將要執行的語句是具有下述形式的WHERE子句:
WHERE (select WHERE) AND (view WHERE)

MERGE演算法要求視圖中的行和基表中的行具有一對一的關系。如果不具有該關系。必須使用臨時表取而代之。如果視圖包含下述結構中的任何一種,將失去一對一的關系:
· 聚合函數(SUM(), MIN(), MAX(), COUNT()等)。
· DISTINCT
· GROUP BY
· HAVING
· UNION或UNION ALL
· 僅引用文字值(在該情況下,沒有基本表)。
某些視圖是可更新的。也就是說,可以在諸如UPDATE、DELETE或INSERT等語句中使用它們,以更新基表的內容。對於可更新的視圖,在視圖中的行和基表中的行之間必須具有一對一的關系。還有一些特定的其他結構,這類結構會使得視圖不可更新。更具體地講,如果視圖包含下述結構中的任何一種,那麼它就是不可更新的:
· 聚合函數(SUM(), MIN(), MAX(), COUNT()等)。
· DISTINCT
· GROUP BY
· HAVING
· UNION或UNION ALL
· 位於選擇列表中的子查詢
· Join
· FROM子句中的不可更新視圖
· WHERE子句中的子查詢,引用FROM子句中的表。
· 僅引用文字值(在該情況下,沒有要更新的基本表)。
· ALGORITHM = TEMPTABLE(使用臨時表總會使視圖成為不可更新的)。
關於可插入性(可用INSERT語句更新),如果它也滿足關於視圖列的下述額外要求,可更新的視圖也是可插入的:
· 不得有重復的視圖列名稱。
· 視圖必須包含沒有默認值的基表中的所有列。
· 視圖列必須是簡單的列引用而不是導出列。導出列不是簡單的列引用,而是從表達式導出的。下面給出了一些導出列示例:
· 3.14159
· col1 + 3
· UPPER(col2)
· col3 / col4
· (subquery)

混合了簡單列引用和導出列的視圖是不可插入的,但是,如果僅更新非導出列,視圖是可更新的。考慮下述視圖:
CREATE VIEW v AS SELECT col1, 1 AS col2 FROM t;

該視圖是不可插入的,這是因為col2是從表達式導出的。但是,如果更新時不更新col2,它是可更新的。這類更新是允許的:
UPDATE v SET col1 = 0;

下述更新是不允許的,原因在於,它試圖更新導出列:
UPDATE v SET col2 = 0;

在某些情況下,能夠更新多表視圖,假定它能使用MERGE演算法進行處理。為此,視圖必須使用內部聯合(而不是外部聯合或UNION)。此外,僅能更新視圖定義中的單個表,因此,SET子句必須僅命名視圖中某一表的列。即使從理論上講也是可更新的,不允許使用UNION ALL的視圖,這是因為,在實施中將使用臨時表來處理它們。
對於多表可更新視圖,如果是將其插入單個表中,INSERT能夠工作。不支持DELETE。
對於可更新視圖,可給定WITH CHECK OPTION子句來防止插入或更新行,除非作用在行上的select_statement中的WHERE子句為「真」。
在關於可更新視圖的WITH CHECK OPTION子句中,當視圖是根據另一個視圖定義的時,LOCAL和CASCADED關鍵字決定了檢查測試的范圍。LOCAL關鍵字對CHECK OPTION進行了限制,使其僅作用在定義的視圖上,CASCADED會對將進行評估的基表進行檢查。如果未給定任一關鍵字,默認值為CASCADED。

Ⅹ mysql中如何建立視圖

方法/步驟

1
為了不影響其他的資料庫表,新建一張資料庫表t_worker_info,代碼如下:
create table t_worker_info(
id int(8) primary key not null auto_increment,
w_id int(10) not null,
w_name varchar(20) not null,
w_age int(3),
w_sex varchar(10),
w_birth varchar(20)
);

2
創建t_worker_info後,查看一下數據結構,代碼如下:
desc t_worker_info;

3
雙擊選中的資料庫,在Views滑鼠右鍵「Create View...」,打開編輯窗口,並在窗口中輸入代碼,代碼如下:
CREATE VIEW `view_worker_info` AS
SELECT * FROM t_worker_info;

4
查看創建視圖的基本信息,利用desc或describe語句,代碼如下:
desc view_worker_info;

5
查看視圖信息,如存儲引擎、數據長度等,如果上述指標都為null,說明視圖是虛表,代碼如下:
show table status like 'view_worker_info';

6
查看創建視圖的詳細信息,需要用到show create view 視圖名,代碼如下:
show create view view_worker_info;

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919