第一步:建表
1 create table student #学生表 2 ( 3 Sno varchar(20) primary key, #学号,主键 4 Sname varchar(20) not null, #学生姓名 5 Ssex varchar(20) not null, #学生性别 6 Sbirthday datetime, #学生出生日期 7 Class varchar(20) #学生所在班级 8 ); 9 10 create table Teacher #教师表 11 ( 12 Tno varchar(20) primary key , #教职工编号,主键 13 Tnam varchar(20) not null, #教职工姓名 14 Tsex varchar(20) not null, #教职工性别 15 Tbirthday datetime, # 教职工出生年月 16 Prof varchar (20), #职称 17 Depart varchar(20)not null #教职工所在部门 18 ); 19 20 create table Course #课程表 21 ( 22 Con varchar(20) primary key, #课程号,主键 23 Cname varchar(20) not null, #课程名称 24 Tno varchar(20) not null, #教职工 25 foreign key(Tno)references Teacher(Tno) #教工编号,外键 26 ); 27 # 从表的列名 主表的列名 28 29 30 create table Score #成绩表 31 ( 32 Sno varchar(20) not null, 33 foreign key(Sno) references Student(Sno) , #学号,外键 34 Con varchar(20) not null, #组合主键 35 Degree Decimal(4,1) , #Degree 成绩 36 foreign key(Con) references Course(Con) , #课程号,外键 37 primary key (Sno,Con) #成绩 38 ); 39 #values 值的意思 40 41 42 43 44 #Student表 45 insert into Student values('108','曾华','男','1977-09-01','95033'); 46 insert into Student values('105','匡明','男','1975-10-02','95031'); 47 insert into Student values('107','王丽','女','1976-01-23','95033'); 48 insert into Student values('101','李军','男','1976-02-20','95033'); 49 insert into Student values('109','王芳','女','1975-02-10','95031'); 50 insert into Student values('103','陆君','男','1974-06-03','95031'); 51 52 53 54 55 #Teacher表 56 insert into Teacher values('804','李诚','男','1958-12-02','副教授','计算机系'); 57 insert into Teacher values('856','张旭','男','1969-03-12','讲师','电子工程系'); 58 insert into Teacher values('825','王萍','女','1972-05-05','助教','计算机系'); 59 insert into Teacher values('831','刘冰','女','1977-08-14','助教','电子工程系'); 60 61 62 63 #Course 课程表 64 insert into Course values('3-105','计算机导论','825'); 65 insert into Course values('3-245','操作系统','804'); 66 insert into Course values('6-166','数字电路','856'); 67 insert into Course values('9-888','高等数学','831'); 68 69 70 71 #Score 成绩表 72 insert into Score values('103','3-245','86'); 73 insert into Score values('105','3-245','75'); 74 insert into Score values('109','3-245','68'); 75 insert into Score values('103','3-105','92'); 76 insert into Score values('105','3-105','88'); 77 insert into Score values('109','3-105','76'); 78 insert into Score values('101','3-105','64'); 79 insert into Score values('107','3-105','91'); 80 insert into Score values('108','3-105','78'); 81 insert into Score values('101','6-166','85'); 82 insert into Score values('107','6-166','79'); 83 insert into Score values('108','6-166','81');
查询题:
1、查询Student表中的所有记录的Sname、Ssex和Class列。
#答题思路:
#运用知识点:select 列名1,列名2,列名3... from 表名
select Sname,Ssex,Class from Student
2、 查询教师所有的单位即不重复的Depart列。
#答题思路:
#去重查询:select distinct 列名 from 表名
#查出Teacher表中的Depart列 加上distinct关键字就是去重复
select distinct Depart from Teacher
3、 查询Student表的所有记录。
#答题思路:
#select * from 表名 *整个标的所有列
select * from Student
4、 查询Score表中成绩在60到80之间的所有记录。
#答题思路:
# 范围查询: select * from 表名 where Price between 范围值 and 范围值
select * from Score where Degree between 60 and 80
5、 查询Score表中成绩为85,86或88的记录。
#答题思路:
#离散查询:select * from 表名 where 要查的列名 in (要查的数值1,数值2,数值3)
select * from Score where Degree in (85,86,88)
6、 查询Student表中“95031”班或性别为“女”的同学记录。
#答题思路:
#所有的班级的学生
select * from student
#"95031”班的学生
select * from student where class='95031'
#找出95031”班的女学生 。用and关键字 来查找95031板的女生 。 就一个女学生。
select * from student where class='95031' and Ssex='女'
select * from Student where Class='95031' and Ssex='女'
7、 以Class降序查询Student表的所有记录。
#desc降序 排序 order by查找
#select * from 表名 order by 列名 desc
select * from Student order by Class desc
8、 以Cno升序、Degree降序查询Score表的所有记录。
#答题思路:
#在Score表,里查
#根据两个条件来排序。asc升序
#两个条件 :Cno升序、Degree降序 先升,后降
select * from Score order by Cno asc , Degree desc
9、 查询“95031”班的学生人数。
#答题思路:
#count的意思是集合 count(*)的意思是括号里面的字段集合 select count(*) from的意思是 从某某表查询出该字段的集合也就是有几条记录
#{延伸知识:语句一:select count(*) from T;
作用:查询T表中记录的行数。
语句二:select * from T;
作用:查询T表中所有的记录。
它俩的区别是:语句一查询结果为一个数值,就是表中记录条数;语句二查询结果是表中所有数据,就是包括字段名字,字段里面的内容的详细信息。}
select count(*) from Student where Class='95031'
10、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
#答题思路:
#根据子查询来查
#先查score(成绩)表中最高成绩
#select max(degree) from Score #最大值(最高分)是92
#再查这个最高分,的学生代号和课程号
#select sno,cno from score where degree=92
#内容延伸:{ 格式:SELECT [谓语] [表别名] FROM 表名 [AS 表别名] [WHERE 逻辑表达式]它的功能是从一个或多个表中检索数据简单的说SELECT后面跟你想检索的内容,可以的一个字段也可以是多个字段(中间用都好隔开),即可以是字段名也可以用函数(系统自定义的),也可以是一个 * 号,表示输出表中所有的字段。FROM是检索内容的来源,就是来自哪个或那些表,跟表的名称;WHERE的作用是指定查询条件,只把满足逻辑表达式的数据作为查询结果,它是可选项,可有可无.}
select Sno,Cno from Score where Degree= (select max(Degree) from Score)
11、 查询每门课的平均成绩。 #分组查询 每门课 每门课的代号 平均成绩
#扩展知识:group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。
select avg(Degree),Cno from Score group by Cno
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
#条件: 至少有5名学生选修,以3开头的课程的 。 要在where里
select avg(Degree) from Score where Cno = (select Cno from Score group by Cno having count(*)>4) and Cno like '3%' group by Cno
13、查询分数大于70,小于90的Sno列。
#BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
#操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
#第一种方法:
select Sno from Score where Degree between 70 and 90
#第二种方法:
select Sno from Score where Degree>=70 and Degree<=90
14、查询所有学生的Sname、Cno和Degree列。
#join用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
#{有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。}
#分析:
#Sname(学生姓名)列是Student表里的
#Cno、Degree列是Score表里的
#通过 Student里的Sno(主键)就可知道了 Score里的Sno(外键) Sno是有联系的
#把两个表连接起来 连接两张表的关键字join
select * from Student join Score #查询的结果形成了 形成笛卡尔积
#我们要进行筛选,筛选出正确的来 join......on....它两是一对 on的后面加条件
select * from Student join Score on Student.Sno=Score.Sno
#在加上要查的列,就可以了
select Sname,Cno,Degree from Score join Student on Student.Sno = Score.Sno