SQL初级第三课(上)

先建立一个表

create table Student                 --学生
(
Sno          char(3) primary key ,  --学生学号
Sname      char(8) not null,         --学生姓名
Ssex        char(2) not null,          --学生性别
Sbirthday datetime,                    --学生生日
class        char(5)                       --班级
)

create table Course                                              --课程
(
Cno       char(5) primary key,                                   --课程编号
Cname   varchar(10) not null,                                   --课程名称
Tno       char(3) references Teacher(Tno) not null       --教师编号

create table Score                                                  --得分
(
Sno      char(3) references Student (Sno) not null,      --学生学号
Cno      char(5) references Course (Cno) not null,       --课程编号
Degree  Decimal(4,1)                                             --分数
)
create table Teacher                                            --教师
(
Tno          char(3) primary key, --教师编号
Tname      char(4)not null,       --教师姓名
Tsex        char(2) not null,      --教师性别
Tbirthday datetime,                --教师生日
Prof         char(6),                 --教师职位
Depart     varchar(10) not null  --教师隶属部门
)
insert into Student values (108,‘曾华‘,‘男‘,1977-09-01,95033);
insert into Student values (105,‘匡明‘,‘男‘,1975-10-02,95031);
insert into Student values (107,‘王丽‘,‘女‘,1976-01-23,95033);
insert into Student values (101,‘李军‘,‘男‘,1976-02-20,95033);
insert into Student values (109,‘王芳‘,‘女‘,1975-02-10,95031);
insert into Student values (103,‘陆君‘,‘男‘,1974-06-03,95031);

insert into Course values (3-105,‘计算机导论‘,825);
insert into Course values (3-245,‘操作系统‘,804);
insert into Course values (6-166,‘数字电路‘,856);
insert into Course values (9-888,‘高等数学‘,831);

insert into Score values (103,3-245,86);    
insert into Score values (105,3-245,75);
insert into Score values (109,3-245,68);
insert into Score values (103,3-105,92);
insert into Score values (105,3-105,88);
insert into Score values (109,3-105,76);  
insert into Score values (101,3-105,64);
insert into Score values (107,3-105,91);
insert into Score values (108,3-105,78);
insert into Score values (101,6-166,85);
insert into Score values (107,6-166,79);
insert into Score values (108,6-166,81);

insert into Teacher values (804,‘李诚‘,‘男‘,1958-12-02,‘副教授‘,‘计算机系‘);
insert into Teacher values (856,‘张旭‘,‘男‘,1969-03-12,‘讲师‘,‘电子工程系‘);
insert into Teacher values (825,‘王萍‘,‘女‘,1972-05-05,‘助教‘,‘计算机系‘);
insert into Teacher values (831,‘刘冰‘,‘女‘,1977-08-14,‘助教‘,‘电子工程系‘);

Drop table Student;
Drop table Teacher;
Drop table Course;
Drop table Score;

------------------------------------------------------------我是华丽的分割线------------------------------------------------------------------

--外键

外键是相对于主键来设置的,他的设法参照上表,在create table中设置 references 相对的表(表中的列)

例:上表的Course  (Tno       char(3) references Teacher(Tno)) 这个Tno我们就是为了外键,他是相对于teacher表的Tno的外键,相对来说teacher的Tno

就是Course中Tno列的主键。要加外键表首先得有主键表,所以我们嵌入表的时候要先嵌入主键再嵌入外键,不可把表全部圈起来一起执行,次序是student--

teacher--course --score。同样的要想先删除主键表数据必须先删除外键表数据,作为外键的数据源的列,必须要是一个唯一的键(这里列必须是主键或者是unique)。

外键是受其主键约束的,不可以选取主键没有的选项。

------------------------------------------------------------ 我是华丽的分割线 ------------------------------------------------------------------

--聚合函数

聚合函数是针对数据计算求和或计数等一系列的算术性操作。

count(),  --计数

sum(),    --求和

avg(),     --求平均数

max(),    --找最大值

min()     --找最小值

聚合函数()括号里放的是,只有count可以 count(*),返回值是一个数值类型。

聚合函数只能单独显示。如果要命名此列用as + 命名,此外group by可以结合聚合函数使用。

例:查询“95031”班的学生人数。

想法很简单让程序筛选 student表中的class列是95031的学生信息,

--select * from student where class=‘95031‘; --这样我们获得了*,*代表95031的所有学生信息,

然后接收*,用count函数

加工* 数出有多少个*,既count(*);

--  select COUNT(*) from student where class="95031"; --返回3,显示3

例:查询每门课的平均成绩。

查询平均成绩不难,成绩都在score表的degree列中,那么

select avg(degree) from score; --显示出无论课程所有分数的平均分,

但是这是所有课的平均分,得到意义不大,那么怎么样得到每一门课的平均成绩(思考:我们上节介绍了group by分组,前面我们讲过group by分组

的要与显示的一致,否则无意义,那么现在配合聚合函数可以吗)我们可以观察到他在列中以课程编码Cno来分组那么

select avg(degree) from score group by Cno;

程序运算在表score中算出平均分然后用group by 按照Cno分组,这里显示出3个类似平均分的数字,但是我们不能区分其学科,那么我们用as
 select AVG(degree) as 平均分,cno from score group by cno;

时间: 2024-10-07 15:33:51

SQL初级第三课(上)的相关文章

SQL初级第三课(下)

我们续用第三课(上)的表 辅助表 Student                   Course               Score                    Teacher Sno                         Cno                   Sno                       TnoSname                     Cname               Cno                       Tn

shellKali Linux Web 渗透测试— 初级教程(第三课)

shellKali Linux Web 渗透测试— 初级教程(第三课) 文/玄魂 目录 shellKali Linux Web 渗透测试—初级教程(第三课)... 1 课程目录... 1 通过google hack寻找测试目标... 2 一个asp站点的sql注入... 3 一个php站点的sql注入... 4  课程地址:点击 课程目录 两个基本案例,以sql注入入手,目标为熟悉基本的思路,关注细节信息. 关于google hack,web 扫描,sql注入更详细和复杂的内容后续教程会专门讲解

第三课 文件系统(上)

unix_c_03.txt====================第三课 文件系统(上)====================一.系统调用------------应用程序 -----------+| |v |各种库 |(C/C++标准库.Shell命令和脚本. |X11图形程序及库) || |v |系统调用 <----------+(内核提供给外界访问的接口函数,调用这些函数将使进程进入内核态)|v内核(驱动程序.系统功能程序)1. Unix/Linux大部分系统功能是通过系统调用实现的.如o

【第三课】ANR和OOM——贪快和贪多的后果(上)

恼人的ANR 早先年用Android的时候,就连很多知名的app也总是莫名其妙崩溃,好像手机快的时候会崩溃,手机卡的时候app会卡死.卡死的时候会弹出来一个框,询问是要结束app还是继续等待.这就是ANR(Application Not Responding)无疑了. ANR一般有三种类型: KeyDispatchTimeout(5 seconds) — 按键或触摸事件在5秒内无响应 BroadcastTimeout(10 seconds) — BroadcastReceiver在10秒内无法处

【Web探索之旅】第二部分第三课:框架和内容管理系统

内容简介 1.第二部分第三课:框架和内容管理系统 2.第二部分第四课预告:数据库 第二部分第三课:框架和内容管理系统 上一课我们介绍了服务器端的编程语言,有PHP,Java,Python,Ruby,C#等. 这一课我们来学习基于这些语言衍生出来的框架(Framework),然后我们再来看看什么是内容管理系统(CMS). 框架(Framework) 什么是Framework(框架)呢?要给出一个准确的定义很难.因为它有不少不同的定义.可以自行参看这个百度百科: http://baike.baidu

20165328课上补做

一.相关知识点总结: 顺序查询:即指ResultSrt对象一次只能看到一个数据行,使用next()方法移到下一个数据行,next()方法最初的查询位置,即游标位置,位于第一行前面.next()方法向下移动游标,移动成功返回ture,否则返回false. 条件与排序查询: 一般格式: select 字段 form 表名 while 条件 (1)字段值和固定值比较,例如: selet name,height form mess where name="李四" (2)字段值在某个区间范围,例

防止sql注入的三种方法

常用的避免SQL注入的三种方法 一,存储过程 在学习数据库视频的时候接触过,它是存储在数据库中的一些事先编译好的指令.在用的时候不用重新编写,直接调用就好了.所以,使用它可以大大提高程序的执行效率. 那么,如果创建一个存储程序并使用它呢?这是我们今天要解决的问题 1.创建过程 可编程性--下拉菜单--存储过程--右键--查询菜单--指定模板参数的值--新建查询--输入语句--查询菜单中的分析检查语法是否正确--执行 2.具体创建语法 在创建存储程序时,为了应对各种变换的数据,通常会涉及到带参数的

【C语言探索之旅】 第二部分第三课:数组

内容简介 1.课程大纲 2.第二部分第三课: 数组 3.第二部分第四课预告:字符串 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文件读写 动态分配

BeagleBone Black 板第三课:Debian7.5系统安装和远程控制BBB板

BBB板第三课:Debian7.5系统安装和远程控制BBB板 因为BBB板系统是Debian 7.4,据说使用Debian系统可以实现很多BBB板的无缝连接,可以更好的学习和控制BBB板,所以就决定下载Debian7.5系统安装,采用虚拟机的安装方式. 一.系统安装 1.我下载了Debian7.5 32位系统,有三张DVD盘,网上有不少安装资料了,我这里就不详细介绍安装过程了.不过有一点可能很多人都会遇到的问题,就是安装过程中提示插入光盘的问题.虚拟机是Vmware workstation 10