PHP 数据库练习

一、

设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。

四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。

用SQL语句创建四个表并完成相关题目。

1-1数据库的表结构

表(一)Student (学生表)


属性名


数据类型


可否为空


含 义


Sno


Char(3)



学号(主码)


Sname


Char(8)



学生姓名


Ssex


Char(2)



学生性别


Sbirthday


datetime



学生出生年月


Class


Char(5)



学生所在班级

表(二)Course(课程表)


属性名


数据类型


可否为空


含 义


Cno


Char(5)



课程号(主码)


Cname


Varchar(10)



课程名称


Tno


Char(3)



教工编号(外码)

表(三)Score(成绩表)


属性名


数据类型


可否为空


含 义


Sno


Char(3)



学号(外码)


Cno


Char(5)



课程号(外码)


Degree


Decimal(4,1)



成绩


主码:Sno+ Cno

表(四)Teacher(教师表)


属性名


数据类型


可否为空


含   义


Tno


Char(3)



教工编号(主码)


Tname


Char(4)



教工姓名


Tsex


Char(2)



教工性别


Tbirthday


datetime



教工出生年月


Prof


Char(6)



职称


Depart


Varchar(10)



教工所在部门

1-2数据库中的数据

表(一)Student


Sno


Sname


Ssex


Sbirthday


class


108


曾华



1977-09-01


95033


105


匡明



1975-10-02


95031


107


王丽



1976-01-23


95033


101


李军



1976-02-20


95033


109


王芳



1975-02-10


95031


103


陆君



1974-06-03


95031

表(二)Course


Cno


Cname


Tno


3-105


计算机导论


825


3-245


操作系统


804


6-166


数字电路


856


9-888


高等数学


831

表(三)Score


Sno


Cno


Degree


103


3-245


86


105


3-245


75


109


3-245


68


103


3-105


92


105


3-105


88


109


3-105


76


101


3-105


64


107


3-105


91


108


3-105


78


101


6-166


85


107


6-166


79


108


6-166


81

表(四)Teacher


Tno


Tname


Tsex


Tbirthday


Prof


Depart


804


李诚



1958-12-02


副教授


计算机系


856


张旭



1969-03-12


讲师


电子工程系


825


王萍



1972-05-05


助教


计算机系


831


刘冰



1977-08-14


助教


电子工程系

1、 查询Student表中的所有记录的Sname、Ssex和Class列。 

select Sname,Ssex,Class from Student

2、 查询教师所有的单位即不重复的Depart列。

select distinct Depart from Teacher

3、 查询Student表的所有记录。

select * from Student

4、 查询Score表中成绩在60到80之间的所有记录并按成绩顺序排列。

select * from Score where Degree >=60 and Degree <=80 order by Degree

select * from Score where Degree between 60 and 80 order by Degree

5、 查询Score表中成绩为85,86或88的记录。

select * from Score where Degree in (85,86,88)

6、 查询Student表中“95031”班或性别为“女”的同学记录。

select * from Student where Class =95031 or Ssex =‘女‘

7、 以Class降序查询Student表的所有记录。

select * from Student order by Class desc

8、 以Cno升序、Degree降序查询Score表的所有记录。

select * from Score order by Cno,Degree desc

9、 查询“95031”班的学生人数。

select Count from Student select Count(*) from Student where Class =95031

10、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)

子查询:

select Sno,Cno from Score where(Degree =(select max (Degree) from score))//子查询更准确,先查询出最高分,再查询学号和课程号

排序:

select Cno,Sno from Score order by Degree desc limit 0,1

11、 查询每门课的平均成绩。按照课程分组(group by),然后求每门课平均分(avg())

select avg(Degree),Cno from Score group by Cno

12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

select avg(Degree),Cno from Score where Cno in(select Cno from Score where Cno like ‘3%‘ group by Cno having count(*)>=5 ) group by Cno limit 0,30

select * from Score where Cno like ‘3%‘ limit 0,30  //查询以3开头的课程信息

select Cno from Score group by Cno having count ( * ) >=5 limit 0,30  //查询选修人数>=5的课程编号

13、查询分数大于70,小于90的Sno列。

select Sno from Score where Degree >70 and Degree <90 limit 0,30

14、查询所有学生的Sname、Cno和Degree列。

方法1.

select (select Sname from Student where Student.Sno = Score.Sno) , Cno,Degree from Score

方法2.

select Sname,Cno,Degree from Score,Student where Score.Sno = Student.Sno   //穷举,,非常浪费资源,不建议使用

方法3.

select Sname,Cno,Degree from Score join Student on Score.Sno = Student.Sno

15、查询所有学生的Sno、Cname和Degree列。

select Sno,Cname,Degree from Score,Course where Score.Cno = Course.Cno

16、查询所有学生的Sname、Cname和Degree列。

select Sname,Cname,Degree from Score,Course,Student where Score.Cno = Course.Cno and Score.Sno = Student.Sno

17、 查询“95033”班学生的平均分。

select avg(Degree) from Score where Sno in( select Sno from Student where class = ‘95033‘)

18、 假设使用如下命令建立了一个grade表:

create table grade(low  int(3),upp  int(3),rank  char(1))

insert into grade values(90,100,’A’)

insert into grade values(80,89,’B’)

insert into grade values(70,79,’C’)

insert into grade values(60,69,’D’)

insert into grade values(0,59,’E’)

现查询所有同学的Sno、Cno和rank列。

select Sno,Cno,rank from Score join grade on Degree between low and upp

19、  查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。

 

select * from Score where Cno = ‘3-105‘ and Degree >(select degree from Score where Sno = ‘109‘ and Cno = ‘3-105‘)

20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。

select * from Score a where Sno in(select Sno from Score group by Sno having count(*)>1) and Degree<(select max(Degree) from Score b where b.Cno = a.Cno)

21、 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。

select * from Score where Degree>(select Degree from Score where Sno=‘109‘ and Cno = ‘3-105‘)

22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。

 

select Sno,Sname,Sbirthday from Student where YEAR(Sbirthday) =( select YEAR(Sbirthday) from Student where Sno = ‘108‘)

23、查询“张旭“教师任课的学生成绩。

select * from Score where Cno in (select Cno from Course where Tno =(select Tno from Teacher where Tname = ‘张旭‘))

24、查询选修某课程的同学人数多于5人的教师姓名。

select * from Teacher where Tno in( select Tno from Course where Cno in( select Cno from Score group by Cno having count(*)>5))

25、查询95033班和95031班全体学生的记录。

select * from Student where class in(‘95033‘,‘95031‘)

26、  查询存在有85分以上成绩的课程Cno.

select distinct Cno from Score where Degree>85

27、查询出“计算机系“教师所教课程的成绩表。

select * from Score where Cno in(select Cno from Course where Tno in( select Tno from Teacher where Depart = ‘计算机系‘))

28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。

select * from Teacher where prof not in(select prof from Teacher where Depart =‘计算机系‘ and prof in (select prof from Teacher where Depart = ‘电子工程系‘))

elect * from Teacher where prof in(select prof from Teacher where Depart =‘计算机系‘ and prof not in (select prof from Teacher where Depart = ‘电子工程系‘)) union

select * from Teacher where prof in(select prof from Teacher where Depart =‘电子工程系‘ and prof not in (select prof from Teacher where Depart = ‘计算机系‘))

29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。

 

select * from Score where Cno = ‘3-105‘ and Degree>Any(select Degree from Score where Cno = ‘3-245‘) order by Degree desc

30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.

select * from Score where Cno = ‘3-105‘ and Degree>All(select Degree from Score where Cno = ‘3-245‘)

31、 查询所有教师和同学的name、sex和birthday.

select Sname,Ssex,Sbirthday from Student union

select Tname,Tsex,Tbirthday from Teacher

32、查询所有“女”教师和“女”同学的name、sex和birthday.

select Sname,Ssex,Sbirthday from Student where Ssex = ‘女‘ union

select Tname,Tsex,Tbirthday from Teacher where Tsex = ‘女‘

33、 查询成绩比该课程平均成绩低的同学的成绩表。

select * from Score a where Degree<(select avg(Degree) from Score b where b.Cno = a.Cno )

34、 查询所有任课教师的Tname和Depart.

 

select Tname,Depart from Teacher where Tno in( select Tno from Course where Cno in(select distinct Cno from Score))

35 、 查询所有未讲课的教师的Tname和Depart.

select Tname,Depart from Teacher where Tno not in( select Tno from Course where Cno in(select distinct Cno from Score))

36、查询至少有2名男生的班号。

select class from Student where Ssex = ‘男‘ group by class having count(*)>1

37、查询Student表中不姓“王”的同学记录。

select * from Student where Sname not like ‘王%‘

38、查询Student表中每个学生的姓名和年龄。

select Sname,YEAR(now())-YEAR(Sbirthday) from Student

39、查询Student表中最大和最小的Sbirthday日期值。

 

select max(Sbirthday),min(Sbirthday) from Student

40、以班号和年龄从大到小的顺序查询Student表中的全部记录。

 

select * from Student order by class desc,Sbirthday

41、查询“男”教师及其所上的课程。

select Cno from Course where Tno in(select Tno from Teacher where Tsex = ‘男‘)

42、查询最高分同学的Sno、Cno和Degree列。

select * from Score where Degree = (select max(Degree) from Score)

select * from Score order by Degree desc limit 0,1

43、查询和“李军”同性别的所有同学的Sname.

select * from Student where Ssex = (select Ssex from Student where Sname = ‘李军‘)

44、查询和“李军”同性别并同班的同学Sname.

select * from Student where Ssex = (select Ssex from Student where Sname = ‘李军‘) and class = (select class from Student where Sname =‘李军‘)

45、查询所有选修“计算机导论”课程的“男”同学的成绩表。

select * from Score where Sno in (select Sno from Student where Ssex = ‘男‘) and Cno in(select Cno from Course where Cname =‘计算机导论‘)

时间: 2024-11-22 16:36:57

PHP 数据库练习的相关文章

数据库介绍与分类

目录 数据库介绍与分类... 1 1.1 数据库介绍... 2 1.1.1什么是数据库... 2 1.2数据库的种类... 2 1.2.1关系型数据库介绍... 2 1.2.2非关系型数据库介绍... 3 1.3 常用关系型数据库产品介绍... 4 1.3.1 Oracle数据库... 4 1.3.2 MySQL数据库... 5 1.3.3 MariaDB数据库... 5 1.3.4 SqlServer数据库... 6 1.3.5 Access数据库... 6 1.3.6 其他不常用数据库...

win7 64位系统 PB连接oracle数据库出现“oracle library oci.dll could not be loaded”问题的解决方法

今天与大家分享一个自己的学习笔记,希望能给遇到同样问题的人带来帮助. 不知道大家在win7 64位系统下用 PB连接oracle数据库时,是否遇到过“oracle library oci.dll could not be loaded”问题. 今天,在win7 64位系统下用 PB连接oracle数据库时,一直出现上述错误,在百度上找了很久,都没有找到一个完整的解决方案,咨询了很多人,(他们都说是我的PB和oracle没装好,但我装的时候没出现任何问题,一切都很顺利,而且PB和oracle都能正

C#与数据库访问技术总结(八)之ExecuteNonQuery方法

ExecuteNonQuery方法 ExecuteNonQuery方法主要用来更新数据. 通常使用它来执行Update.Insert和Delete语句. 该方法返回值意义如下: 对于Update.Insert和Delete语句,返回值为该命令所影响的行数. 对于所有其他类型的语句,返回值为-1. Command对象通过ExecuteNonQuery方法更新数据库的过程非常简单,需要进行的步骤如下: (1)创建数据库连接. (2)创建Command对象,并指定一个SQL Insert.Update

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

Linux环境下MySQL数据库用SQL语句插入中文显示 “问号或者乱码 ” 问题解决!

问题: 在普通用户权限下执行 mysql -u root -p进入mysql数据库,中间步骤省略,插入数据:insert into 库名(属性)values('汉字'); 会出现如下提示:  Query OK, 1 row affected, 1 warning (0.00 sec)    表明出现错误,没有插入成功,然后执行select * from 表名   就会出现如下的问题:显示的表中出现乱码或者问号. 如图: 解决方案: 首先重新打开一个终端窗口(方便操作),进入root用户模式 执行

WEB页面,WEB环境版本,数据库,整站备份脚本

#!/bin/bash # #WEB页面,WEB环境版本,数据库,整站备份脚本 #当发生某个原因导致整个服务器无法恢复时,利用上面备份的相关数据即可重做一台一样的服务器 date_a=`date +%Y%m%d-%H%M%S` mkdir -p /web_bak/${date_a}/conf &> /dev/null mkdir -p /web_bak/${date_a}/web &> /dev/null mkdir -p /web_bak/${date_a}/mysql &a

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

PL/SQL developer 连接oracle数据库报错“initialization error could not load oci.dll”

声明:PL/SQL 版本:PL/SQL Developer 9.0.6 (http://files.allroundautomations.com/plsqldev906.exe) 报错提示如图: 原因:PL/SQL只对32位OS进行支持,解决方法是额外加载一个oci.dll文件 解决办法:1.下载OCI.DLL相关库文件.地址: (需注册Oracle账号) http://www.oracle.com/technetwork/topics/winsoft-085727.html ----->  

Linux环境下启动MySQL数据库出现找不到mysqld.sock的解决办法!

问题: 在普通用户权限下运行:mysql -u root -p,回车之后如果会出现如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 此错误的意思就是没有找到mysqld.sock文件. 解决办法: 首先进入超级用户root权限  sudo -i 或者su - root 切换到默认目录 cd /var/lib/mysql  下查看

Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,视频教程

36套精品Java架构师,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,P2P金融项目,大型分布式电商实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Elasticsearch,Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.java8新特性,P2P金融项目,程序设计,