mysql经典面试题
数据库优化:
这个优化法则归纳为5个层次:
1、 减少数据访问(减少磁盘访问)
2、 返回更少数据(减少网络传输或磁盘访问)
3、 减少交互次数(减少网络传输)
4、 减少服务器CPU开销(减少CPU及内存开销)
5、 利用更多资源(增加资源)
我们一般在什么字段上建索引?
这是一个非常复杂的话题,需要对业务及数据充分分析后再能得出结果。主键及外键通常都要有索引,其它需要建索引的字段应满足以下条件:
1、字段出现在查询条件中,并且查询条件可以使用索引;
2、语句执行频率高,一天会有几千次以上;
3、通过字段条件可筛选的记录集很小,那数据筛选比例是多少才适合?
这个没有固定值,需要根据表数据量来评估,以下是经验公式,可用于快速评估:
小表(记录数小于10000行的表):筛选比例<10%;
大表:(筛选返回记录数)<(表总记录数*单条记录长度)/10000/16
单条记录长度≈字段平均内容长度之和+字段数*2
-- 当前时间
select CURTIME();
-- 当前日期
select NOW();
-- 查询当天数据
select * from 表名 where TO_DAYS(时间字段)=TO_DAYS(NOW());
-- 查询本周的数据
SELECT * FROM 表名 WHERE YEARWE--EK(date_format(时间字段,'%Y-%m-%d')) = YEARWEEK(now());
-- 最近7天
SELECT * FROM 表名 where date_sub(curdate(), INTERVAL 7 DAY) <= date (时间字段);
-- 查询本月的数据
select * from 表名 where DATE_FORMAT(时间字段,'%Y%m') =DATE_FORMAT(CURDATE(),'%Y%m');
-- 上一月
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1
/*-----------------------------------------第一大题--------------------------------------------------*/
S(SO,SN,SD,SA) 学号,学员姓名,所属单位,学员年龄
C(CO,CN)课程编号,课程名称
SC_1(SO,CO,G)学号,所选修的课程编号,学习成绩
/*1 查询选修课程名为‘税收基础的学员学号和姓名’*/
--方法一:连接查询
SELECT s.SO,s.SN FROM S s,C c,sc_1 sc
where c.CN='税收基础'
and s.so=sc.SO and sc.co=c.CO;
--方法二:嵌套查询
SELECT so,sn from s
where so in(
SELECT so from sc_1 where co in (
SELECT co from c where cn='税收基础'
)
)
/*2 查询选修课程编号为‘c002’学员姓名和所属单位’*/
--方法一:连接查询
SELECT s.SN,s.SD from s s,c c,sc_1 sc
where c.co='c002'
and c.co=sc.CO and s.so=sc.so;
--方法二:嵌套查询
SELECT sn,sd from s
where so in(
SELECT so from sc_1 where co IN (
SELECT co from c
where co='c002'
)
)
/*3 查询不选修课程编号为‘c005的学员姓名跟所属单位’*/
SELECT sn,sd from s
where so not IN
(select so from sc_1 WHERE co='C005');
/*4 查询选修全部课程学员姓名和所属单位’*/
SELECT sn,sd from s
where so in
(
SELECT so from sc_1
GROUP BY so
HAVING COUNT(co)=(SELECT COUNT(co) FROM c)
);
/*5 查询选修了课程的学员人数*/
SELECT COUNT(DISTINCT so) as 选修课程人数 from sc_1;
/*6 查新选修课程大于5门的学员姓名跟所属单位*/
SELECT sn,sd from s
where so IN
(SELECT so from sc_1
GROUP BY so
HAVING COUNT(so)>5
);
/*-----------------------------------------第二大题--------------------------------------------------*/
S(SNO,SNAME)学生关系,SNO学号,SNAME姓名
C(CNO,CHAME,CTEACHER)课程关系,CNO课程号,CHAME课程名,任课老师
SC(SNO,CNO,SCGRADE)选课关系,SCGRADE成绩
/*第一题 找出没有选修过李明老师的课程的所有学生*/
SELECT s.sname FROM student s
where sno not IN
(SELECT DISTINCT(sc1.cno) from class c,sc sc1,student s
where c.cno=sc1.cno and sc1.sno=s.sno
and c.cteacher='李明'
);
/*第二题 列出有两门以上不及格课程的学生姓名跟平均成绩*/
select s.sname as 学生姓名,avg(ssc.scgrade) as 平均成绩 from student s
,sc ssc,(select sno from sc
where scgrade<60
GROUP BY sno
HAVING COUNT((cno)>=2)) a
where s.sno=a.sno and ssc.sno=a.sno
GROUP BY s.sno,s.sname;
/*第三题 列出既学过1号课程又学过2号课程的学生姓名*/
Select s.sno,s.sname FROM student s
where s.sno in
(
Select sc2.sno FROM sc sc2,class c2 Where sc2.cno=c2.cno AND c2.cno IN('1','2')
GROUP BY sc2.sno
HAVING COUNT(DISTINCT c2.cno)=2
);
/*第四题 列出1号课成绩比2号该门课成绩高的所有学生学号*/
SELECT sc1.sno as 学生编号 from sc sc1,sc sc2 where
sc1.cno='1'
and sc2.cno='2'
and sc1.sno=sc2.sno
and sc1.scgrade>sc2.scgrade;
/*第五 列出1号课成绩比2号同学课成绩高的所有学生学号以及1号跟2号课成绩*/
SELECT sc1.sno as 学生编号,sc1.scgrade as 语文成绩,sc2.scgrade as 数学成绩 from sc sc1,sc sc2 where
sc1.cno='1'
and sc2.cno='2'
and sc1.sno=sc2.sno
and sc1.scgrade>sc2.scgrade
mysql经典面试题的更多相关文章
- 数据库MySQL经典面试题之SQL语句
数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学 ...
- MySQL 经典面试题
MySQL 面试 1 存储过程 什么是存储过程 存储过程是一些编译好的SQL语句 因为系统在调用SQL的时候比较浪费时间,所以之前先将一些基本的额SQL语句代码进行编译(对单表或多表的增删改查),然后 ...
- 面试BAT前先搞定这18道MySQL经典面试题(含答案解析)
一.MySQL的复制原理以及流程 (1)复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中: 2. 从:io线程——在使用start ...
- mysql经典面试题之学生成绩表
需要数据库表1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CID, ...
- 100道MySQL数据库经典面试题解析(收藏版)
前言 100道MySQL数据库经典面试题解析,已经上传github啦 https://github.com/whx123/JavaHome/tree/master/Java面试题集结号 公众号:捡田螺 ...
- php经典面试题与答案(转先锋教程网)
php经典面试题与答案 时间:2016-02-29 16:06:23来源:网络 导读:php经典面试题与答案,包括腾讯php面试题.百度php面试题.新浪php面试题等 php面试题及答案 1,禁 ...
- Linux 经典面试题
[Linux 经典面试题] 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文 ...
- 经典面试题:从 URL 输入到页面展现到底发生什么?
前言 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解! 本文首发地址为GitHub 博客,写文章不易,请多多支持与关注 ...
- MySQL开发面试题
……继上一篇MySQL的开发总结之后,适当的练习还是很有必要的…… SQL语法多变,不敢保证唯一,也不敢保证全对,如果错误欢迎指出,即刻修改. 一.现有表结构如下图 TABLENAME:afinfo ...
随机推荐
- Mybatis执行Executor(一)
在DefaultSqlSession中我们可以看到一系列的增删改查操作的其实都是在调用Executor的接口,Mybatis对外统一提供了一个操作接口类Executor,提供的接口方法有update. ...
- MySQL 数据库开发的 36 条军规
MySQL 数据库开发的 36 条军规 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. (一)核心军规 (1)不在数据库做运算:cpu计算务必移至业务层 ...
- 存储那些事儿(三):OpenStack的块存储Cinder与商业存储的融合
OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算软件,以Apache许可证授权,并且是一个自由软件和开放源代码项目.OpenStack是IaaS(基础设施即服务)软 ...
- 敏捷测试(7)--基于story的敏捷基础知识
基于story的敏捷基础知识----迭代启动会.迭代回顾会 除需求讲解意外,需要所有团队成员参加的会议仅有两个,分别是"迭代启动会"和"迭代回顾会". (1)迭 ...
- 水晶报表中"已达到系统管理员配置的最大报表处理作业数限制"错误的处理
错误描述:用水晶报表做报表时当多次打开报表后会经常会出现"已达到系统管理员配置的最大报表处理作业数限制. "的错误. 1.自身的问题:用完CrystalDecisions.Crys ...
- Shell 正则表达式总结及其含义举例
基本元字符集及其含义: ^ 只匹配行首 $ 只匹配行尾 * 只一个单字符后紧跟*,匹配0个或多个此单字符 [ ] 只匹配[ ]内字符.可以是一个单字符,也可以是字符序列.可以使用 - 表 ...
- 【一天一道LeetCode】#51. N-Queens
一天一道LeetCode系列 (一)题目 The n-queens puzzle is the problem of placing n queens on an n×n chessboard suc ...
- 《15个提高Google搜索的技巧》
为了得到更加「多元化」的搜索结果,虽然 Google 目前访问起来并不是那么方便,但是仍然有很多人把它作为常用搜索引擎在使用. 其实除了最简单的关键词搜索之外,搜索引擎还提供了很多精细化的搜索功能,如 ...
- kettle文件自动化部署(shell脚本执行):命令行参数传入
shell脚本中调用kitchen 和 pan去执行,job和transformation文件.分 windows和 dos系统两种. 举个简单的小例子 shell脚本: export JAVA_HO ...
- 操作系统 - 死锁(Deadlock)的概述、条件、对策
资源 可抢占资源(preemptable resource)可以从拥有它的进程中抢占而不会产生任何副作用,存储器就是一类可抢占的资源.可抢占资源有时有潜在的死锁危险,通常可以通过在进程之间重新分配资源 ...