Mysql 练习 总结
- insert into Course values ('9-888','高等数学','');
- #---------------Teacher--添加信息----
- insert into Teacher values ('','李成','男','1958-09-01','副教授','计算机系');
- insert into Teacher values ('','张旭','男','1969-09-01','讲师','电子工程系');
- insert into Teacher values ('','王萍','男','1972-09-01','助教','计算机系');
- insert into Teacher values ('','刘冰','男','1977-09-01','助教','电子工程系');
- #--------------Score -- 添加信息--
- insert into Score values ('','','3-245','');
- insert into Score values ('','','3-245','');
- insert into Score values ('','','3-245','');
- insert into Score values ('','','3-105','');
- insert into Score values ('','','3-105','');
- insert into Score values ('','','3-105','');
- insert into Score values ('','','3-105','');
- insert into Score values ('','','3-105','');
- insert into Score values ('','','3-105','');
- insert into Score values ('','','6-166','');
- insert into Score values ('','','6-166','');
- insert into Score values ('','','6-166','');
练习题表
- 、 查询Student表中的所有记录的Sname、Ssex和Class列。
- 、 查询教师所有的单位即不重复的Depart列。
- 、 查询Student表的所有记录。
- 、 查询Score表中成绩在60到80之间的所有记录。
- 、 查询Score表中成绩为85,86或88的记录。
- 、 查询Student表中“”班或性别为“女”的同学记录。
- 、 以Class降序查询Student表的所有记录。
- 、 以Cno升序、Degree降序查询Score表的所有记录。
- 、 查询“”班的学生人数。
- 、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
- 、 查询每门课的平均成绩。
- 、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
- 、查询分数大于70,小于90的Sno列。
- 、查询所有学生的Sname、Cno和Degree列。
- 、查询所有学生的Sno、Cname和Degree列。
- 、查询所有学生的Sname、Cname和Degree列。
- 、 查询“”班学生的平均分。
- 、 假设使用如下命令建立了一个grade表:
- create table grade(low int(),upp int(),rank char())
- insert into grade values(,,’A’)
- insert into grade values(,,’B’)
- insert into grade values(,,’C’)
- insert into grade values(,,’D’)
- insert into grade values(,,’E’)
- 现查询所有同学的Sno、Cno和rank列。
- 、 查询选修“-”课程的成绩高于“”号同学成绩的所有同学的记录。
- 、查询score中选学多门课程的同学中分数为非最高分成绩的记录。
- 、 查询成绩高于学号为“”、课程号为“-”的成绩的所有记录。
- 、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
- 、查询“张旭“教师任课的学生成绩。
- 、查询选修某课程的同学人数多于5人的教师姓名。
- 、查询95033班和95031班全体学生的记录。
- 、 查询存在有85分以上成绩的课程Cno.
- 、查询出“计算机系“教师所教课程的成绩表。
- 、查询“计算 机系”与“电子工程系“不同职称的教师的Tname和Prof。
- 、查询选修编号为“-“课程且成绩至少高于选修编号为“-”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
- 、查询选修编号为“-”且成绩高于选修编号为“-”课程的同学的Cno、Sno和Degree.
- 、 查询所有教师和同学的name、sex和birthday.
- 、查询所有“女”教师和“女”同学的name、sex和birthday.
- 、 查询成绩比该课程平均成绩低的同学的成绩表。
- 、 查询所有任课教师的Tname和Depart.
- 、 查询所有未讲课的教师的Tname和Depart.
- 、查询至少有2名男生的班号。
- 、查询Student表中不姓“王”的同学记录。
- 、查询Student表中每个学生的姓名和年龄。
- 、查询Student表中最大和最小的Sbirthday日期值。
- 、以班号和年龄从大到小的顺序查询Student表中的全部记录。
- 、查询“男”教师及其所上的课程。
- 、查询最高分同学的Sno、Cno和Degree列。
- 、查询和“李军”同性别的所有同学的Sname.
- 、查询和“李军”同性别并同班的同学Sname.
- 、查询所有选修“计算机导论”课程的“男”同学的成绩表。
查询题目
- .select distinct cno from score where degree>
- .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 * from score where cno='3-105' and degree>any(select degree from score where cno='3-245')
- .select * from score where cno='3-105' and degree>all(select degree from score where cno='3-245')
- .select sname,ssex,sbirthday from student
- union
- select tname,tsex,tbirthday from teacher
- .select sname,ssex,sbirthday from student where ssex='女'
- union
- select tname,tsex,tbirthday from teacher where tsex='女'
- .select * from score a where degree<(select avg(degree) from score b where b.cno=a.cno )
- .select tname,depart from teacher where tno in(select tno from course )
- .select tname,depart from teacher where cno in(select tno from course where cno not in(select distinct cno from score))
- .select class from student where ssex='男' group by class having count(*)>
- .select * from student where sname not like '王%'
- .select sname,year(now())-year(sbirthday) from student
- .select max(sbirthday),min(sbirthday) from student
- .select * from student order by class desc,sbirthday
- .select tname,cname from course,teacher where course.tno=teacher.tno and teacher.tsex='男'
- .select * from score where degree=(select max(degree) from score)
- select * from score order by degree desc limit ,
- .select sname from student where ssex=(select ssex from student where sname='李军')
- .select sname from student where ssex=(select ssex from student where sname='李军') and class=(select class from student where sname='李军')
- .select * from score where cno=(select cno from course where cname='计算机导论') and sno in(select sno from student where ssex='男')
查询 练习 26-45答案
- .select sname,ssex,class from student
- .select distinct depart from teacher
- .select * from student
- .select * from score where degree between and
- .select * from score where degree in (,,)
- .select * from student where class='' or ssex='女'
- .select * from student order by class desc
- .select * from score order by cno,degree desc
- .select count(*) from student where class=''
- .select sno,cno from score order by degree desc limit ,
- select sno,cno from score where degree = (select max(degree) from score)
- .select avg(degree),cno from score group by cno
- .select avg(degree) from score where cno in(select cno from score group by cno having count(*)> ) and cno like '3%'
- select avg(degree) from score where cno like '3%' group by cno having count(*)>
- .select sno from score where degree> and degree<
- .select sname,cno,degree from student,score where student.sno = score.sno
- .select sno,cname,degree from course,score where course.cno = score.cno
- .select sname,cname,degree from student,course,score where student.sno=score.sno and course.cno = score.cno
- select sname.cname.degree from student join score on student.sno=score.sno join course on course.cno=score.cno
- .select avg(degree) from score where sno in(select sno from student where class='' )
- .select sno,cno,rank from score,grade where degree between low and upp
- .select * from score where cno='3-105' and degree>(select max(degree) from score where sno='')
- select * from score where cno='3-105' and degree>(select max(degree) from score where sno='' and cno='3-105')
- .select * from score where sno in(select sno from score group by sno having count(*)>) and degree<(select max(degree) from score where sno in(select sno from score group by sno having count(*)>))
- select * from score a where sno in(select sno from score group by sno having count(*)>) and degree<(select max(degree) from score b where b.cno = a.cno )
- .select * from score where degree>(select degree from score where sno='' and cno='3-105')
- .select * from student year(sbirthday) = (select year(sbirthday) from student where sno='')
- .select * from score where cno in(select cno from course where tno = (select tno from teacher where tname='张旭'))
- .select tname from teacher where tno=(select tno from course where cno = (select cno from score group by cno having count(*)>))
- .select * from student where class in('','')
答案 1-25
一. 总结
首先回顾: 连接查询(几张表连在一起 组成一个大表 在进行查询 ---易忘) 子查询 联合查询 详见 基础篇
建表顺序:首先 建主表 再建从表 填写内容也一样 先填写主表 在填写 从表
小括号:
1. 小括号 可以表示 独立运算的部分
2.带小括号的是方法 () 比如 count(); where 寻找指定行:
- #---查询95033班和95031班全体学生的记录。
- select * from Student ,Course, Score where Student.Sno=Score.Sno and
- Course.Cno=Score.Cno and ( class=''or class='')
关键词 :
逗号 很重要; 所有语句 几乎都可以嵌套使用
select.. from ; where ; group by having ; order by union
distanct ; or ;in ; and ; not between <> any all (not is)
between <> [查看基础篇 这里不做赘述]
1.not : not in 和 not like
in (not in) 【重要】
- #-----查询选修某课程的同学人数多于5人的教师姓名。如果括号内的Cno 输出值 不止一个 所以 必须 用 in 不能用=
- select Tname from Teacher where Tno=( select Tno from Course where Cno in (select Cno from Score
- group by Cno having count(*)>=5) )
not like
#- 查询Student表中不姓“王”的同学记录。 select * from Student where Sname not like'王%'
2. group by 和 where , count(*)连用的时候 注意 [带小括号的表示方法}
- 首先定义:聚集函数:一种函数,它对一组行中的某个列执行计算,并返回单个值。
- .where 和 having
- 简单的讲,where的条件是字段;而having 的条件可以是字段,也可以是聚集函数;
- 重要的是,where是筛选源数据,having多与group by 一起使用,并且条件常常是聚集函数;当有group by 时,having在group by 条件的后面,而where 在group by的前面。
- 聚集函数:sum,count,avg ...等等;
- .count和sum
- count 是‘累计’; sum是‘累加’;
- 还是上面的表a_info中;
- 查询每个年级中分数大于60的有多少人以及他们的平均分,总分是多少:
- .sql语句的执行顺序:
- ()from 选取数据源;
- ()where 筛选数据源;
- () group by 将筛选的数据源分组;
- ()使用聚集函数计算;
- ()having 筛选分组的数据;
- ()计算表达式;
- ()order by 排序;
group where count(*)同时使用讲解
- #----查询至少有2名男生的班号。
- select class from Student where Ssex='男' group by class having count(*)>=
3.distanct: 使用方法 见 基础部分 不做赘述
4.获取时间 年月日 详见 下一篇 博客 以下简略
获取的 为整数 可以进行大小比较:
获取年 year(时间所在列名)----列名不加引号
获取 当前时间 date(now())
获取 天 date(时间所在的列)
- #----查询Student表中每个学生的姓名和年龄。
- select Sname,year(now())-year(Sbrithday ) from Student
- #---查询Student表中最大和最小的Sbirthday日期值。
- select Sname, max(date(sbrithday)) from Student
- union
- select Sname, min(date(sbrithday)) from Student
- #---以班号和年龄从大到小的顺序查询Student表中的全部记录。
- select * from Student order by class,year(Sbrithday);
5.join on 链接三张表
- #------------ 查询所有学生的Sname、Cname和Degree列。------------------------------
- select sname,cname,degree from student,course,score where student.sno=score.sno and course.cno = score.cno{正常做法}
- select sname,cname,degree from student join score on student.sno=score.sno join course on course.cno=score.cno{join on}
6. mysql 中常用的关键字
- ADD ALL ALTER
- ANALYZE AND AS
- ASC ASENSITIVE BEFORE
- BETWEEN BIGINT BINARY
- BLOB BOTH BY
- CALL CASCADE CASE
- CHANGE CHAR CHARACTER
- CHECK COLLATE COLUMN
- CONDITION CONNECTION CONSTRAINT
- CONTINUE CONVERT CREATE
- CROSS CURRENT_DATE CURRENT_TIME
- CURRENT_TIMESTAMP CURRENT_USER CURSOR
- DATABASE DATABASES DAY_HOUR
- DAY_MICROSECOND DAY_MINUTE DAY_SECOND
- DEC DECIMAL DECLARE
- DEFAULT DELAYED DELETE
- DESC DESCRIBE DETERMINISTIC
- DISTINCT DISTINCTROW DIV
- DOUBLE DROP DUAL
- EACH ELSE ELSEIF
- ENCLOSED ESCAPED EXISTS
- EXIT EXPLAIN FALSE
- FETCH FLOAT FLOAT4
- FLOAT8 FOR FORCE
- FOREIGN FROM FULLTEXT
- GOTO GRANT GROUP
- HAVING HIGH_PRIORITY HOUR_MICROSECOND
- HOUR_MINUTE HOUR_SECOND IF
- IGNORE IN INDEX
- INFILE INNER INOUT
- INSENSITIVE INSERT INT
- INT1 INT2 INT3
- INT4 INT8 INTEGER
- INTERVAL INTO IS
- ITERATE JOIN KEY
- KEYS KILL LABEL
- LEADING LEAVE LEFT
- LIKE LIMIT LINEAR
- LINES LOAD LOCALTIME
- LOCALTIMESTAMP LOCK LONG
- LONGBLOB LONGTEXT LOOP
- LOW_PRIORITY MATCH MEDIUMBLOB
- MEDIUMINT MEDIUMTEXT MIDDLEINT
- MINUTE_MICROSECOND MINUTE_SECOND MOD
- MODIFIES NATURAL NOT
- NO_WRITE_TO_BINLOG NULL NUMERIC
- ON OPTIMIZE OPTION
- OPTIONALLY OR ORDER
- OUT OUTER OUTFILE
- PRECISION PRIMARY PROCEDURE
- PURGE RAID0 RANGE
- READ READS REAL
- REFERENCES REGEXP RELEASE
- RENAME REPEAT REPLACE
- REQUIRE RESTRICT RETURN
- REVOKE RIGHT RLIKE
- SCHEMA SCHEMAS SECOND_MICROSECOND
- SELECT SENSITIVE SEPARATOR
- SET SHOW SMALLINT
- SPATIAL SPECIFIC SQL
- SQLEXCEPTION SQLSTATE SQLWARNING
- SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
- SSL STARTING STRAIGHT_JOIN
- TABLE TERMINATED THEN
- TINYBLOB TINYINT TINYTEXT
- TO TRAILING TRIGGER
- TRUE UNDO UNION
- UNIQUE UNLOCK UNSIGNED
- UPDATE USAGE USE
- USING UTC_DATE UTC_TIME
- UTC_TIMESTAMP VALUES VARBINARY
- VARCHAR VARCHARACTER VARYING
- WHEN WHERE WHILE
- WITH WRITE X509
- XOR YEAR_MONTH ZEROFILL
mysql 关键字
常用函数:
Mysql 练习 总结的更多相关文章
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- mysql每秒最多能插入多少条数据 ? 死磕性能压测
前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...
- LINUX篇,设置MYSQL远程访问实用版
每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 闰秒导致MySQL服务器的CPU sys过高
今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
随机推荐
- ApacheServer-----关于443端口被占用的解决方法
最经公司项目需要经过Apache服务器转发,自己也下载了ApacheServer,但是在启动的过程中,遇到443端口被占用,网上看了一些解决方法,都不对,没有解决问题. 执行启动命令httpd -k ...
- 看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)
一.Graphviz + CodeViz简单介绍 CodeViz是<Understanding The Linux Virtual Memory Manager>的作者 Mel Gorma ...
- JS补充
JavaScript JavaScript 使用那些老旧的实例可能会在 <script> 标签中使用 type="text/javascript".现在已经不必这样做了 ...
- Visual Studio 各种版本的快捷键总结
下列快捷组合键可在工具和文档窗口中用于进行移动.关闭或导航. 命令名 快捷键 说明 视图.全屏 SHIFT + ALT + ENTER 在打开和关闭之间切换“全屏”模式. 视图.向后定位 CTRL + ...
- 解决访问ajax.googleapis.com链接失败方法
参考文章:http://www.jianshu.com/p/690e28f7fde6 主要思路:修改hosts文件,将其网址ajax.googleapis.com指向本地服务器:本地服务器将通过aja ...
- 基于SSL协议的双向认证 - SSL协议 [1]
1 概要说明 在互联网通信方式中,目前用的最广泛的是HTTPS配合SSL和数字证书来保证传输和认证安全了. 2 详细介绍 2.1 HTTPS HTTPS全称:Hypertext Transf ...
- ex6的选择器
前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuery的称赞,很多是由于jQuery方便的元素选择器 ...
- NSFileManager
//返回一个字符串数组(子路径), 并且不包含文件夹 [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath erro ...
- 一起入门python7之函数参数
上一节课简单的讲了一下函数.那么今天来给大家讲一下函数参数.用案例说话哈.上一节课只是让大家有比较简单的了解,那么这节我们来细化一下哈.>>>def hello(x): ...
- storyboard有多个Segue的传递
在项目中需要在一个页面向多个页面传不同的值. 在view2Controller和view3Controller中分别有相应的Str2和Str3 - (void)prepareForSegue:(UIS ...