MySQL进阶(回望MySQL)——从数据资产谈起 & MySQL的DOS命令、常用数据类型

总结

就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!

金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。

三面蚂蚁核心金融部,Java开发岗(缓存+一致性哈希+分布式)

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

        JDBCUtil.close(conn, cmd);
    }
}


// 通过批量添加
public static void test2() {
    Connection conn = null;
    PreparedStatement cmd = null;
    try {
        int count = 50000; // 循环10000次
        conn = JDBCUtil.getConnection();
        String sql = "insert into goods values (? , ?)";
        cmd = conn.prepareStatement(sql);
        long start = System.currentTimeMillis();
        for (int i = 0; i < count; i++) {
            cmd.setObject(1, (i+1));
            cmd.setObject(2, "商品" + (i+1));
            cmd.addBatch(); // 积攒SQL - >还没有访问数据库 - > 循环完毕后,将要积攒1万条SQL语句
            if (i % 1000 == 0) { // 每500提交一次
                // 批量提交一下
                cmd.executeBatch();
                // 清除SQL缓存
                cmd.clearBatch();
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("耗时:" + (end - start));
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JDBCUtil.close(conn, cmd);
    }
}


// 引入事务机制
public static void test3() {
    Connection conn = null;
    PreparedStatement cmd = null;
    try {
        int count = 50000; // 循环10000次
        conn = JDBCUtil.getConnection();
        conn.setAutoCommit(false);  // 关闭自动
        String sql = "insert into goods values (? , ?)";
        cmd = conn.prepareStatement(sql);
        long start = System.currentTimeMillis();
        for (int i = 0; i < count; i++) {
            cmd.setObject(1, (i+1));
            cmd.setObject(2, "商品" + (i+1));
            cmd.addBatch(); // 积攒SQL - >还没有访问数据库 - > 循环完毕后,将要积攒1万条SQL语句
            if (i % 1000 == 0) { // 每500提交一次
                // 批量提交一下
                cmd.executeBatch();
                // 清除SQL缓存
                cmd.clearBatch();
            }
        }
        // 事务只提交一次
        long end = System.currentTimeMillis();
        System.out.println("耗时:" + (end - start));
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            conn.commit();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        JDBCUtil.close(conn, cmd);
    }
}

}


### SQL的分类(DML,DQL)


SQL是一本脚本语言:


* 操作表结构,
* 操作表里面的数据,比如增删改查等。


数据操纵语言全程是Data Manipulation Language,主要是进行插入元组、删除元组、修改元组的操作。主要有insert、update、delete语法组成。


数据查询语言全称是Data Query Language,所以是用来进行数据库中数据的查询的,即最常用的select语句


![在这里插入图片描述](https://img-blog.csdnimg.cn/c0f4a3aa3bad404c8532b74528cf42fd.png)


## SQL的函数


### 字符串函数




| **函数名** | **描  述** |
| --- | --- |
| LENGTH | 计算字符串长度函数,返回字符串的字节长度 |
| CONCAT | 合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个 |
| INSERT | 替换字符串函数 |
| LOWER | 将字符串中的字母转换为小写 |
| UPPER | 将字符串中的字母转换为大写 |
| LEFT | 从左侧字截取符串,返回字符串左边的若干个字符 |
| RIGHT | 从右侧字截取符串,返回字符串右边的若干个字符 |
| TRIM | 删除字符串左右两侧的空格 |
| REPLACE | 字符串替换函数,返回替换后的新字符串 |
| SUBSTRING | 截取字符串,返回从指定位置开始的指定长度的字符换 |
| **CHAR\_LENGTH** | 获取字符的个数 |



select LENGTH(‘abc’); – 3
select LENGTH(‘中国’); – 6 (1个中文占3~4之间);
select CHAR_LENGTH(‘豆腐干’); – 字符个数

select ‘a’ + ‘b’ + ‘c’;
select CONCAT(‘a’,‘b’,‘c’); – 字符串的拼接
select CHAR_LENGTH(CONCAT(‘a’,‘b’,‘c’)); – 函数之间可以组合

SELECT INSERT(‘abc’,2,1,‘A’); – 第二个参数从1开始的

SELECT LOWER(‘ABC’) as 小写 , UPPER(‘abc’) as 大写;

SELECT LEFT(‘Student.java’,7) , RIGHT(‘home.html’ , 4) , SUBSTRING(‘aBc’,2,1);

use empdb;
SELECT CONCAT(first_name,’ ',last_name) FROM employees;


### 日期函数




| **函数名** | **描  述** |
| --- | --- |
| **CURRENT\_DATE**,CURRENT\_TIME,NOW() | 取得当前的系统日期和日期 |
| YEAR | 获取年份,返回值范围是 1970〜2069 |
| MONTH | 获取指定日期中的月份 |
| MONTHNAME | 获取指定日期中的月份英文名称 |
| DAYOFWEEK | 获取指定日期对应的一周的索引位置值 |
| DAYOFYEAR | 获取指定曰期是一年中的第几天,返回值范围是1~366 |
| DAYOFMONTH | 获取指定日期是一个月中是第几天,返回值范围是1~31 |
| **ADDDATE、SUBDATE** | 向日期添加指定的时间间隔,向日期减去指定的时间间隔 |
| ADDTIME、SUBTIME | 原始时间上添加指定的时间、原始时间上减去指定的时间 |
| DATEDIFF | 获取两个日期之间间隔,返回参数 1 减去参数 2 的值 |
| DATE\_FORMAT | 格式化指定的日期,根据参数返回指定格式的值 |
| WEEKDAY | 获取指定日期在一周内的对应的工作日索引 |
| **TIMESTAMPDIFF** | 根据指定单位,比较日期的间隔 |



– mysql -> 单表, 40T
SELECT CURRENT_DATE() , CURRENT_TIME() , CURRENT_TIMESTAMP() , NOW();

SELECT YEAR(‘2022-12-12’) , YEAR(NOW()) , MONTH(NOW()) , MONTHNAME(NOW()) ;

SELECT DAYOFYEAR(NOW()) , DAYOFMONTH(NOW());

– 按照数字显示周一,周二…
– java , 选择结构来做 if ,switch
– 也有选择结构
SELECT CASE (DAYOFWEEK(NOW()) - 1)
WHEN 1 THEN ‘周一’
WHEN 2 THEN ‘周二’
WHEN 3 THEN ‘周三’
WHEN 4 THEN ‘周四’
WHEN 5 THEN ‘周五’
WHEN 6 THEN ‘周六’
WHEN 7 THEN ‘周日’
END;

– IF
– 判断年龄是否成年未成年
set @age = 12;
– 三元表达式: age > 20 ? 语句1 : 语句2
SELECT IF(@age > 18,‘已成年’,‘未成年’);

– 操控时间, 可以多时间进行加减
SELECT ADDDATE(NOW(),INTERVAL 1 YEAR); – 添加一年
SELECT ADDDATE(NOW(),INTERVAL -1 YEAR); – 减去一年
SELECT ADDDATE(NOW(),INTERVAL 1 MONTH) ,
ADDDATE(NOW(),INTERVAL 1 DAY) ,
ADDDATE(NOW(),INTERVAL 1 HOUR) ,
ADDDATE(NOW(),INTERVAL 1 MINUTE);

– 日期间隔,返回的是天数
SELECT DATEDIFF(NOW() , ‘2008-5-12’);

– 日期间隔,自定义(天,月,年)
SELECT TIMESTAMPDIFF(YEAR,‘2008-5-12’,NOW());
SELECT TIMESTAMPDIFF(MONTH,‘2008-5-12’,NOW());
SELECT TIMESTAMPDIFF(DAY,‘2008-5-12’,NOW());
SELECT TIMESTAMPDIFF(HOUR,‘2008-5-12’,NOW());

– 8、查询年龄超过20周岁的Y2的学生信息
select * from student where TIMESTAMPDIFF(year,BornDate,NOW()) > 20 and GradeId = (
select GradeId from grade where GradeName = ‘Y2’
);

– 9、查询1月份过生日的学生信息
select * from student where MONTH(BornDate) = 1;

– 10、查询今天(当月)过生日的学生姓名及所在年级
select * from student where MONTH(BornDate) = MONTH(NOW());

– 11、查询学号为“Y21003007”的学生Email的域名
select substring_index(Email,‘@’,-1) from student where StudentNo = ‘Y21003007’;

– 12、查询年龄是23岁的学生信息
select * from student where TIMESTAMPDIFF(year,BornDate,NOW()) = 23;

– 13、查询年龄是28岁以上的女生
select * from student where TIMESTAMPDIFF(year,BornDate,NOW()) > 28 and sex = ‘女’;

– 14、查询年龄20岁到28岁之间,地址是北京的Y2男生
select * from student where TIMESTAMPDIFF(year,BornDate,NOW()) BETWEEN 20 and 28 ;

– 15、查询生日为星期四的学生
select * from student where (DAYOFWEEK(BornDate) - 1) = 4;

– 17、查询上个月9号过生的学生
– 18、查询生日是当月的学生信息
– 19、查询上个月9号过生的学生
– 20、查询即将1周要过生日的

DROP PROCEDURE IF EXISTS getAge;

– 定义存储过程 。速度很快
DELIMITER //
CREATE PROCEDURE getAge(IN birthday VARCHAR(20))
BEGIN
DECLARE age INT DEFAULT 0;
SET age = TIMESTAMPDIFF(YEAR,birthday,NOW());
SELECT age;
END//
DELIMITER ;

– 调用存储过程
CALL getAge(‘1992-12-1’);


### 数学函数




| **函数名** | **描  述** | **示  例** |
| --- | --- | --- |
| **RAND** | 返回从 0 到 1 之间的随机 float 值 | SELECT RAND( )返回:0.79288062146374 |
| ABS | 取数值表达式的绝对值 | SELECT ABS(-43)返回:43 |
| CEILING | 取大于或等于指定数值、表达式的最小整数 | SELECT CEILING(43.5)返回:44 |
| FLOOR | 取小于或等于指定表达式的最大整数 | SELECT FLOOR(43.5)返回:43 |
| POWER | 取数值表达式的幂值 | SELECT POWER(5,2)返回:25 |
| ROUND | 将数值表达式四舍五入为指定精度 | SELECT ROUND(43.543,1)返回:43.500 |
| SIGN | 对于正数返回+1,对于负数返回-1,对于0则返回0 | SELECT SIGN(-43)返回:-1 |
| SQRT | 取浮点表达式的平方根 | SELECT SQRT(9)返回:3 |


### 流程控制函数




| 函数名称 | 作用 |
| --- | --- |
| **IF** | 判断,流程控制 |
| IFNULL | 判断是否为空 |
| **CASE** | 搜索语句 |



SELECT CASE (DAYOFWEEK(NOW()) - 1)
WHEN 1 THEN ‘周一’
WHEN 2 THEN ‘周二’
WHEN 3 THEN ‘周三’
WHEN 4 THEN ‘周四’
WHEN 5 THEN ‘周五’
WHEN 6 THEN ‘周六’
WHEN 7 THEN ‘周日’
END;

– IF
– 判断年龄是否成年未成年
set @age = 12;

– 三元表达式: age > 20 ? 语句1 : 语句2
SELECT IF(@age > 18,‘已成年’,‘未成年’);


### 聚合函数


SQL语言本身,跨所有数据库的。


聚合函数有个特别,计算的值只有1个。




| **函数名** | **描  述** | **示  例** |
| --- | --- | --- |
| MAX | 查询指定列的最大值 | select max(StudentResult) from result 返回:数值99 |
| MIN | 查询指定列的最小值 | select min(StudentResult) from result 返回:数值54 |
| COUNT | 统计查询结果的行数 | select count(1) from xzdw\_2021 返回:数值662770 |
| SUM | 求和,返回指定列的总和 | select SUm(StudentResult) from result 返回:数值6471 |
| AVG | 求平均值,返回指定列数据的平均值 | select SUm(StudentResult) from result 返回:数值71.1099 |



SELECT MAX(GradeId) from student;
SELECT MIN(GradeId) from student;
SELECT * FROM student;
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student;

– 不能再添加其它列了
SELECT COUNT(1) , studentNo FROM student;

– 模拟用户登录: 学号和密码
select IF(count(1) > 0 , ‘登录成功’, ‘登录失败’ ) from student WHERE StudentNo = ‘001’ and LoginPwd = 123456;

SELECT count(1) , MAX(GradeId) from student;

SELECT SUM(ClassHour) as 总课时 , AVG(ClassHour) as 平均课时 from subject;

– 把查询结果导入到一个新表(不用手动取创建),方便做数据分析
create table table_2 SELECT SUM(ClassHour) as 总课时 , AVG(ClassHour) as 平均课时 from subject;

/*20、统计学生总人数*/
select count(1) from student;

/*21、统计S1年级的总学时*/
select SUM(ClassHour) from subject where GradeId = 1;

– 22、统计学号为S1101004的学生第一学期考试(要考什么?考Html还是Java)总成绩
select SUM(StudentResult) from result where StudentNo = ‘S1101004’
and SubjectId in (1,2,3,4,16,17);

– 使用子查询来实现
select SUM(StudentResult) from result where StudentNo = ‘S1101004’
and SubjectId in (select SubjectId from subject where GradeId = 1);

– 23、 统计学号为S1101004的学生第一学期所有考试的平均分 (这个学生是白燕)
select AVG(StudentResult) from result where StudentNo = ‘S1101004’
and SubjectId in (select SubjectId from subject where GradeId = 1);

– 24、 统计2013年3月22日科目“C#语言和数据库技术”的最高分、最低分、平均分
select MAX(StudentResult) 最高分 ,
MIN(StudentResult) 最低分 ,
AVG(StudentResult) 平均分
from result where ExamDate = ‘2013-3-22’
and SubjectId = 3; – 为什么要写3,因为3就就是c#语言和数据库技术的科目编号

– 25、统计2013年3月22日科目“C#语言和数据库技术”及格学生的平均分
select AVG(StudentResult) from result where ExamDate = ‘2013-3-22’ and StudentResult >= 60
and SubjectId = 3;

– 26、 统计所有参加“C#语言和数据库技术”科目考试的平均分
select AVG(StudentResult) from result where SubjectId = 3;

– 27、 统计成绩表中所有成绩的总分数
select SUM(StudentResult) from result;

– 28、统计成绩表中所有成绩的平均分数
select AVG(StudentResult) from result;

– 29、 统计80分以上的平均分数
select AVG(StudentResult) from result where StudentResult > 80;

– 30、 统计成绩表中最高分
select MAX(StudentResult) from result;

– 先排序,在取第一条
select * from result ORDER BY StudentResult desc limit 1;

– 31、统计成绩表中考试科目为“HTML和CSS网页技术”中最低分
select MIN(StudentResult) from subject where SubjectId = 2;

– 32、 统计S1的平均课时
select AVG(ClassHour) from subject where GradeId = 1;

– 33、统计13年11月15号考试的最高分
– 34、统计13年9月13号到10月18号之间,科目为“c#语言和数据库技术”的最高分
SELECT MAX(StudentResult) from result where
(ExamDate BETWEEN ‘2013-9-13’ and ‘2013-10-18’) and SubjectId = 3;

– 35、统计三门课程“走进Java编程世界`”,“HTML和CSS网页技术1”,“面向对象程序设计8”及格学生的平均分
select AVG(StudentResult) from result where StudentResult >= 60 and SubjectId in (1,2,8);

– 36、 统计女生有多少个人
– 37、统计S1有多少个人
– 38、统计Y2没有邮箱的男生有多少个人
– 39、统计住在“北京”的女生有多少人 2
– 40、统计住在“学生宿舍”年龄是25岁的人数
select count(*) from student where Address like ‘%学生宿舍%’ and
TIMESTAMPDIFF(YEAR,BornDate,NOW()) = 25;


### 分组查询


GROUP BY


HAING


![在这里插入图片描述](https://img-blog.csdnimg.cn/4133f94352504c0b91cdefb40633729c.png)



– 分组查询
– 统计各年级人数 . 结果集会出现?行

/*
SELECT列表中只能包含:
1、被分组的列
2、每个分组只能返回一个值的表达式,如聚合函数
*/
select GradeId , COUNT(1) from student
group by student.GradeId;

最后

面试题文档来啦,内容很多,485页!

由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

1111道Java工程师必问面试题

MyBatis 27题 + ZooKeeper 25题 + Dubbo 30题:

Elasticsearch 24 题 +Memcached + Redis 40题:

Spring 26 题+ 微服务 27题+ Linux 45题:

Java面试题合集:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

.(img-3YjXojyF-1715460151373)]

Elasticsearch 24 题 +Memcached + Redis 40题:

[外链图片转存中…(img-loNADzGd-1715460151373)]

Spring 26 题+ 微服务 27题+ Linux 45题:

[外链图片转存中…(img-Ss7kQedU-1715460151373)]

Java面试题合集:

[外链图片转存中…(img-BsLQknHY-1715460151374)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值