我的三个月实习——PB运维(3)

第五阶段(sql多表连接)

1.Sql 语句赋值变量
declare @BH varchar(10)
select @BH =max(BH) from BRXXB
print @BH

2.计算总数
select sum(XMJQ) from TJXM where XMZT=‘0’
select count(1)项目数,
sum(case when XMZT=‘0’ then 1 else 0 end)待签,
sum(case when XMZT=‘1’ then 1 else 0 end)已签
from TJXM

insert into TJ_JG values(‘0000001’,1,173.5,50.23,182.3,‘https://blog.csdn.net’,‘https://blog.csdn.net’,‘https://blog.csdn.net’,
‘https://blog.csdn.net’,‘https://blog.csdn.net’,‘2020-05-12’,‘小华’)

3.多表连接
当两表为多对多关系的时候,我们需要建立一个中间表,中间表至少要有两表的主键
SELECT a.TJBH,
a.XM,
a.XB,
a.SFZH,
c.XMMC,
c.XMJQ,
c.XMBH
FROM JBXX a left join TJ_JG b on a.TJBH = b.UBH
left join TJXM c on b.XMBH = c.XMBH
ORDER BY c.XMBH ASC
多表连接
一、外连接
外连接可分为:左连接、右连接、完全外连接。
1、左连接 left join 或 left outer join
SQL语句:select * from student left join course on student.ID=course.ID
左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).

2、右连接 right join 或 right outer join
SQL语句:select * from student right join course on student.ID=course.ID

3、完全外连接 full join 或 full outer join
SQL语句:select * from student full join course on student.ID=course.ID

完全外连接包含full join左右两表中所有的行,如果右表中某行在左表中没有匹配,则结果中对应行右表的部分全部为空(NULL),如果左表中某行在右表中没有匹配,则结果中对应行左表的部分全部为空(NULL)。
二、内连接 join 或 inner join
SQL语句:select * from student inner join course on student.ID=course.ID
执行结果:

inner join 是比较运算符,只返回符合条件的行。
此时相当于:select * from student,course where student.ID=course.ID
三、交叉连接 cross join
1.概念:没有 WHERE 子句的交叉联接将产生连接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。
SQL语句:select * from student cross join course
执行结果:

两表写一对多和多对一的SQL语句的写法和上面的一对一SQL语句一样。
当两表为多对多关系的时候,我们需要建立一个中间表student_course,中间表至少要有两表的主键,当然还可以有别的内容。
SQL语句:select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno
4.不同类型的连接查询什么时候用
(1)查两表关联列相等的数据用内连接。
(2)左表的连接列是右表的子集时用右外连接。
(3)右表的连接列是左表的子集时用左外连接。
(4)左表的连接列和右表的连接列彼此有交集但彼此互不为子集时候用全外。
(5)求差操作的时候用联合查询。
(6)多个表查询的时候,这些不同的连接类型可以写到一块。
ON只进行连接操作,WHERE只过滤中间表的记录

SELECT Sname
FROM Student
WHERE EXISTS
(SELECT *
FROM SC
WHERE SC.Sno = Student.Sno AND SC.Cno = ‘1’);
这是一个SQL语句的嵌套使用,但和上面说的SQL语句的执行过程也是相同的。嵌套的意思也就是说当分析主SQL语句(外面的那个SELECT)到WHERE关键字的时候,又进入了另一个SQL语句中。那么也就是说,分析器先找到表Student并装入内存,一个指针(例如p1)指向Student表中的第一条记录。然后进入WHERE里分析里面的SQL语句,再把SC表装入内存,另一个指针(例如p2)指向SC表中的第一条记录,分析WHERE后面的条件表达式,依次进行分析,最后分析出一个虚表2,也就变成
SELECT Sname
FROM Student
WHERE EXISTS 虚表2
如果虚表为空表,EXISTS 虚表2 也就为false,不返回到SELECT,而p1指向下一条记录。如果虚表2不为空也就是有记录,那么EXISTS 虚表2 为true同,返回到SELECT并把p1指向的记录添加到主SQL语句的虚表1当中。(这也是为什么嵌套的SQL语句SELECT 后面为一般为的原因,因为它EXISTS返回的只是真或假,字段的名没有意义,用就行,当然用别的也不会错。)
注意,这里虽然嵌套的SQL语句分析完了,但主SQL语句只执行了一遍,也就是说p1指向Student的第一条记录,p1还要再指向Student表的下一条记录并分析,这样又进入了嵌套中的SQL语句,同上面说的一样分析。当p1也到了Student表的结尾,整个SQL语句结束。返回虚表1Sname这一列

第六阶段(数据窗口)

1.general
2.tiele 主题
3.Menuname 单击其右边浏览器按钮可以窗体指定一个菜单,此菜单是通过菜单画板所创建的菜单对象
4.Visble 隐藏
5.Enable 启用

事件
Actiate 活动事件

Cliicked 单击事件

Closequery 关闭询问事件

Close 关闭事件

Show 显示窗口事件

Open打开事件

Daactive 活动停止事件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值