MySQL 查询练习

#课程表DROP TABLE IF EXISTS `course`;CREATE TABLE `course` (  `CNO` char(5) NOT NULL,  `CNAME` varchar(10) NOT NULL,  `TNO` int(10) NOT NULL,  PRIMARY KEY (`CNO`)) ENGINE=MyISAM AUTO_INCREMENT=348 DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for score-- ----------------------------#成绩表DROP TABLE IF EXISTS `score`;CREATE TABLE `score` (  `SNO` varchar(3) NOT NULL,  `CNO` varchar(5) NOT NULL,  `DEGREE` decimal(10,1) NOT NULL) ENGINE=MyISAM AUTO_INCREMENT=348 DEFAULT CHARSET=utf8;#学生表-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (  `SNO` int(10) NOT NULL,  `SNAME` varchar(4) NOT NULL,  `SSEX` tinyint(2) NOT NULL,  `SBIRTHDAY` datetime DEFAULT NULL,  `CLASS` varchar(5) DEFAULT NULL,  PRIMARY KEY (`SNO`)) ENGINE=MyISAM AUTO_INCREMENT=348 DEFAULT CHARSET=utf8;#教师表-- ------------------------------ Table structure for teacher-- ----------------------------DROP TABLE IF EXISTS `teacher`;CREATE TABLE `teacher` (  `TNO` varchar(3) NOT NULL,  `TNAME` varchar(4) NOT NULL,  `TSEX` tinyint(2) NOT NULL,  `TBIRTHDAY` datetime NOT NULL,  `PROF` varchar(6) DEFAULT NULL,  `DEPART` varchar(10) NOT NULL,  PRIMARY KEY (`TNO`)) ENGINE=MyISAM AUTO_INCREMENT=348 DEFAULT CHARSET=utf8;

 以课程号升序、成绩降序查询成绩表的所有记录。 SELECT * from score ORDER BY cno asc, degree DESC;

 查询“95031”班的学生人数。SELECT COUNT(CLASS) as 9501班 FROM student WHERE class="95033";
查询‘3-105’号课程的平均分SELECT AVG(degree) FROM score WHERE CNO="3-105";SELECT avg(degree) 平均分  from score GROUP BY cno HAVING cno = ‘3-105‘;
查询成绩表中至少有5名学生选修的并以3开头的课程的平均分数。SELECT CNO,avg(degree) from score  GROUP BY CNO HAVING  COUNT(*)>5 and CNO like "3%";查询最低分大于70,最高分小于90的学生编号 列SELECT SNO  from score  GROUP BY SNO HAVING  min(DEGREE)>70 and MAX(DEGREE)<90;
查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。SELECT  stu.* from  student stu LEFT JOIN score sc ON sc.SNO=stu.SNO and cno="3-105" and sc.DEGREE>(SELECT degree FROM score WHERE CNO="3-105" AND SNO=109 )

查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。SELECT score.* from score INNER JOIN (SELECT sno ,MAX(degree) as maxdegree from score GROUP BY sno HAVING COUNT(*) >1) temp on score.sno = temp.sno and score.degree < temp.maxdegree;查询和学号为107的同学同年出生的所有学生的Sno、Sname和Sbirthday列SELECT sno,sname,sbirthday FROM student WHERE YEAR(SBIRTHDAY)=(SELECT YEAR(SBIRTHDAY) from student WHERE SNO=107);查询“张旭“教师任课的学生成绩SELECT * from score WHERE cno in (SELECT cno from course WHERE tno = (SELECT tno from teacher WHERE tname =‘张旭‘));
查询出“计算机系“教师所教课程的成绩表。
SELECT * from score WHERE cno in (SELECT CNO from course WHERE TNO in (SELECT tno from teacher WHERE DEPART = ‘计算机系‘));
查询“计算机系”与“电子工程系“不同职称的教师的名字和职称。
SELECT tname ,prof from teacher WHERE DEPART = ‘计算机系‘ and  prof not in (SELECT prof from teacher WHERE DEPART = ‘电子工程系‘)
UNION
SELECT tname ,prof from teacher WHERE DEPART = ‘电子工程系‘ and  prof not in (SELECT prof from teacher WHERE DEPART = ‘计算机系‘);
查询所有教师和同学的名字、性别和生日.
SELECT sname as name , ssex as sex , sbirthday as birthday from student
UNION ALL #万一老师和学生姓名 性别 出生日相同呢 所以加了ALL
SELECT tname , tsex  , tbirthday as birthday from teacher;



时间: 2024-10-15 06:54:23

MySQL 查询练习的相关文章

MySQL 查询语句使用进阶

MySQL 查询语句使用进阶 =============================================================================== 概述: =============================================================================== 练习: 练习1  首先导入hellodb.sql的脚本文件,查询其数据库和表如下: [[email protected] ~]# mysql 

mysql查询练习

mysql> #查询每个栏目最贵的商品 mysql> select goods_id,shop_price,cat_id from (select goods_id,shop_price,cat_id from goods order by shop_price desc) as temp group by cat_id; +----------+------------+--------+ | goods_id | shop_price | cat_id | +----------+----

Mysql查询缓存碎片、缓存命中率及Nagios监控

Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STATUS LIKE 'qcache%'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | Qcache_free_blocks | 5 |

MySQL查询in操作 查询结果按in集合顺序显示_Mysql_脚本之家

body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;

MySQL查询计划输出列的含义

"一:MySQL查询计划输出列的含义:1.id:每个被独立执行的操作的标识,表示对象被操作的顺序:id值越大,先被执行:如果相同,执行顺序从上到下.2.select_type:查询中每个select子句的类型.3.table:名字,被操作的对象的名称,通常是表名,但有其他格式.4.partitions:匹配的分区信息(对于非分区表值为NULL).5.type:连接操作的类型.6.possible_keys:备选的索引(列出可能被使用到的索引).7.key:经优化器选定的索引:常使用ANALYZE

mysql查询缓存打开、设置、参数查询、性能变量意思

http://blog.sina.com.cn/s/blog_75ad10100101by7j.html http://www.cnblogs.com/zemliu/archive/2013/08/03/3234372.html 第一: query_cache_type 使用查询缓存的方式 一般,我们会把 query_cache_type 设置为 ON,默认情况下应该是ON mysql> select @@query_cache_type;+--------------------+| @@qu

MySQL查询本周、上周、本月、上个月份数据的sql代码(转)

感谢:http://www.jb51.net/article/32277.htm ------------------------------------------------------------------------------ MySQL查询的方式很多,下面为您介绍的MySQL查询实现的是查询本周.上周.本月.上个月份的数据,如果您对MySQL查询方面感兴趣的话,不妨一看 查询当前这周的数据 SELECT name,submittime FROM enterprise WHERE Y

Mysql 查询注意和执行shell命令

Mysql 查询注意 1. 在mysql查询的时候需要注意在表的前面加上数据库的前缀,不然就是默认是当前的数据库(当多个库查询的时候,可能会出现重复的查相同的表多次) 2. \! ls –al ,mysql可以执行shell 外部的命令(注意\!和ls之间的空格) 版权声明:本文为博主原创文章,未经博主允许不得转载.

MYSQL查询性能优化

查询的基础知识 MySQL查询过程如下图所示: MySQL是通过查询语句的哈希查找来命中缓存的,需要注意的是如果查询语句大小写不一致或者有多余的空格,是不会命中缓存的. 一个查询通常有很多执行方式,查询优化器通过计算开销(随机读取次数)来选择最优的查询. MySQL把所以的查询都当做联接来处理,联接是按照循环嵌套的策略来执行的,如下图所示: 查询的优化和限制 我们需要知道查询优化器会做哪些优化,这样在写查询的时候就可以不需要考虑手动来做这些优化,把这些事情交给查询优化器去做是更好的选择,查询优化

mysql 查询当天、昨天、本周、上周、本月、上月、今年、去年数据

mysql 查询当天数据 mysql查询今天.昨天.7天.近30天.本月.上一月 数据 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) = 1 近7天 SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名) 查询当