多表操作、外键、视图、多表联合

* fromwhere 工作日期 like '%2005%'
月-日-年 时 分 秒
* fromwhere 工作日期 like '_ _ _ _ _ _2005%'
显示工作日期是空的员工记录:处理空值 is
* fromwhere 工作日期 is null
说明:SQL 无法启动时如何处理
命令:net userldf
. msc --服务
三、子查询
1、:
注意:A、内层查询必须使用()
B、执行顺序:先执行内层查询,返回此结果给外层查询,最后执行外层查询
实例:显示两个表都有的记录
方法一: a . name from a ,b where a . name = b . name
方法二: * from a where name in ( * from b)
说明: = 子查询的结果只能有一个
in 子查询的结果可以有多个或是一个
【多表操作、外键、视图、多表联合】实例:显示a表有,b表没有的员工信息
* from a where name not in ( * from b)
显示年龄最大的员工信息
* fromwhere 年龄 = ( max(年龄) from )
2、表的自连接:一个表进行的自我连接
* from home as homea,home as homeb
实例:
求每个部门中不同性别的平均基本工资
部门,性别,avg(基本工资) from .e group by 部门,性别
找出基本工资大于本部门平均基本工资的员工信息
* from, ( 部门 , avg(基本工资) as 部门平均基本工资 fromgroup by 部门) as YG where. 部门 = YG . 部门 and. 基本工资 > YG . 部门平均基本工资
说明:YG为虚拟表
作业:

多表操作、外键、视图、多表联合

文章插图
A、显示广西的客户信息
客户姓名 fromwhere 客户编号 =( 客户编号 fromwhere 机构地址='广西')
B、显示吕泽所需要的服务信息
* fromwhere 服务编号 in ( 服务编号 from - where 机构编号 in( 机构编号 fromwhere 客户编号 in ( 客户编号 fromwhere 姓名='吕泽')))
C、显示每个分支机构所提供的服务信息
机构地址,服务名 from ,,- where .服务编号 = -.服务编号 and -.机构编号 =.机构编号
D、需要两种服务的客户信息
* fromwhere 客户编号 in ( 客户编号 fromgroup by 客户编号count(*)=2)
四、数据库关系图、关系(略) 五、外键
1、外键:将一个表的主键添加到另一个表中,以此键构建起表与表之间的关系,那么我们这个字段称为另一个表的外键
好处:A、减少数据的冗余
B、级联更新、级联删除
2、外键的创建:右击增加列
点击鼠标右键选择‘关系‘--表和列规范--保存
3、级联更新、级联删除:
关系--、--层叠
通过数据库关系图:
右击创建--右击空白选‘创建数据库关系图’
六、视图:窗户、虚拟表,不存放数据
1、引入视图的好处:
A、让用户限制在某些列
B、让用户限制在某些行
C、可以实现多表操作
D、可以实现安全机制(与用户管理放在一起使用)
2、视图的本质就是一个虚拟表,不存放任何数据,只存放语句
3、创建视图的方法
A、通过图形--右击新建视图
B、通过命令
实例:创建一个视图存放表的所有数据
4、语法:
view 视图名
as
语句
较为全面:
view 视图名
[with ] -- 加密
as
语句
[with check ] -- 必须是满足条件的记录才参加操作
实例:通过命令创建视图存放所有女同志的信息
view
as
* fromwhere 性别='女'
通过视图插入记录:
into('0013','张飞','女'...)
* from
限制只能插入女同志记录:
view view2
as
* fromwhere 性别='女'
with check
5.查看视图的源代码:
6、加密使用 with
view
with
as
* fromwhere 性别='女'
7、插入失败的情况:
A、如果基本表有多个的话,则不允许插入
示例:
view
as
员工表.姓名,性别,年龄,地址,网址 from 员工表,公司表,网址表 where 员工表.姓名=公司表.姓名 and 公司表.公司名称 = 网址表 .公司
B、如果语句中含有、group by等不允许插入
示例:
view view3
as
部门 from
into view3('后勤部')
C、如果语句中含有字段组合,则也不允许插入
示例:
view view4
as
基本工资+奖金-税金 as 应发工资 from
D、如果其他字段不允许有空值,则也不允许插入
示例:
view view5
as
姓名,性别,年龄,籍贯,部门 from
* from view5
into view5('ABC','MM',18,'BJ','技术部')
E、如果违反with check 条件,则也不允许插入
示例:
view
as
食品名称,单价*数量 as 总价 from sp
* from
七、多表联合:union
union与连接的区别:连接的对象是列,只是列的增加,联合的对象是行,只是行的增加
语法: 语句 union语句
实例: * intofrom nan union* from nv
* from
说明:多个表的字段数量及类型一定要一致
实例: 姓名,性别,年龄 from
union
* from
说明:如果存在重复记录,则只显示一条,显示所有使用union all
实例:统计男女员工各多少人
性别,count(*) from ( * from nan
union all
* from nv) as
group by 性别