sql表和视图建立以及查询
实现SQL Server数据库中的视图和查询
§2 创建视图
创建视图时应该注意以下情况: ①只能在当前数据库中创建视图。 ②视图中最多只能引用1024列。 ③如果视图引用的基表或者视图被删除, 则该视图不能再被使用,直到创建新的基表或 者视图。 ④如果视图中某一列是函数、数学表达式、 常量或者来自多个表的列名相同,则必须为列 定义名称。
⑤当视图所引用不同基表的列中有相同列定列的别名。 ⑥不能在视图上创建索引,不能在规则、 缺省、触发器的定义中引用视图。 ⑦当通过视图查询数据时,SQL Server要 检查以确保语句中涉及的所有数据库对象存在, 而且数据修改语句不能违反数据完整性规则。 ⑧视图的名称必须遵循标识符的规则,且 对每个用户必须是唯一的。此外,该名称不得 与该用户拥有的任何表的名称相同。
(6)WITH CHECK OPTION:强制视图上 执行的所有数据修改语句都必须符合由 SELECT查询语句设置的准则。通过视图修改 数据行时,WITH CHECK OPTION 可确保提 交修改后,仍可通过视图看到修改的数据。 ( 7 ) WITH ENCRYPTION : 表 示 SQL Server 加密包含 CREATE VIEW 语句文本的 系统表列。使用 WITH ENCRYPTION 可防止 将视图作为 SQL Server 复制的一部分发布。
(3)定义视图的语句是一个 SELECT查询语句。 该语句可以使用多个表或其它视图。若要从创 建视图的 SELECT 子句所引用的对象中选择, 必须具有适当的权限。视图不必是具体某个表 的行和列的简单子集。可以用具有任意复杂性 的 SELECT 子句,使用多个表或其它视图来创 建视图。 (4)在索引视图定义中,SELECT 语句必须是 单个表的语句或带有可选聚合的多表 JOIN。
SELECT子句
SQL中的视图创建
(1)、在对象资源管理器中,利用图形化的方法,创建下列视图:●视图view_male,包含学生信息表中所有男生信息。
在视图设计器中添加学生信息表、成绩表、课程表;并在下面输入列名,然后查询,执行:结果:●视图view_stu_grade,包含每个同学的学号、姓名、课程名和成绩信息表;同上一样输入;执行结果:视图view_avg,包含每个同学的学号、姓名和平均成绩信息:保存时更改别名,如下图;(2)、启动SQL server management studio,在对象资源管理器中,利用图形化的方法试图v_male进行修改,只显示信息学院所有男生的信息。
打开view_male的视图,并编辑前一千行;输入语句,执行查询:(3)、启动SQL server management studio,在对象资源管理器中,利用图形化的方法删除视图view_male。
直接点击右键,在视图中进行删除:(4)、启动SQL server management studio,在对象资源管理器中,利用图形化的方法查询视图view_male中的记录信息。
在视图中右键编辑前200行,即可查询:(5)、启动SQL server management studio,在对象资源管理器中,利用T_SQL语句CREATE VIEW命令创建下列视图:视图view_female,包含学生信息表中的所有女生的信息。
视图view_count,包含每个院系的名称和学生人数信息。
视图view_sum,包含每个同学的学号、姓名、课程总成绩信息。
(6)、启动SQL server management studio,在对象资源管理器中,利用T_SQL语句ALTERview命令修改视图view_female,增加加密性。
(7)、启动SQL server management studio,在对象资源管理器中,利用T_SQL语句DROPview命令删除视图view_female。
SQL实验操作总结
外源表
选定的建立外键的表
4)数据导入和导出
•
1.导出数据的基本操作 1)选择数据库
2)右键选择【任务】---【导出数据】 3)选择导出数据源(即所要导出的数据库,会自动选择)
4)选择导出数据目标(即导出的数据类型)
平面文件目标=文本文件(.txt) Microsoft excel= excel 表格
附加数据库的操作
3.打开表、浏览记录 4.建表(定义表结构、输入记录)
–操作步骤(P276-277)
字段属性(决定字段数据的存储和显示方式) 1.字段长度
2.默认值或绑定 3.允许空
…..
建立新表 输入名称和类型 指定字段属性值 指定关键字 输入数据
字段名称规定:
1.不能在同一个表中两次使用同一个字段名; 2.一个字段名最多只能有64个字符; 3.字段名内可包含各种字母、数字、 空格和特殊符号的组合,
4.但不能用感叹号、顿号、重音符号和括号; 5.字段名不能以空格或控制符开始。
创建表的步骤: 1)定义表结构:给表的每一列取字段名,并确定每一
列的数据类型、数据长度、列数据是否可以为空等。
2)设置约束:设置约束是为了限制该列输入值的取值 范围,以保证输入数据的正确性和一致性。
3)添加数据:表结构建立完成之后,就可以向表中输 入数据了。
下部标签显示上部网格中被
选中的字段的属性和说明。 下部的标签被分成“General” 和“Table Designer”两部分。 用于定义表的各种不同属性。
输入数据表的数据
5.数据表的修改
1)表内容的修改(增加、删除记录、字段内容修改)
2)结构修改(修改、添加和删除字段)
3)主键、索引
主键在修改表结构上设置 在这里设置外键
SQL创建视图
SQL创建视图1、视图的理解从⽤户⾓度来看,⼀个视图是从⼀个特定的⾓度来查看数据库中的数据。
从数据库系统内部来看,⼀个视图是由SELECT语句组成的查询定义的虚拟表。
从数据库系统内部来看,视图是由⼀张或多张表中的数据组成的,从数据库系统外部来看,视图就如同⼀张表⼀样,对表能够进⾏的⼀般操作都可以应⽤于视图,例如查询,插⼊,修改,删除操作等。
2、视图的⽤途– 筛选表中的⾏– 防⽌未经许可的⽤户访问敏感数据– 降低数据库的复杂程度– 将多个物理数据库抽象为⼀个逻辑数据库使⽤视图可以给⽤户和开发⼈员带来很多好处。
具体为:A. 对最终⽤户的好处( 1 )结果更容易理解创建视图时,可以将列名改为有意义的名称,使⽤户更容易理解列所代表的内容。
在视图中修改列名不会影响基表的列名。
( 2 )获得数据更容易很多⼈对 SQL 不太了解,因此对他们来说创建对多个表的复杂查询很困难。
可以通过创建视图来⽅便⽤户访问多个表中的数据。
B. 对开发⼈员的好处( 1 )限制数据检索更容易开发⼈员有时需要隐藏某些⾏或列中的信息。
通过使⽤视图,⽤户可以灵活地访问他们需要的数据,同时保证同⼀个表或其他表中的其他数据的安全性。
要实现这⼀⽬标,可以在创建视图时将要对⽤户保密的列排除在外。
( 2 )维护应⽤程序更⽅便调试视图⽐调试查询更容易。
跟踪视图中过程的各个步骤中的错误更为容易,这是因为所有的步骤都是视图的组成部分3、如何创建使⽤视图• 使⽤ T-SQL 语句创建视图的语法CREATE VIEW view_nameAS<select语句>IF EXISTS (SELECT * FROM sysobjects WHERE /*检测是否存在*/name = 'view_stuInfo_stuMarks')DROP VIEW view_stuInfo_stuMarks /*删除视图*/GOCREATE VIEW view_stuInfo_stuMarks /*创建视图*/ASSELECT 姓名=stuName,学号=stuInfo.stuNo,笔试成绩 =writtenExam, 机试成绩=labExam,平均分=(writtenExam+labExam)/2FROM stuInfo LEFT JOIN stuMarksON stuInfo.stuNo=stuMarks.stuNoGOSELECT * FROM view_stuInfo_stuMarks /*使⽤视图*/[javascript]1. CREATE VIEW view_name2. AS3. <select语句>4. IF EXISTS (SELECT * FROM sysobjects WHERE /*检测是否存在*/5. name = 'view_stuInfo_stuMarks')6. DROP VIEW view_stuInfo_stuMarks /*删除视图*/7. GO8. CREATE VIEW view_stuInfo_stuMarks /*创建视图*/9. AS10. SELECT 姓名=stuName,学号=stuInfo.stuNo,11. 笔试成绩 =writtenExam, 机试成绩=labExam,12. 平均分=(writtenExam+labExam)/213. FROM stuInfo LEFT JOIN stuMarks14. ON stuInfo.stuNo=stuMarks.stuNo15. GO16. SELECT * FROM view_stuInfo_stuMarks /*使⽤视图*/从⼀个或者多个表或视图中导出的虚拟表,其结构和数据是建⽴在对表的查询基础上的。
sql表和视图建立以及查询
1在已有数据库中建立表1)建立会员表USE eshopCREATE TABLE members(m_account V ARCHAR(20) NOT NULL,m_name VARCHAR(20),m_sex CHAR(2),m_birth DATATIME,m_address VARCHAR(50),m_salary MONEY,m_password V ARCHAR(20))GOvarchar也是表示字符数据比char保存可变长度的字符串2)查询信息代码:USE eshopEXEC sp_help members3)增加一列电子邮件m_mail 代码USE eshopALTER TABLE membersADD m_mail VARCHAR(30)4)删除列表代码:USE eshopALTER TABLE membersDROP COLUMN m_mail (column 列)(USE eshopDROP TABLE members) 删除整个表查看表中单个数据:USE eshopselect *查找内容from mumbers表名where 限制条件and 条件2在表中增删改数据1)在eshop 数据库的members 表中增加2 条记录,内容如下:‘jinjin’, ‘津津有味’,‘女’,‘1982-04-14’,‘北京市’,8200.0, ‘jinjin’‘liuzc518’,‘刘志成’,‘男’,‘1972-05-18’,‘湖南株洲’,3500.0,‘liuzc518’Sql代码:USE eshopINSERT INTO members V ALUES('jinjin','津津有味','女','1982-04-14',' 北京市',8200.0, 'jinjin')INSERT INTO members V ALUES('liuzc518','刘志成','男','1972-05-18',' 湖南株洲',3500.0,'liuzc518')Insect into 表名values(’’,’’,......)2)改数据代码:[USE 数据库名UPDATE 表名SET .........WHERE .....ADN ...]例子:(1)将姓名为“津津有味”修改为“刘津”USE eshopUPDATE membersSET m_name=' 刘津'WHERE m_name='津津有味'(2)将m_sex (性别)为‘男’且m_address (家庭地址)为‘湖南株洲’的会员的m_salary (月薪)增加20%,SQL 代码如下所示:USE eshopUPDATE membersSET m_salary=m_salary*(1+0.20)WHERE m_sex=' 男'AND m_address=' 湖南株洲'3)删除表中所有记录:表中个别记录:USE eshop USE eshopDELETE FROM DELETE FROM members membersWHEREm_address=' 北京市'3高级的表查询1)按某字段的升降排序找*Desc降序asc升序USE 数据库Select * from 表where 条件order by字段desc (sac)求和函数USE 数据库select (sum)count(*) from 表where 条件group byTop 数字N 表名from ..选N条记录1. 查询性别为“男”的会员详细信息,查询结果按月薪降序排列,SQL 代码如下所示:USE eshopSELECT *FROM membersWHERE m_sex = ' 男'ORDER BY m_salary DESC2. 查询全体会员的会员帐号,姓名和年龄并按家庭地址升序排列,同一地址中的会员按降序排列,SQL 代码如下所示:USE eshopSELECT m_account, m_name, YEAR(GETDATE())-YEAR(m_birth) 年龄FROM membersORDER BY m_address, m_birth或USE eshopSELECT m_account, m_name, DA TEDIFF(YY, m_birth, GETDA TE()) 年龄FROM membersORDER BY m_address, m_birth3. 查询会员帐号为’liuzc’所购买的商品号和订购日期,并按订购日期升序排列,SQL 代下所示:USE eshopSELECT p_no, o_dateFROM ordersWHERE m_account = 'liuzc'ORDER BY o_date4. 查询购买商品号为’0910810004’总人数,SQL 代码如下所示:USE eshopSELECT COUNT(*)FROM ordersWHERE p_no = '0910810004'5. 查询2005 年6 月6 日前,所有商品的订购总量,要求输出商品号和订购总量,SQL 代码如下所示:USE eshopSELECT p_no, SUM(o_quantity)FROM ordersWHERE o_date < '2005-6-6'GROUP BY p_no6. 查询所有会员的平均月薪,最高月薪和最低月薪之和,SQL 代码如下所示:USE eshopSELECTA VG(m_salary)+MAX(m_salary)+MIN(m_sa lary)FROM members7. 查询所有会员购买商品的种类和,要求输出会员号和商品种类和,SQL 代码如下所示:USE eshopSELECT m_account, COUNT(DISTINCT p_no) distinct不同的(显示不同的值)FROM ordersGROUP BY m_account8. 查询各类商品的最高购买数量,要求输出最高数量大于10 的商品号和最高数量,SQL 代码如下所示:USE eshopSELECT TOP 1 p_no, SUM(o_quantity)FROM ordersGROUP BY p_noHA VING SUM(o_quantity) > 10ORDER BY SUM(o_quantity) DESCTop 数字N 表名from ..选N条记录9联接查询(多个表之间)Use eshopSelect * from 表1,表2,...where 条件或者USE eshopSelect*from表1 jion表2 on关联条件join 表3 on......数据库模式定义语言DDL (Data Definition Language)用于定义和管理对象,例如数据库、数据表以及视图。
通用SQL数据库查询语句范例
通⽤SQL数据库查询语句范例通⽤SQL数据库查询语句范例(多表查询)作者:谢作如⼀、简单查询简单的Transact-SQL查询只包括选择列表、FROM⼦句和Where⼦句。
它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下⾯的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
Select nickname,email FROM testtable Where name='张三'(⼀) 选择列表选择列表(select_list)指出所查询列,它可以是⼀组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列例如,下⾯语句显⽰testtable表中所有列的数据: Select * FROM testtable2、选择部分列并指定它们的显⽰次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如: Select nickname,email FROM testtable3、更改列标题在选择列表中,可重新指定列标题。
定义格式为: 列标题=列名 列名列标题如果指定的列标题不是标准的标识符格式时,应使⽤引号定界符,例如,下列语句使⽤汉字显⽰列标题: Select 昵称=nickname,电⼦邮件=email FROM testtable4、删除重复⾏Select语句中使⽤ALL或DISTINCT选项来显⽰表中符合条件的所有⾏或删除其中重复的数据⾏,默认为ALL。
使⽤DISTINCT选项时,对于所有重复的数据⾏在Select返回的结果集合中只保留⼀⾏。
5、限制返回的⾏数使⽤TOP n [PERCENT]选项限制返回的数据⾏数,TOP n说明返回n⾏,⽽TOP n PERCENT时,说明n是表⽰⼀百分数,指定返回的⾏数等于总⾏数的百分之⼏。
例如:Select TOP 2 *FROM testtable Select TOP 20 PERCENT * FROM testtable(⼆) FROM⼦句FROM⼦句指定Select语句查询及与查询相关的表或视图。
数据库T-SQL语言操作(T-SQL语句、数据库、表、视图、索引)
数据库T-SQL语⾔操作(T-SQL语句、数据库、表、视图、索引)T-SQL语⾔按⽤途分四部分1. 数据定义语⾔(CREATE,DROP,ALTER)2. 数据操作语⾔(INSERT,DELETE,UPDATE)3. 数据查询语⾔(SELECT)4. 数据控制语⾔(GRANT,REVOKE,DENY)数据类型1. 系统数据类型2. ⽤户⾃定义数据类型(建⽴⽅式:a.图形化⽅式 b.命令⽅式)1use TEST2EXEC sp_addtype sno,'varchar(10)','nonull'3EXEC sp_droptype sno变量命名规则:字母、下划线、@或#开头,但不能全为下划线、@或#不能为“关键字”,不能嵌⼊空格及其他特殊字符,如需使⽤则需要双引号或⽅括号括起1.局部变量:由⽤户声明,必须以@开头,只在定义该变量的过程中有效,局部变量必须先声明后使⽤注意:第⼀次声明变量时,其值设置为NULL。
局部变量不能使⽤“变量=变量值”的格式进⾏初始化,必须使⽤SELECT或SET语句来设置其初始值。
如果声明字符型的局部变量,⼀定要在变量类型中指明其最⼤长度,否则系统默认其长度为1。
若要声明多个局部变量,请在定义的第⼀个局部变量后使⽤⼀个逗号,然后指定下⼀个局部变量名称和数据类型。
1USE student2DECLARE@var1char(10),@var2int3SET@var1='number'4select@var2=cgrade5from sc6where sno='201810010'78print@var1+"s"2.全局变量:由系统定义,供SQL server系统内部使⽤的变量,任何程序任何时间都可以调⽤。
通常以“@@”开头。
T-SQL语句1.注释语句(1) --(2) /*……*/2.批处理--GO3.控制流程语句(1) begin...end语句(相当于C语⾔中的{} )(2) if...else语句(可嵌套)(3)case语句(多条件选择语句)(4)print语句(屏幕输出语句)(5)while语句(有条件的循环语句)(6)goto语句(⽆条件跳转语句)(7)break语句(8)continue语句4.常⽤函数(系统函数、⽤户⾃定义函数)⼀些系统函数:(1)字符串函数(2)数学函数(3)⽇期和时间函数(4)聚合函数注意:⽤户⾃定义函数:1.分类:标量值函数:返回单个值内联表值函数:返回可更新的表多语句表值函数:返回不可更新的表2.标量值函数命令⽅式创建1CREATE FUNCTION f2(@a real,@b real) 2RETURNS real3AS4BEGIN5IF@a>=@b6RETURN@a7RETURN@b8END910PRINT'最⼤值为'11PRINT dbo.f2(77,56)1CREATE FUNCTION f3(@n real)2RETURNS real3AS4BEGIN5DECLARE@i real,@sum real6SET@i=07SET@sum=08WHILE@i<@n9BEGIN10SET@i=@i+111SET@sum=@sum+@i12END13RETURN@sum14END1516PRINT dbo.f3(10)3.⾃定义函数的调⽤(1)标量值函数可以使⽤select、print、exec调⽤(2)表值函数只能⽤select调⽤4.删除⽅式drop function 函数名数据库数据库概述1.数据库常⽤对象:表、数据类型、视图、索引、存储过程、触发器系统数据库:master、model、tempdb、msdb2.数据库存储结构(数据库⽂件、数据库⽂件组):数据库⽂件:存放数据库数据和数据库对象的⽂件。
第3章 关系数据库标准语言SQL_第4版(1-3)
学分 Ccredit 4 2 4 3 4 2 4
SC表
学号 Sno
200215121 200215121 200215121 200215122 200215122
课程号 Cno
1 2 3 2 3
成绩 Grade
92 85 88 90 80
§3.3 数据定义
SQL的数据定义功能: 模式定义、表定义、视图 和索引的定义
被参照建立一个“学生选课”表SC CREATE TABLE SC Cno CHAR(4), Grade SMALLINT, 列级完整性约束条件, Sno是外码,被参照表是 Student
(Sno CHAR(9) REFERENCES Student(Sno) , 主码由两个属性构 成,必须作为表级 完整性进行定义
用户数据库投入运行后,可根据需要随时逐步修 改模式,不影响数据的运行。 数据操作符统一
2.高度非过程化
非关系数据模型的数据操纵语言“面向过程”,
必须制定存取路径
SQL只要提出“做什么”,无须了解存取路径。 存取路径的选择以及SQL的操作过程由系统自动 完成。
3.面向集合的操作方式
SQL
数据流(Data) 元数据流(Meta Data) 对应于视图和部 分基本表
视图1
视图2
外模式
对应于基本表
基本表1 基本表2 基本表3 基本表4
数据词典
(元数据)
模式
对应于存储 文件
存储文件1 存储文件2 内模式
SQL的基本概念(续)
基本表(BASE TABLE):
是独立存在的表, 一个关系对应一个基本表,
嵌入式语言:嵌入高级语言如C,COBOL, FORTRAN,PB等
数据库技术与应用—SQL_Server_2008(第2版)第9章_视图
【例9.1】建立计算机系学生的视图。 CREATE VIEW vw_Stu_jsj1 AS SELECT studentID, studentName, sex, speciality FROM Student WHERE speciality = '计算机' 本查询省略了视图列名,隐含为与 SELECT 语句中的列相同 的名称。
参数说明
column:视图中的列使用的名称。
组成视图的列名要么全部省略要么全部指定,没有第三 种选择。如果省略了视图的各个列名,则视图列将获得 与SELECT语句中的列相同的名称。 但是对于下列情况,必须在视图定义中指定每列的名称: 视图中有任何从算术表达式、内置函数或常量派生出 的列。 视图中两列或多列具有相同名称(通常由于视图定义 包含联接,而来自两个或多个不同表的列具有相同的 名称)。 希望使视图中的列名与它的源列名不同。这时也可以 在视图中重命名列。无论重命名与否,视图列都会继 承其源列的数据类型。
9.4 通过视图查询数据
视图定义好后,用户就可以像对基本表一样对视图进行查 询了。 【例9.7】在计算机系学生的视图中找出所有女生信息。
SELECT studentID, studentName, sex FROM vw_Stu_jsj1 WHERE sex= '女‘
系统执行对视图的查询时,首先进行有效性检查,以确认 查询中涉及到的表、视图等是否存在。如果存在,则从数 据字典中取出视图的定义,把定义好的子查询和用户的查 询结合起来,转换成等价的对基本表的查询。 例如,本例的查询就相当于执行了下面的SQL语句:
视图的分类
数据库第3章
使用DROP子句删除指定的完整性约束条件 【例3-7】 删除student表学生姓名必须取惟一值的约束 条件。 ALTER TABLE student DROP UNIQUE(name); 使用MODIFY子句修改基本表的列定义 【例3-8】 将student 表name列的数据类型改为定长字符 串型。 ALTER TABLE student MODIFY name char(8) NOT NULL; 注意: (1)修改列定义时,要将原来的列级约束条件写上,否则 原有的列级约束会不起作用。 (2)修改列定义时,有可能会破坏已有的数据,应事先作 好备份工作。 (3)SQL未提供删除属性列的语句,只能采取间接的方法
3.2 数据定义
表3-1 SQL的数据定义语句 操作对象 数据库 操作方式 创建语句 CREATE DATABASE CREATE TABLE 删除语句 DROP DATABASE 修改语句 ALTER DATABASE
基本表 索引
视图
DROP
TABLE INDEX
VIEW
ALTER TABLE
CREATE INDEX DROP
3.2.4 建立索引 索引的概念 索引是建立在列上的一种数据库对象,它 对表中的数据提供逻辑顺序,当在数据库表中 搜索某一行时,可以通过使用索引来找到它的 物理位置。索引建立后,什么时候使用索引以 及使用哪一个索引(当有多个索引存在时), 由DBMS内部根据情况自行决定,不需要人员干 预。索引是动态的,每当数据库表的数据更新 一次,相应的索引也随之更新。
CREATE VIEW DROP
3.2.1 数据库的创建与删除 创建数据库 SQL使用命令CREATE DATABASE创建数据库,其一般语法 如下: CREATE DATABASE <数据库名>; 【例3-1】创建一个简单数据库。 CREATE DATABASE MyDb; 删除数据库 SQL使用命令DROP DATABASE删除一个或多个数据库,其 一般语法如下: DROP DATABASE <数据库名1> [,<数据库名2>][,…]; 【例3-2】删除数据库MyDb。 DROP DATABASE MyDb;
数据库—SQL语言
数据库—SQL语⾔1 SQL 基本概念1.1 SQL 概念及分类定义:SQL是Structured Query Language的缩写,意思是结构化查询语⾔,是⼀种在数据库管理系统中查询或对数据库⾥⾯的数据进⾏更改的语⾔主流数据库管理系统关系型数据库MySQLOraclePostgre SQLSQL Server⾮关系型数据库redismongo DB数据定义语⾔DDL(Data Ddefinition Language)SQL 数据定义语⾔主要⽤来定义逻辑结构,包括定义基表,视图和索引删除表定义表修改表数据查询语⾔DQL(Data Query Language)SQL 的数据查询语⾔主要⽤来对数据库中的各种数据对象进⾏查询数据操纵语⾔DML(Data Manipulation Language)SQL 的数据操纵语⾔,⽤于改变数据库中的数据,包括插⼊,删除,修改数据控制功能DCL(Data Control Language)SQL 的数据控制语⾔,对表和视图的授权,完整性规则的描述以及事务开始和结束等控制语句1.2 SQL 语⾔的特点综合统⼀:独⽴完成数据库⽣命周期中的全部活动,包括定义关系模式、录⼊数据、建⽴数据库、査询、更新、维护、数据库重构、数据库安全⾼度⾮过程化:⽤户只需提出“做什么”,⽽不必指明“怎么做⾯向集合的操作⽅式:SQL 采⽤集合操作⽅式以同⼀种语法结构提供两种使⽤⽅式:SQL既是⾃含式语⾔,⼜是嵌⼊式语⾔,SQL语句能够嵌⼊到⾼级语⾔程序中语⾔简洁,易学易⽤:SQL 语⾔语法简单,接近英语⼝语1.3 SQL 基本语法1 SQL 数据类型数据类型含义CHAR(n)CHARACTER(n)长度为 n 的定长字符串VARCHAR(n)CHARACTERVARYING(n)最⼤长度为 n 的变长字符串CLOB字符串⼤对象BLOB⼆进制⼤对象INTINTEGER长整数(4 字节)SMALLINT短整数(2 字节)BIGINT⼤整数(8 字节)数据类型含义NUMERIC(p, d)定点数,由 p 位数字(不包括符号、⼩数点)组成,⼩数点后边有 d 位数字DECIMAL(p, d)DEC(p, d)同 NUMERIC REAL取决于机器精度的单精度浮点数DOUBLE PRECISION取决于机器精度的双精度浮点数FLOAT(n)可选精度的浮点数,精度⾄少为 n 位数字FLOAT(n)可选精度的浮点数,精度⾄少为 n 位数字数据类型含义BOOLEAN逻辑布尔值DATE⽇期,包含年、⽉、⽇,格式为 YYYY-MM-DDTIME时间,包含⼀⽇的时、分、秒,格式为 HH:MM:SS TIMESTAMP时间戳类型TIMERVAL时间间隔类型2 模式的定义及删除模式定义语法:CREATE SCHEMA <模式名> AUTHORIZATION <⽤户名>例⼦:CREATE SCHEMA "S-T" AUTHORIZATION WANG;模式定义 + 视图语法:CREATE SCHEMA <模式名> AUTHORZATION <⽤户名> [<表定义⼦句>|<视图定义⼦句>|<授权定义⼦句>];模式删除语法:DROP SCHEMA <模式名><CASCADE|RESTRICT>;CASCADE、RESTRICT两者必须⼆选⼀VASCADE(级联):删除模式的同时也把给模式的所有数据库对象删除RESTRICT(限制):如果该模式下有下属对象(⽐如表视图),则拒绝该删除语句的执⾏3 表的增删改查创建表CREATE TABLE 表名 (字段名类型字段约束, 字段名类型字段约束, 字段名类型字段约束);CREATE TABLE Student (name VARCHAR(20),age INT,sex CHAR(1),);删除表DROP TABLE <表名> [RESTRICT|CASCADE];DROP TABLE Student RESTRICT;修改ALTER TABLE <表名>[ADD [COLUMN] <新列名><数据类型> [完整性约束]][ADD <表级完整性约束>]ALTER TABLE Student ADD S_entrance DATE;ALTER TABLE Student ALTER COLUMN S_age INT;4 索引的增删改查当数据库中数据量巨⼤时,建⽴索引可以减少查询时间,索引可以建⽴在⼀列或多列上建⽴索引CLUSTER:聚簇索引,物理顺序与索引的逻辑顺序相同UNIQUE:唯⼀索引CREATE [UNIQUE] [CLUSTER] INDEX <索引名>ON <表名>(<列名>[<次序>][,<列名> [<次序>]] ...);CREATE UNIQUE INDEX Stusno ON Student(Sno);修改索引ALTER INDEX <旧索引名> RENAME TO <新索引名>;ALTER INDEX SCno RENAME TO SCSno;删除索引DROP INDEX <索引名>DROP INDEX Stusno;2 SQL 的查询假设关系表Student、Course、SC如下:Student学号(Sno)姓名(Sname)性别(Ssex)年龄(Sage)院系(Sdept) 201215121李勇男20CS 201215122刘晨⼥19CS 201215123王敏⼥18MA 201215125张⼒男19ESCourse课程号(Cno)课程名(Cname)先⾏课(Cpno)学分(Ccredit) 1数据库542数学/23信息系统144操作系统635数据结构746数据处理/27Java语⾔64SC学号(Sno)课程号(Cno)成绩(Grade)2012151211922012151212852012151213882012151222902015151223802.1 查询所有列查询Student表中所有列SELECT * FROM Student;2.2 查询部分列查询Student表中的Sno、Ssex列SELECT Sno, Ssex FROM Student;2.3 列取别名查询Student表中的Sno、Ssex列,并将Sno命名为 “学号”,Ssex命名为 “性别”SELECT Sno 学号, Ssex 性别 FREOM Student;SELECT Sno AS 学号, Ssex AS 性别 FROM Student;2.4 表取别名查询Course表中的Cno列,并将查询结果命名为CCSELECT Cno FROM Course AS CC;2.5 查询结果去重查询SC中的Sno列,并将结果去重SELECT DISTINCT Sno AS 课程名 FROM SC;2.6 查询结果加条件查询条件如下:查询条件谓词⽐较=、>、<、<=、>=!=、<>、!>、!<、NOT确定范围BETWEEN ANDNOT BETWEEN AND确定集合IN、NOT IN字符匹配LIKE、NOT LIKE空值IS NULL、IS NOT NULL逻辑运算AND、OR、NOT 查询 SC 表中 Grade ⼤于 88 的信息SELECT * FROM SC WHERE Grade >= 88;查询 SC 表中 Grade 在 85 ~ 95 之间的信息SELECT * FROM SC WHERE Geade BETWEEN 85 AND 95;查询 1 是否包含在 (1,2) 之间SELECT 1 FROM (1, 2);查询 Course 表中包含 “系统” 的课程的课程号,课程名"%" 可以近似多个字符,"_" 只能近似⼀个字符SELECT Cno, Cname FROM Course WHERE Cname LIKE '%系统';查询 Course 中先⾏课为空的信息SELECT * FROM Course WHERE Cpno IS NULL;查询 Course 中学分为 4 分并且先⾏课为 1 的课程的课程名SELECT Cname FROM Course WHERE Ccredit = 3 AND Cpno = 1;查询 Course 中学分为 4 分或 3 分的课程的课程名SELECT Cname FROM Course WHERE Ccredit = 3 OR Ccredit = 4;2.7 聚集函数函数含义COUNT(*)统计元组个数COUNT([DISTINCT|ALL]<列名>)统计⼀列中值的个数SUM([DISTINCT|ALL]<列名>)计算⼀列值的总和AVG([DISTINCT|ALL]<列名>)计算⼀列值的平均值MAX([DISTINCT|ALL]<列名>)计算⼀列值中的最⼤值MIN([DISTINCT|ALL]<列名>)计算⼀列值中的最⼩值注:DISTINCT是去除重复的值查询 CS 表中 Grade 的个数(去重)、总和、平均值、最值SELECT COUNT(*) FROM SC;SELECT COUNT(DISTINCT Grade) FROM SC;SELECT SUM(Grade) FROM SC;SELECT AVG(Grade) FROM SC;SELECT MAX(Grade) FROM SC;SELECT MIN(Grade) FROM SC;2.8 分组查询将表 SC 按照 Sno 进⾏分组,然后筛选出分组中 Sno 为 "201215121" 的⼀组SELECT Sno FROM SC GROUP BY Sno HAVING Sno = '201215121';将 Student 与 SC 以 Sno 进⾏等值连接SELECT Student AS S, SC WHERE S.Sno = SC.Sno;2.10 ⾃⾝连接将 Student 表与⾃⽣进⾏连接SELECT Student AD S1, Student AS S2 WHERE S1.Sno = S2.Sno;2.11 外连接将 Course 与 SC 以 Cno 分别进⾏外连接、左外连接、右外连接SELECT * FROM Course OUTER JOIN SC ON o = o;SELECT * FROM Course LEFT OUTER JOIN SC ON o = o;SELECT * FROM Course RIGHT OUTER JOIN SC ON o = o;2.12 多表查询将 Student 与 SC 以 Sno 进⾏连接,并且将 Course 与 SC 以 Cno 进⾏等值连接SELECT *FROM Student JOIN SC ON Student.Sno = SC.SnoJOIN Course ON o = o;SELECT *FROM Student, Course, SCWHERE Student.Sno = SC.Sno AND o = o;2.13 嵌套查询查询 Grade > 90 的学⽣的学号(Sno)、姓名(Sname)、所在院系(Sdept)SELECT Sno, Sname, SdeptFROM StudentWHERE Sno IN (SELECT SnoFROM SCWHERE Grade > 90;);2.14 带有 ANY 的查询查询 Sage > 19 的所有学⽣的姓名(Sname)(结果满⾜⼦集中的任⼀值即可)SELECT SnameFROM StudentWHERE Sage > ANY (SELECT SageFROM StudentWHERE Sage > 19;);2.15 带有 ALL 的查询查询 Sage > 19 的所有学⽣的学号(Sno)(结果要满⾜⼦集中的所有值)SELECT SnoFROM StudentWHERE Sage > ALL (SELECT SageFROM StudentWHERE Sage > 19;);2.16 带 EXISTS 的查询查询没有⼀门课不选修的学⽣的姓名(Sname)SELECT SnameFROM StudentWHERE NOT EXISTS(SELECT *WHERE NOT EXISTS (SELECT *FROM SCWHERE Sno = Student.Sno AND Cno = o););)2.17 集合查询1 并集查询所在系(Sdept)为 "CS" 的学⽣与年龄(Sage)⼤于 19 的学⽣的并集SELECT * FROM Student WHERE Sdept = "CS"UNIONSELECT * FROM Student WHERE Sage > 19;2 交集查询所在系(Sdept)为 "CS" 的学⽣与年龄(Sage)⼤于 19 的学⽣的交集SELECT * FROM Student WHERE Sdept = "CS"INTERSECTSELECT * FROM Student WHERE Sage > 19;3 差集查询所在系(Sdept)为 "CS" 的学⽣与年龄(Sage)⼤于 19 的学⽣的差集SELECT * FROM Student WHERE Sdept = "CS"EXCEPTSELECT * FROM Student WHERE Sage > 19;3 SQL 的增删改3.1 数据的插⼊1 标准添加INSERT INTO Student(Sno, Sname, Ssex, Sage, Sdept)VALUES ('201215128', '⽯昊', '男', 25, 'IS');2 指定部分字段INSERT INTO Student (Sname, Sage, Sdept) VALUE ('叶凡', 22, 'CS');3 不指定字段-- 不指定字段时,需要⼀⼀对应添加且不能缺少项⽬INSERT INTO VALUE Student ('201215128', '⽯昊', '男', 25, 'IS');4 批量添加INSERT INTO Student VALUES('201215128', '⽯昊', '男', 25, 'IS'),('201215129', '叶凡', '男', 22, 'CS'),('201215130', '狠⼈', '⼥', 20, 'MX');3.2 修改将 Student 表中学号(Sno)为 "201215122" 的学⽣姓名(Sname)改为 “⽯昊”,年龄(Sage)改为 25 UPDATE Student SET Sname = "⽯昊", Sage = 25 WHERE Sno = "201215122";3.3 删除删除 Student 表中年龄(Sage)⼤于 18 的数据DELETE FROM Student WHERE Sage > 18;4 视图4.1 视图定义视图(VIEW)也被称作虚表,即虚拟的表,是⼀组数据的逻辑表⽰,其本质是对应于⼀条 SQL 语句,结果集被赋予⼀个名字视图本⾝并不包含任何数据,它只包含映射到基表的⼀个查询语句,当基表数据发⽣变化,视图数据也随之变化⽬的:⽅便,简化数据操作当我们业务需求要查出多张表的数据,这时我们可能会关联多张表查询处理,如果这个查询 SQL 复杂的话也影响了查询效率,这个时候就可以创建视图,查询时候只需要select * from view就可以4.2 创建视图-- 末尾的 WITH CHECK OPTION 作⽤如下:-- 当后续操作对视图进⾏增删改操作时,可能视图已经不满⾜⼦条件 S 的约束-- 加上该语句之后,后续对视图进⾏增删改的时,系统会⾃动在该⼦条件 S 下进⾏操作CREATE VIEW S_STUAS <⼦查询>[WITH CHECK OPTION];将 Student 表中学⽣年龄(Sage)> 18 的学⽣创建⼀个名为 S_NEW 的视图,该视图包含学⽣的学号(Sno)、姓名(Sname)、性别(Ssex)、所在院系(Sdept)CREATE VIEW S_NEWASSELECT Sno, Sname, Ssex, SdeptFROM StudentWHERE Sage > 18WITH CHECK OPTION;4.3 删除视图-- CASCADE 的作⽤如下:-- 当加上该语句时,会删除该视图以及其下的所有视图-- 当不加该语句时,若该视图下该有其他视图,会删除失败DROP VIEW <视图名> [CASCADE];删除 4.2 创建的视图 S_NEWDROP VIEW S_NEW CASCADE;4.4 查询视图查询 4.2 视图 S_NEW 中性别(Ssex)为 “⼥” 的学⽣的学号(Sno)SELECT SnoFROM S_NEWWHERE Ssex = "⼥";4.5 视图更新视图是虚拟的,不存在的,所以对于视图的操作,最终会反映到基本表上将 4.2 的视图 S_NEW 中所在系(Sdept)为 “CS” 学⽣的性别(Ssex)全改为 “男”-- 更新视图UPDATE S_NEWSET Ssex = "男"WHERE Sdept = "CS";-- 更新基本表-- 因为 4.2 的视图创建条件是 Sage > 18,因此更新基本表时要加上该条件UPDATE StudentSET Ssex = "男"WHERE Sdept = "CS" AND Sage > 18;。
sql实验四视图 sql实验四视图操作
SQL实验四视图操作1. 简介视图(View)是一个虚拟表,它由一个或多个表的行以及这些表的列组成。
视图与物理表类似,可以查询、更新、插入和删除数据,但是它不存储数据,仅仅是一个查询的结果集。
在SQL中,我们可以使用CREATE VIEW语句来创建视图,使用DROP VIEW语句来删除视图,使用SELECT语句来查询视图。
本文将介绍SQL实验四中视图的操作,包括创建视图和使用视图进行数据的查询、更新、插入和删除。
2. 创建视图在SQL中,我们可以使用CREATE VIEW语句来创建视图。
CREATE VIEW语句的语法如下:CREATE VIEW view_name ASSELECT column1, column2, ...FROM table_nameWHERE condition;其中,view_name是要创建的视图的名称,column1, column2, …是视图中包含的列,table_name是要查询的数据表的名称,condition 是查询条件。
下面是一个创建视图的示例:CREATE VIEW sales_view ASSELECT customer_id, order_date, total_amountFROM ordersWHERE order_date >= '2021-01-01';在上面的示例中,我们创建了一个名为sales_view的视图,包含了订单表orders中的customer_id, order_date和total_amount列,查询条件为订单日期大于等于2021年1月1日。
3. 使用视图查询数据使用视图查询数据与使用物理表查询数据的方式是相同的,只需将视图名作为查询的源表即可。
下面是一个使用视图查询数据的示例:SELECT *FROM sales_view;在上面的示例中,我们使用SELECT语句查询了sales_view视图中的所有数据。
SQL Server 数据库的查询和视图
4.1.1 选择查询结果输出列
(1)SUM和AVG。 SUM和AVG分别用于求表达式中所有值项的总和与平均值,格式为: SUM /AVG ( [ ALL | DISTINCT ] 表达式 ) 其中,“表达式”可以是常量、列、函数或表达式,其数据类型只能是int、 smallint、tinyint、bigint、decimal、numeric、float、real、money和smallmoney。 【例4.8】 求所有课程的总学分和选修101课程的学生的平均成绩。 T-SQL命令如下,执行结果如图4.6所示。 SELECT SUM(学分) AS '总学分' FROM kcb SELECT AVG(成绩) AS '计算机基础平均成绩' FROM cjb WHERE 课程号 = '101'
4.1.2 选择查询条件:WHERE子句
2.模式匹配 LIKE谓词用于指出字符串是否与指定的字符串相匹配,返回逻辑值TRUE或 FALSE。格式为: 表达式 [ NOT ] LIKE 模式串 [ ESCAPE 转义符 ] 说明:
(1)表达式:一般为字符串表达式,在查询语句中可以是列名。 (2)模式串:可以使用通配符,表4.2列出了LIKE谓词可以使用的通配符及其说明。 (3)转义符:应为有效的SQL Server字符,没有默认值,且必须为单个字符。当模式串 中含有与通配符相同的字符时,应通过该字符前的转义符指明其为模式串中的一个匹配字符。 使用ESCAPE可指定转义符。 (4)NOT LIKE:使用NOT LIKE与LIKE的作用相反。
4.1.1 选择查询结果输出列
4.替换查询结果中的数据 在对表进行查询时,有时希望对所查询的某些列得到的数据进行变换。 要替换查询结果中的数据,则可使用CASE表达式,格式为: CASE WHEN 条件1 THEN 表达式1 WHEN 条件2 THEN 表达式2 …… ELSE 表达式 END
视图与数据查询 SQL基本语句范文
实验四视图与数据查询一、实验目的:熟悉SQL SERVER2000系统开发环境及图形化操作,进一步了解各部分的操作掌握虚拟数据表的原理即实现方法掌握数据查询技术的构成要素及实现方法进一步熟悉企业管理器的操作方法,对比掌握数据表与视图二、实验原理:(一)查询的创建所谓查询就是根据我们的要求,在一张或多张数据表中找出满足一定条件的我们所关注的数据,排除不需要或不关心的信息。
查询的实现方法:在企业管理器中右击你想查看的表,选择“打开表”菜单项下面的“查询”命令,打开“查询设计器”窗口。
1、查询设计器(1)关系图窗格。
此区域以图形方式显示表或视图等对象以及它们之间的连接关系。
(2)网格窗格。
用户可以在此区域中指定查询选项,例如要显示哪些数据列、如何对结果进行排序以及选择哪些行等。
(3)SQL窗格。
显示查询或视图对应的SELECT语句。
(4)结果窗格。
显示满足查询条件的数据。
在查询设计器中,该区域显示最近执行的选择查询的结果。
可以通过编辑该网格单元中的值对数据进行修改,而且可以添加或删除数据。
2、设置查询条件(1)设置显示列。
显示列就是在输出结果中满足条件的记录所显示的列信息。
在网格窗格中,显示列的“输出”栏被标识为√。
如果你查询的数据来至于多张数据表,在“关系图窗格”中单击鼠标右键,选择添加表,将要查询的数据表添加进去。
(2)设置查询条件。
在网格窗格中,单击空白行的“列”栏,从菜单中选择查询条件中的列。
例如要查询所属部门编号等于2的记录,则选择Dep_id,然后在“准则”中输入=2。
注意,将Dep_id所在行中的输出标记去掉,因为结果集中不需要显示所属部门编号。
条件可以设置多个,相与的条件放在同一列,相或的条件放在不同列,假如查询部门编号为2的姓陈的人,则在设置好上述条件后,在姓名后面的“准则”栏写上like ‘陈%’。
(3)设置排列顺序。
设置结果集中的数据按照指定列的升序或降序排列,注意排序可以设置多种规则,比如第一排序按部门,则按部门的拼音顺序排列,如果一个部门的人很多,可以设置第二排序规则,比如按职工号排序。
使用SQL语句创建视图3
举例:创建一个视图,使之包含复杂的查询。
程序清单如下: CREATE VIEW v_ExampleView WITH SCHEMABINDING
AS
SELECT sno, SUM(score) AS Sumscore, COUNT(*) AS CountCol FROM sc GROUP BY sno;
• 注意:
应制定统一的命名约定以将视图与表进行区分。例如:可将字母V 或VIEW作为前缀添加到你所创建的每个视图的名称中。
举例:选择表s和sc中的部分字段和记录来创建一个视图,并且限制表s 中的记录只能是计算机系的记录集合,视图定义为view_s。
程序清单如下: CREATE VIEW view_s AS SELECT ,s.age,s.sex,o,sc.score FROM s,sc WHERE s.sno=sc.sno AND s.dept=‘计算机’;
视图简介
视图是个虚表,是从一个或者多个表或视图中导出的表,其结构和 数据是建立在对表的查询基础上的。
Employee (table)
EmployeeID 287 288 289 LastName
Mensa-Annan Abbas Valdez
FirstName
Tete Syed Rachel
Title
使用系统存储过程 查看视图:
可以使用系统存储过程sp_help显示视图特征,使用sp_helptext显 示视图在系统表中的定义,使用sp_depends显示该视图所依赖的对象。 (使用SQL Server 查询分析器可以方便地显示视图属性信息,如左边图 所示。右边图显示了使用sp_helptext存储过程显示视图的创建语句。)
利用Transact-SQL语句中的CREATE VIEW命令创建视图 :
MySQL数据库之——高级SQL语句(二)VIEW视图、联集和常见计算
MySQL数据库之——⾼级SQL语句(⼆)VIEW视图、联集和常见计算⼀、VIEW(视图)可以被当做是虚拟表或存储查询视图跟表格的不同是,表格中有实际储存资料,⽽视图是建⽴在表格之上的⼀个架构,它本⾝并不实际储存资料。
临时表在⽤户退出或同数据库的连接断开后就⾃动消失了,⽽视图不会消失。
视图不含有数据,只存储它的定义,它的⽤途⼀般可以简化复杂的查询。
⽐如你要对⼏个表进⾏连接查询,⽽且还要进⾏统计排序等操作,写SQL语句会很⿇烦的,⽤视图将⼏个表联结起来,然后对这个视图进⾏查询操作,就和对⼀个表查询⼀样,很⽅便。
视图本⾝2、创建、查看和删除视图CREATE VIEW "视图表名" AS "SELECT 语句"; #创建视图表SELECT * FROM `V_NAME_VALUE`; #查看视图表DROP VIEW V_NAME_VALUE; #删除视图表select ,A.age from test6 A where name in (select from test1 B where age >19 and age < 23);create view v_test1_6 as select ,A.age from test6 A where name in (select from test1 B where age >19 and age < 23);select * from v_test1_6;drop view v_test1_6;⼆、联集将两个SQL语句的结果合并起来,两个SQL语句所产⽣的栏位需要是同样的资料种类1、UNION⽣成结果的资料值将没有重复,且按照字段的顺序进⾏排序[SELECT 语句1] UNION [SELECT 语句2];2、UNION ALL将⽣成结果的资料值都列出来,⽆论有⽆重复[SELECT 语句1] UNION ALL [SELECT 语句2];三、交集值取两个SQL语句结果的交集1、取交集值的⽅法1(2种简单⽅法,内连接+on/using 去重则加上distinct)select from test1 A inner join test6 B on =;select from test1 A inner join test6 B using(name);select distinct from test1 A inner join test6 B on =;2、取交集⽅法2(1种,union all 结合 group by)两表其中的⼀个表没有指定的⾏,⽽另⼀个表这个⾏有重复不可⽤,要求两个表确实有交集的时候⽤select from (select name from test1 union all select name from test7) A group by having count(*) > 1;select from (select name from test1 union all select name from test7) A group by having count(name) > 1; #不去重显⽰<br>select name from test1 union all select name from test7; #拆分上⾯的SQL语句select ,count(name) from (select name from test1 union all select name from test7) A group by having count(name) > 1; #显⽰count值,便于理解select ,count(name) from (select distinct name from test1 union all select distinct name from test7) A group by having count(name) >1; #去重显⽰,在联集两个表之前先把表去重,以防⼀个表中本⾝就有重复值3、取交集(去重)——4种⽅法取两个SQL语句结果的交集,且没有重复⽅法⼀:select from (select from test1 B inner join test6 C on =) A group by ; select from test1 B inner join test6 C on =;select * from test1 B inner join test6 C on =;<br>⽅法⼆:select distinct from test1 A inner join test6 B using(name);<br>⽅法三:select distinct name from test1 where name in (select name from test6);<br>⽅法四:select distinct from test1 A left join test6 B using(name) where is NOT NULL;select distinct from test1 A left join test6 B using(name);select distinct ,,B.age from test1 A left join test6 B using(name);3.1 内连接取交集结合group by 去重3.2 内连接取交集结合distinct去重3.3 where+in 遍历取交集并结合distinct去重3.4 使⽤左连接(也可⽤右连接)+where 判断NOT NULL 取交集并结合distinct去重四、⽆交集值显⽰第⼀个SQL语句的结果,且与第⼆个SQL语句没有交集的结果,且没有重复⽅法⼀:select from (select distinct name from test1 union all select distinct name from test6) A group by having count(name)=1;<br>⽅法⼆:select distinct name from test1 where name not in (select name from test6);select distinct name from test6 where name not in (select distinct name from test1);<br>⽅法三:select distinct from test1 A left join test6 B using(name) where is NULL;select distinct from test1 A right join test6 B using(name) where is NULL;五、CASE的⽤法是SQL⽤来作为IF-THEN-ELSE之类逻辑的关键字1、语法格式SELECT CASE (字段名)WHEN "条件1" THEN "结果1"WHEN "条件2" THEN "结果2"……ELSE "结果N"ENDFROM "表名"条件可以是⼀个数值或是公式。
什么是SQL数据库
(1)建立数据库:数据库是一个包括了多个基本表的数据集,其语句格式为: <br>
CREATE DATABASE <数据库名> 〔其它参数〕 <br>
其中,<数据库名>在系统中必须是唯一的,不能重复,不然将导致数据存取失误。〔其它参数〕因具体数据库实现系统不同而异。 <br>
1、基本概念:
数据库、数据模型、数据库管理系统、类和对象、事件、方法。
2、关系数据库
(l)关系数据库:关系模型、关系模式、关系、元组、属性、域、主关键字和外部关键字。
(2)关系运算:选择、投影、连接。
(3)数据的一致性和完整性:实体完整性、域完整性、参照完整性。
3、 Visual FoxPro系统特点与工作方式:
DROP DATABASE xmmanage <br>
2.基本表的定义及变更 <br>
本身独立存在的表称为基本表,在SQL语言中一个关系唯一对应一个基本表。基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。 <br>
……<br>
sql server
目前的入门教学课程
PB:使用起来也算简单,但感觉不够灵活,不太适合于很大项目的开发,目前也比
较少人用,在还是有一部分公司在用.
JAVA:似乎不用说它了,从目前市场的占有率就能明白.
C#:刚出不久的一种优秀语言,从C++发展而来,又与JAVA有点相似.有人说了这么一句话,C#背后有这么一个财团,想失败都很难,微软目前的主推语言.建议学这个.
实验七 视图的创建和管理
实验七视图的创建和管理一、实验目的与要求⏹熟练掌握使用企业管理器和SQL语句创建、查询、更新、修改和删除视图。
⏹进一步掌握视图与基本表的联系与区别。
二、实验内容和步骤1、创建视图(1)启动企业管理器,在产品销售数据库CPXS中创建价格小于2000的产品视图VIEW_CP_PRICE2000,要求对该视图的更新都要符合价格小于2000这个条件,写出创建过程和对应的SQL语句:CREATE VIEW VIEW_CP_PRICE2000ASSELECT *FROM CPWHERE 价格< 2000(2)打开查询分析器,用SQL语句创建各客户购买产品的情况VIEW_GMQK视图,包括客户编号、客户名称、产品编号、产品名称、价格,购买日期、购买数量。
CREATE VIEW VIEW_GMQKAS SELECT distinct cpxsb.客户编号, 客户名称,cpxsb.产品编号,产品名称,价格,销售日期,数量FROM CPXSB, cp, xssWHERE cp.产品编号= cpxsb.产品编号AND cpxsb.客户编号= xss.客户编号(3)创建分区视图:在CPXS数据库中创建CP1和CP2两个表,CP1表中为编号小于等于’100010’产品数据,CP2表中为编号大于‘100010’产品数据,以分区列为产品编号,创建可更新的分区视图VIEW_CP1和VIEW_CP2。
CREATE VIEW VIEW_CP1 AS SELECT *FROM CPWHERE 产品编号< '100010'CREATE VIEW VIEW_CP2AS SELECT*FROM CPWHERE产品编号>='100010'WITH CHECK OPTION(这样创建的视图才可进行数据的更新!!要加最后一条子句,否则不可更新)2、查询视图(1)基于VIEW_CP_PRICE2000视图,查询价格在2000以下产品的产品编号、名称和价格。
数据库系统概论:第4章 关系数据库标准语言——SQL语言1
4)删除完整性约束
例:删除“Height”属性列上的CHECK约束。 ALTER TABLE Student DROP
CONSTRAINT Chk1;
27
5)删除属性列
例:删除Student表中新增加的“Height”属性列。 ALTER TABLE Student DROP COLUMN Height;
2
2、SQL语言应用情况
(1) Oracle、Sybase、Informix、Ingres、 DB2、SQL Server、Rdb等大型数据库管理系统 实现了SQL语言; (2) Dbase、Foxpro、Acess等PC机数据库管理 系统部分实现了SQL语言; (3)可以在HTML(Hypertext Markup Language, 超文本标记语言)中嵌入SQL语句,通过WWW访 问数据库; (4)在VC、VB、Delphi、PB也可嵌入SQL语句。
/*外键约束*/ Credit NUMBER);
21
例3:建立一个学生选课表SC,所有约束条件均为表
级完整性约束。
CREATE TABLE SC
( Sno CHAR(8),
Cno CHAR(8),
Grade NUMBER,
PRIMARY KEY(Sno,Cno),
/*主键约束*/
FOREIGN KEY(Sno) REFERENCES Student(Sno)
25
3)增加完整性约束
例:给Student表中“Height”属性列增加一 个CHECK约束,要求学生的身高要超过140厘 米才行。 ALTER TABLE Student ADD CONSTRAINT Chk1 CHECK(Height>140);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1在已有数据库中建立表
1)建立会员表
USE eshop
CREATE TABLE members
(
m_account V ARCHAR(20) NOT NULL,
m_name VARCHAR(20),
m_sex CHAR(2),
m_birth DATATIME,
m_address VARCHAR(50),
m_salary MONEY,
m_password V ARCHAR(20)
)
GO
varchar也是表示字符数据比char保存可变长度的字符串
2)查询信息代码:
USE eshop
EXEC sp_help members
3)增加一列电子邮件m_mail 代码
USE eshop
ALTER TABLE members
ADD m_mail VARCHAR(30)
4)删除列表代码:
USE eshop
ALTER TABLE members
DROP COLUMN m_mail (column 列)
(USE eshop
DROP TABLE members
) 删除整个表
查看表中单个数据:
USE eshop
select *查找内容from mumbers表名where 限制条件and 条件2在表中增删改数据
1)在eshop 数据库的members 表中增加2 条记录,内容如下:
‘jinjin’, ‘津津有味’,‘女’,‘1982-04-14’,‘北京市’,8200.0, ‘jinjin’
‘liuzc518’,‘刘志成’,‘男’,‘1972-05-18’,‘湖南株洲’,3500.0,‘liuzc518’
Sql代码:
USE eshop
INSERT INTO members V ALUES('jinjin','津津有味','女','1982-04-14',' 北京市',8200.0, 'jinjin')
INSERT INTO members V ALUES('liuzc518','刘志成','男','1972-05-18',' 湖南株洲',3500.0,'liuzc518')
Insect into 表名values(’’,’’,......)
2)改数据代码:
[USE 数据库名
UPDATE 表名
SET .........WHERE .....ADN ...]
例子:
(1)将姓名为“津津有味”修改为“刘津”USE eshop
UPDATE members
SET m_name=' 刘津'
WHERE m_name='津津有味'
(2)将m_sex (性别)为‘男’且m_address (家庭地址)为‘湖南株洲’的会员的m_salary (月薪)
增加20%,SQL 代码如下所示:
USE eshop
UPDATE members
SET m_salary=m_salary*(1+0.20)
WHERE m_sex=' 男'
AND m_address=' 湖南株洲'
3)删除
表中所有记录:表中个别记录:USE eshop USE eshop
DELETE FROM DELETE FROM members members
WHEREm_address=' 北京市'
3高级的表查询
1)按某字段的升降排序找*
Desc降序asc升序
USE 数据库
Select * from 表where 条件order by字段desc (sac)
求和函数
USE 数据库
select (sum)count(*) from 表where 条件group by
Top 数字N 表名from ..选N条记录
1. 查询性别为“男”的会员详细信息,查询结果按月薪降序排列,SQL 代码如下所示:
USE eshop
SELECT *
FROM members
WHERE m_sex = ' 男'
ORDER BY m_salary DESC
2. 查询全体会员的会员帐号,姓名和年龄并按家庭地址升序排列,同一地址中的会员按
降序排列,SQL 代码如下所示:
USE eshop
SELECT m_account, m_name, YEAR(GETDATE())-YEAR(m_birth) 年龄FROM members
ORDER BY m_address, m_birth
或
USE eshop
SELECT m_account, m_name, DA TEDIFF(YY, m_birth, GETDA TE()) 年龄
FROM members
ORDER BY m_address, m_birth
3. 查询会员帐号为’liuzc’所购买的商品号和订购日期,并按订购日期升序排列,SQL 代
下所示:
USE eshop
SELECT p_no, o_date
FROM orders
WHERE m_account = 'liuzc'
ORDER BY o_date
4. 查询购买商品号为’0910810004’总人数,SQL 代码如下所示:
USE eshop
SELECT COUNT(*)
FROM orders
WHERE p_no = '0910810004'
5. 查询2005 年6 月6 日前,所有商品的订购总量,要求输出商品号和订购总量,SQL 代码如
下所示:
USE eshop
SELECT p_no, SUM(o_quantity)
FROM orders
WHERE o_date < '2005-6-6'
GROUP BY p_no
6. 查询所有会员的平均月薪,最高月薪和最低月薪之和,SQL 代码如下所示:USE eshop
SELECT
A VG(m_salary)+MAX(m_salary)+MIN(m_sa lary)
FROM members
7. 查询所有会员购买商品的种类和,要求输出会员号和商品种类和,SQL 代码如下所示:
USE eshop
SELECT m_account, COUNT(DISTINCT p_no) distinct不同的(显示不同的值)FROM orders
GROUP BY m_account
8. 查询各类商品的最高购买数量,要求输出最高数量大于10 的商品号和最高数量,SQL 代码
如下所示:
USE eshop
SELECT TOP 1 p_no, SUM(o_quantity)
FROM orders
GROUP BY p_no
HA VING SUM(o_quantity) > 10
ORDER BY SUM(o_quantity) DESC
Top 数字N 表名from ..选N条记录
9联接查询(多个表之间)
Use eshop
Select * from 表1,表2,...where 条件
或者
USE eshop
Select*from表1 jion表2 on关联条件join 表3 on......
数据库模式定义语言DDL (Data Definition Language)用于定义和管理对象,例如数据库、数据表以及视图。
DDL 语句通常包括每个对象的CREATE、ALTER 以及DROP 命令。
举例来说,CREATE TABLE、ALTER TABLE 以及DROP TABLE 这些语句便可以用来建立新数据表、修改其属性(如新增或删除资料行)、删除数据表等,下面我们会一一介绍。
DML(Data Manipulation Language) 数据操纵语言DML 利用INSERT、SELECT、UPDATE 及DELETE 等语句来操作数据库对象所包含的数据
操作的权限,它使用GRANT和REVOKE 语句对用户或用户组授予或回收数据库对象的权限。