太久没有在数据库做一些复杂的sql了,基本上将数据库的查询逻辑全放在了Java里做,

一来呢,可以减轻数据库的负担,二来呢,在java写,逻辑感会更强,数据类型更丰富也容易操作。

  然而。。。面试却喜欢靠复杂的sql ,好吧,即便我不想,但复习一波还是免不了的。

常用的关系型数据库有 MySQL和Oracle 。Oracle 比较喜欢使用存储过程做业务 ,当然,MySQL也可以,但是没怎么用,

自从工程使用mybatis框架,就不再使用存储过程了,业务基本是增删改查,查询数据的逻辑都是从数据库取相应数据出来后用Java计算,

再从数据库获取最终想要的数据,本来是本着减轻数据库负担才这样做的,并发操作会用上积极锁【乐观锁】,因此也就不需要担心 脏数据问题。

  MySQL和Oracle的语法部分是不同的,有时候用着MySQL,写着写着就用上了Oracle的语法,还一脸懵逼的查了半天到底哪里错,不常使用的东西就是容易忘。

总结:
(1)Oracle 使用nvl() 函数,MySQL使用 ifnull() 函数 来对数据进行判断是否为空,
如果是空则使用替代的数据 ,参数一样 ,如if(x.age,0),意思是如果年龄字段为空则
输出 0 .
(2)sum()函数是运算函数,允许 加减乘除计算 ,如果要使用,则必须使用
group by 分组 ,限定好分组 sum获取的计算数据才不会错,否则将会导致全表计算在一起。
(3)avg()函数是计算平均数的,用法根据需要与 group by 分组配合使用,
如果是计算全表某字段的平均分,则不要使用。
(4)having 关键字可以筛选分组后的各组数据,也就是说可对分组完成后的数据做逻辑条件判断 ,与where类似,但是where无法这样使用,因为where关键字无法与聚合函数一起使用

 

2.复习题

数据库源码

/*
Navicat MySQL Data Transfer

Source Server         : cen
Source Server Version : 50528
Source Host           : localhost:3306
Source Database       : kktest

Target Server Type    : MYSQL
Target Server Version : 50528
File Encoding         : 65001

Date: 2020-06-17 08:21:15
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for bjb
-- ----------------------------
DROP TABLE IF EXISTS `bjb`;
CREATE TABLE `bjb` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of bjb
-- ----------------------------
INSERT INTO `bjb` VALUES ('1', '一班');
INSERT INTO `bjb` VALUES ('2', '2班');
INSERT INTO `bjb` VALUES ('3', '3班');

-- ----------------------------
-- Table structure for cjb
-- ----------------------------
DROP TABLE IF EXISTS `cjb`;
CREATE TABLE `cjb` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_sx` int(11) DEFAULT NULL,
  `yw` int(11) DEFAULT NULL,
  `sx` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of cjb
-- ----------------------------
INSERT INTO `cjb` VALUES ('1', '1', '77', '67');
INSERT INTO `cjb` VALUES ('2', '2', '32', '27');
INSERT INTO `cjb` VALUES ('3', '3', '98', '78');
INSERT INTO `cjb` VALUES ('4', '4', '68', '63');
INSERT INTO `cjb` VALUES ('5', '5', '66', '77');
INSERT INTO `cjb` VALUES ('6', '6', '99', '88');
INSERT INTO `cjb` VALUES ('7', '7', '75', '45');
INSERT INTO `cjb` VALUES ('8', '8', '77', '88');
INSERT INTO `cjb` VALUES ('9', '9', '65', '81');
INSERT INTO `cjb` VALUES ('10', '10', '83', '89');

-- ----------------------------
-- Table structure for xsb
-- ----------------------------
DROP TABLE IF EXISTS `xsb`;
CREATE TABLE `xsb` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `id_banji` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of xsb
-- ----------------------------
INSERT INTO `xsb` VALUES ('1', '岑', '1');
INSERT INTO `xsb` VALUES ('2', 'cen', '1');
INSERT INTO `xsb` VALUES ('3', 'y', '2');
INSERT INTO `xsb` VALUES ('4', 'u', '3');
INSERT INTO `xsb` VALUES ('5', 'yue', '2');
INSERT INTO `xsb` VALUES ('6', 'kk', '2');
INSERT INTO `xsb` VALUES ('7', 'tom', '1');
INSERT INTO `xsb` VALUES ('8', 'lili', '1');
INSERT INTO `xsb` VALUES ('9', 'kile', '3');
INSERT INTO `xsb` VALUES ('10', 'jack', '2');
INSERT INTO `xsb` VALUES ('11', 'hh', '2');

-- ----------------------------
-- Procedure structure for sp_add3
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_add3`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_add3`(a int, b int,out c int)
begin 
set c=a+ b;
end
;;
DELIMITER ;
kktest.sql

相关文章:

  • 2022-12-23
  • 2021-11-18
  • 2021-05-28
  • 2022-02-07
  • 2022-12-23
  • 2021-10-08
  • 2021-06-12
猜你喜欢
  • 2021-11-18
  • 2022-12-23
  • 2022-12-23
  • 2022-02-19
  • 2022-12-23
  • 2021-09-11
  • 2021-07-22
相关资源
相似解决方案