码迷,mamicode.com
首页 > 数据库 > 详细

SQL初级第三课(上)

时间:2015-04-21 17:36:09      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

先建立一个表

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;

 

SQL初级第三课(上)

标签:

原文地址:http://www.cnblogs.com/18553325o9o/p/4444834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!