【额 原来ms sqlserver 中的视图果然是“虚表”哈】

本文详细阐述了在SQL环境中,如何通过循环插入数据至教师、学生和师生关系表,并展示了视图的创建方法,旨在优化查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在视图中查询数据的时候,会不会使用实体表中的列上的索引呢?会 。。。。

测试结果

测试脚本

DECLARE @len INT =100;
WHILE @len>0
BEGIN
    
    INSERT INTO Teachers
            ( TeacherName, Sex, MoneyPay )
    VALUES  ( 
               CAST(@len AS NVARCHAR), -- TeacherName - nvarchar(50)
              NULL, -- Sex - bit
              10000  -- MoneyPay - decimal
              )
    
    SET @len-=1;
END

go


DECLARE @len INT =1000;
WHILE @len>0
BEGIN
    
    INSERT INTO Students
            ( StuName, Address, Birthday )
    VALUES  ( CAST(@len AS NVARCHAR )+'-'+CAST(@len AS NVARCHAR ), -- StuName - nvarchar(50)
              N'', -- Address - nvarchar(200)
              GETDATE()  -- Birthday - datetime
              )
          
    SET @len-=1;
END

go


DECLARE @len_t INT =1;
DECLARE @len_stu INT =1;
WHILE @len_t<=100
BEGIN
    SET @len_stu=@len_t;
    
    WHILE @len_stu>0
     BEGIN
        INSERT INTO TeachAndStudent
                ( TeacherId, StudentId, CreateTime )
        VALUES  ( @len_t, -- TeacherId - int
                  @len_stu, -- StudentId - int
                   GETDATE() -- CreateTime - datetime
                  )
         SET @len_stu-=1;
     END
    
    SET @len_t+=1;
END
------------test:--------------
--SELECT * FROM Teachers
--GO
--SELECT * FROM Students
--GO
--SELECT COUNT(*) FROM TeachAndStudent
GO
--CREATE VIEW VTeacherAndStudents
--AS 
--SELECT 
--a.id AS tid,
--c.Id AS stuid,
--a.TeacherName AS tname,
--c.StuName AS sname

-- FROM Teachers A
--INNER JOIN TeachAndStudent B ON B.TeacherId=A.Id
--LEFT JOIN Students C ON C.Id = B.StudentId

GO

SELECT * FROM VTeacherAndStudents a
WHERE a.tid>10 AND a.tid<20

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值