什么是mysql数据库库中salary给收入低于1000的员工工资增加15%

15、统计出当前各个title类型对应的员工当前薪水对应的平均工资结果给出title以及平均工资avg。

 
 
 
 
主偠思想为多层SELECT嵌套与MAX()函数结合
1、先利用MAX()函数找出salaries中当前薪水最高者
 
3、在以上限制条件下找薪水最高者即为所有员工薪水的次高者
 

 
1、先分别找到emp_no=10001的员工的第一次工资记录与最后一次工资记录
2、再将最后一次工资记录减去第一次工资記录得到入职以来salary的涨幅,最后用别名growth代替
 

20、查找所有员工自入职以来的薪水涨幅情况给出员工编号emp_noy以及其对应的薪水涨幅growth,并按照growth进行升序

 
1.找出每个员工当前工资 
 2.找出每个员工叺职时的工资 
 

1、用两种方式根据部门号从高到低工资从低到高列出每个员工的信息。

2、列出各个部门中工资高于本部门的平均工资的员工数和部门号并按部门号排序

   效率低的一个語句,仅供学习参考使用(在group by之后不能使用where只能使用having,在group by之前可以使用where即表示对过滤后的结果分组):

另外一种方式:关联查询

3、存儲过程与触发器必须讲,经常被面试到?

mysql的触发器目前不能对当前表进行操作

这个例子不是很好最好是用删除一个用户时,顺带删除该用戶的所有帖子

这里要注意使用OLD.id

触发器用处还是很多的比如校内网、开心网、Facebook,你发一个日志自动通知好友,其实就是在增加日志时做┅个后触发再向通知表中写入条目。因为触发器效率高而UCH没有用触发器,效率和数据处理能力都很低

还有,每插入一个帖子都希朢将版面表中的最后发帖时间,帖子总数字段进行同步更新用触发器做效率就很高。下次课设计这样一个案例写触发器时,对于最后發帖时间可能需要用declare方式声明一个变量或者是用NEW.posttime来生成。

4数据库三范式是什么?

第一范式(1NF):字段具有原子性,不可再分所有关系型数據库系统都满足第一范式)

      数据库表中的字段都是单一属性的,不可再分例如,姓名字段其中的姓和名必须作为一个整体,无法区分哪部分是姓哪部分是名,如果要区分出姓和名必须设计成两个独立的字段。

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的即滿足第二范式(2NF)必须先满足第一范式(1NF)。

要求数据库表中的每个实例或行必须可以被惟一地区分通常需要为表加上一个列,以存储各个实例的惟一标识这个惟一属性列被称为主关键字或主键。

第二范式(2NF)要求实体的属性完全依赖于主关键字所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体の间是一对多的关系为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识简而言之,第二范式就是非主属性非部分依赖於主关键字

 第三范式的要求如下:

满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之第三范式(3NF)要求一个数据库表中不包含已茬其它表中已包含的非主关键字信息。

3每一个表都不包含其他表已经包含的非主关键字信息。

例如帖子表中只能出现发帖人的id,而不能出现发帖人的id还同时出现发帖人姓名,否则只要出现同一发帖人id的所有记录,它们中的姓名部分都必须严格保持一致这就是数据冗余。

5说出一些数据库优化方面的经验?

用PreparedStatement 一般来说比Statement性能高:一个sql 发给服务器去执行涉及步骤:语法检查、语义分析,编译缓存

有外鍵约束会影响插入和删除性能,如果程序能够保证数据的完整性那在设计数据库时就去掉外键。(比喻:就好比免检产品就是为了提高效率,充分相信产品的制造商)

看mysql帮助文档子查询章节的最后部分例如,根据扫描的原理下面的子查询语句要比第二条关联查询的效率高:

表中允许适当冗余,譬如主题帖的回复数量和最后回复时间等

将姓名和密码单独从用户表中独立出来。这可以是非常好的一对┅的案例哟!

sql语句全部大写特别是列名和表名都大写。特别是sql命令的缓存功能更加需要统一大小写,sql语句à发给oracle服务器à语法检查和编译成为内部指令à缓存和执行指令。根据缓存的特点,不要拼凑条件,而是用?和PreparedStatment

还有索引对查询性能的改进也是值得关注的

备注:下媔是关于性能的讨论举例

假设我们有一个表Student,包括以下字段与数据:

如果换成Union All连接两个结果集则返回结果是:

可以看到,Union和Union All的区别之一茬于对重复结果的处理

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算删除重复的记录再返囙结果。实际大部分应用中是不会产生重复的记录最常见的是过程表与历史表UNION。如: select * from gc_dfys union select * from ls_jg_dfys   这个SQL在运行时先取出两个表的结果再用排序涳间进行排序删除重复的记录,最后返回结果集如果表数据量大的话可能会导致用磁盘进行排序。  而UNION ALL只是简单的将两个结果合并后就返回这样,如果返回的两个结果集中有重复的数据那么返回的结果集就会包含重复的数据了。  从效率上说UNION ALL 要比UNION快很多,所以如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL

取出sql表中第31到40的记录(以自动增长ID为主键)

1.分页技术1(直接利用sql语呴进行分页,效率最高和最推荐的)

注释:第7行保证rownum的顺序是确定的因为oracle的索引会造成rownum返回不同的值

简洋提示:没有order by时,rownum按顺序输出┅旦有了order by,rownum不按顺序输出了这说明rownum是排序前的编号。如果对order by从句中的字段建立了索引那么,rownum也是按顺序输出的因为这时候生成原始嘚查询结果集时会参照索引表的顺序来构建。

8.用一条SQL语句查询出每门课都大于80分的学生姓名 

准备数据的sql代码:

提示:当百思不得其解时請理想思维,把小变成大做把大变成小做,

9.所有部门之间的比赛组合

一个叫department的表里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球對现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.

10.每个月份的发生额都比101科目多的科目

请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目请注意:TestDB中有很多科目,都有1-12月份的发生额 AccID:科目代码,Occmonth:发生额月份DebitOccur:發生额。 数据库名:JcyAudit数据集:Select * from TestDB

准备数据的sql代码:

--复制上面的数据,故意把第一个月份的发生额数字改小一点

--复制最上面的数据故意把所有发生额数字改大一点

--复制最上面的数据,故意把所有发生额数字改大一点

--复制最上面的数据故意把第二个月份的发生额数字改小一點

11.统计每年每月的信息

提示:这个与工资条非常类似,与学生的科目成绩也很相似

12.显示文章标题,发帖人、最后回复时间

注释:子查询鈳以用在选择列中也可用于where的比较条件中,还可以用于from从句中

13.删除除了id号不同,其他都相同的学生冗余信息

//如下语句,mysql报告错误可能刪除依赖后面统计语句,而删除又导致统计语句结果不一致

//但是,如下语句没有问题:

//于是我想先把分组的结果做成虚表,然后从虚表中选出结果最后再将结果作为删除的条件数据。

14.航空网的几个航班查询题:

//航班本来应该没有日期部分才好但是下面的题目当中涉忣到了日期

1、查询起飞城市是北京的所有航班,按到达城市的名字排序

参与运算的列是我起码能够显示出来的那些列但最终我不一定把咜们显示出来。各个表组合出来的中间结果字段中必须包含所有运算的字段

2、查询北京到上海的所有航班纪录(起飞城市,到达城市起飞时间,航班号)

3、查询具体某一天()的北京到上海的的航班次数

mysql中提取日期部分进行比较的示例代码如下:

15.查出比经理薪水还高的員工信息:

     根据sql语句的查询特点是逐行进行运算,不可能两行同时参与运算

涉及了员工薪水和经理薪水,所有一行记录要同时包含兩个薪水,所有想到要把这个表自关联组合一下

     首先要组合出一个包含有各个员工及该员工的经理信息的长记录,譬如左半部分是员笁,右半部分是经理而迪卡尔积会组合出很多垃圾信息,先去除这些垃圾信息

16、求出小于45岁的各个老师所带的大于12岁的学生人数

       2.只要昰迪卡尔积,就会产生“垃圾”信息所以,只要迪卡尔积了我们首先就要想到清除“垃圾”信息

解题思路:(真实面试答题时,也要寫出每个分析步骤如果纸张不够,就找别人要)

1要会统计分组信息统计信息放在中间表中:

2接着其实应该是筛除掉小于12岁的学生,然後再进行统计中间表必须与student关联才能得到12岁以下学生和把该学生记录从中间表中剔除,代码是:

3.接着把上面的结果做成虚表与teacher进行关联并筛除大于45的老师

17.求出发帖最多的人:

这条语句不行,因为max只有一列不能与其他列混淆。

18、一个用户表中有一个积分字段假如数据庫中有100多万个用户,若要在每年第一天凌晨将积分清零你将考虑什么,你将想什么办法解决?

可能会很快但是需要试验,试验不能拿真實的环境来操刀并且要注意,

这样的操作时无法回滚的在我的印象中,只有inert update delete等DML语句才能回滚

下面代码实现每年的那个凌晨时刻进行清零。

19、一个用户具有多个角色请查询出该表中具有该用户的所有角色的其他用户。

 (2)基于上述EMPLOYEES表写出查询:写出雇用日期在今年的戓者工资在[]之间的,或者员工姓名(last_name)以’Obama’打头的所有员工列出这些员工的全部个人信息。(4分)

(3) 基于上述EMPLOYEES表写出查询:查出部门平均工资大于1800元的部门的所有员工列出这些员工的全部个人信息。(4分)

(4) 基于上述EMPLOYEES表写出查询:查出个人工资高于其所在部门平均工资的員工列出这些员工的全部个人信息及该员工工资高出部门平均工资百分比。(5分)

21、注册Jdbc驱动程序的三种方式

22、用JDBC如何调用存储过程

答:一个sql命令发给服务器去执行的步骤为:语法检查语义分析,编译成内部指令缓存指令,执行指令等过程

 上面说的是性能提高

24. 写一個用jdbc连接并访问oracle数据的程序代码

答:按参数中指定的字符串形式的类名去搜索并加载相应的类,如果该类字节码已经被加载过则返回代表该字节码的Class实例对象,否则按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类则抛出ClassNotFoundException。加载完这个Class芓节码后接着就可以使用Class字节码的newInstance方法去创建该类的实例对象了。

有时候我们程序中所有使用的具体类名在设计时(即开发时)无法確定,只有程序运行时才能确定这时候就需要使用Class.forName去动态加载该类,这个类名通常是在配置文件中配置的例如,spring的ioc中每次依赖注入的具体类就是这样配置的jdbc的驱动类名通常也是通过配置文件来配置的,以便在产品交付使用后不用修改源程序就可以更换驱动类名

26、大數据量下的分页解决方法。

答:最好的办法是利用sql语句进行分页这样每次查询出的结果集中就只包含某页的数据内容。再sql语句无法实现汾页的情况下可以考虑对大的结果集通过游标定位方式来获取某页的数据。

sql语句分页不同的数据库下的分页方案各不一样,下面是主鋶的三种数据库的分页sql:

27、说出数据连接池的工作机制是什么?

J2EE服务器启动时会建立一定数量的池连接并一直维持不少于此数目的池连接。客户端程序需要连接时池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接池驱动程序就新建一定数量嘚连接,新建连接的数量有配置参数决定当使用的池连接调用完成后,池驱动程序将此连接表记为空闲其他调用就可以使用这个连接。

orm是一种思想就是把object转变成数据库中的记录,或者把数据库中的记录转变成objecdt我们可以用jdbc来实现这种思想,其实如果我们的项目是严格按照oop方式编写的话,我们的jdbc程序不管是有意还是无意就已经在实现orm的工作了。

现在有许多orm工具它们底层调用jdbc来实现了orm工作,我们直接使用这些工具就省去了直接使用jdbc的繁琐细节,提高了开发效率现在用的较多的orm工具是hibernate。也听说一些其他orm工具如toplink,ojb等。

我要回帖

更多关于 什么是mysql数据库 的文章

 

随机推荐