【Sql Server】快速创建表模拟系、课程、老师、学生以及分数(下)

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 在本篇文章中,主要是创建表以及如何快速模拟表数据,方便快速用于查询测试和验证相对于增删改,查询对于任何系统来说,都是主要的功能,并且是在有一定量数据后才能进行的一些操作,比如:学生成绩平均分统计等
作者:小5聊基础
简介:一只喜欢全栈方向的程序员,欢迎咨询,尽绵薄之力答疑解惑
编程原则:Write Less Do More
  • 主要知识点列表
编号 语言或插件 知识点 说明
1 sql server create table 关键词,创建表
2 sql server indentity 自增长函数
3 sql server primary key 设置主键标识
4 sql server len() 统计长度
5 sql server rand() 随机函数,0~1之间的值
6 sql server substring() 截取字符串,substring('',1,1)
7 sql server convert() 数据类型转换,convert(int,'')
8 sql server left join 做关联,以左边表为主,会出现3 * 5=15条记录的情况,需要合理使用好on条件
9 sql server avg() 求平均值

接着上篇文章内容
4)学生表

系编号、课程编号、教师编号、学生编号、学生姓名、性别

create table student_table
(
    student_id int identity(1,1) primary key,
    student_name nvarchar(50),
    sex int, --1=男生,0=女生
    teacher_id int,
    course_id int,
    system_id int
)
  • 数据模拟
declare @myName nvarchar(50)
declare @surname_arr nvarchar(1000)
declare @name_arr nvarchar(1000)
set @surname_arr='王李张刘陈杨黄赵吴周徐孙马朱胡郭'
set @name_arr='爱梦想箱钰郁思裴诗紫弦锐月夏幻音影暗依舞玲滴羽樱莹'

declare @sn_length int
declare @rand_index int

--模拟数据:计算机系、C语言课程、张三老师下的30名学生
declare @student_count int
set @student_count=30
declare @index int 
set @index=0
declare @sex int
set @sex=1

while @index<@student_count begin
    set @myName='' --赋初始值,否则无法使用+加号
    
    --获取姓值
    if len(@surname_arr)>0 begin
        set @sn_length=len(@surname_arr)
        set @rand_index=convert(int,(rand()*@sn_length))-1
        set @myName+=substring(@surname_arr,@rand_index,1)
    end

    --获取名字
    if len(@name_arr)>0 begin
        set @sn_length=len(@name_arr)
        set @rand_index=convert(int,(rand()*@sn_length))-1
        set @myName+=substring(@name_arr,@rand_index,2)
    end
    
    --性别
    set @sex=convert(int,(rand()*2))
    
    insert into student_table(student_name,sex,teacher_id,course_id,system_id)
    values(@myName,@sex,1,1,3)
    
    set @index+=1
end
  • 查询
select a.*,b.teacher_name,c.course_name,d.system_name
from student_table a
left join teacher_table b on b.teacher_id=a.teacher_id
left join course_table c on c.course_id=a.course_id
left join system_table d on d.system_id=a.system_id

image.png

5)学生成绩表

学生编号、系编号、课程编号、教师编号、分数

create table student_score_table
(
    score_id int identity(1,1) primary key,
    score int,
    student_id int,
    teacher_id int,
    course_id int,
    system_id int
)
  • 模拟数据
declare @index int
set @index=1
declare @score int
set @score=0

while @index<=30 begin
    
    set @score=convert(int,(rand()*50))+50
    
    insert into student_score_table(score,student_id,teacher_id,course_id,system_id)
    values(@score,@index,1,1,3)

    set @index+=1
end
  • 查询
select a.*,a2.student_name,b.teacher_name,c.course_name,d.system_name
from student_score_table a
inner join student_table a2 on a2.student_id=a.student_id
left join teacher_table b on b.teacher_id=a.teacher_id
left join course_table c on c.course_id=a.course_id
left join system_table d on d.system_id=a.system_id

image.png

【正式查询前面提到的要求】

1)列出存在86分以上成绩的学生名称和课程编号

select a.score,c.student_name,a.course_id,b.course_name
from student_score_table a
left join course_table b on b.course_id=a.course_id
left join student_table c on c.student_id=a.student_id
where a.score>86

image.png

2)列出“C语言”成绩比平均成绩低的同学

这里使用了,内联子查询的方式进行对比平均分

select a.score,b.avg_score,a.student_id,c.student_name
from student_score_table a
left join(
    --C语言课程的平均分
    select course_id,avg(score) as avg_score
    from student_score_table 
    where course_id=1
    group by course_id
) as b on b.course_id=a.course_id
left join student_table c on c.student_id=a.student_id
where a.score<b.avg_score

image.png

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
17天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
17天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
88 6
|
4天前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
7 0
|
12天前
|
SQL 安全 网络安全
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
27 0
|
17天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
21天前
|
SQL 数据安全/隐私保护
SQL Server 2016安装教程
SQL Server 2016安装教程
21 1
|
21天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
17 1
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据查询
【数据库SQL server】关系数据库标准语言SQL之数据查询
96 0
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之视图
【数据库SQL server】关系数据库标准语言SQL之视图
78 0