1 MySQL子查询

WHERE 这个值是计算出来的

本质:在where语句中嵌套一个子查询语句

1、查询Customer Relations 的所有考试结果(学号,科目编号,成绩)

-- ========= WHERE ========== --
-- 1、查询Customer Relations   的所有考试结果(学号,科目编号,成绩)
-- 方式一:使用连接查询
SELECT `StudentNo`,r.`SubjectNo`,`StudentResult`
FROM `result` r
INNER JOIN `subject` sub
ON r.SubjectNo = sub.SubjectNo
WHERE SubjectName = 'Customer Relations'
ORDER BY StudentResult DESC;-- 方式二:使用子查询()SELECT `StudentNo`,`SubjectNo`,`StudentResult`
FROM `result`
WHERE SubjectNo IN (SELECT SubjectNo FROM `subject`WHERE SubjectName='Customer Relations'
)
ORDER BY StudentResult DESC;

2、查询分数不小于90分的学生的学号、姓名和成绩

-- 2、查询分数不小于90分的学生的学号、姓名和成绩
SELECT s.`StudentNo`, `Name`, `StudentResult`
FROM student s
INNER JOIN result r
ON r.`StudentNo` = s.`StudentNo`
WHERE `StudentResult` >= 90;-- 在这个基础上增加一个科目Human Resources
-- 子查询写法
SELECT s.`StudentNo`, `Name`, `StudentResult`
FROM student s
INNER JOIN result r
ON r.`StudentNo` = s.`StudentNo`
WHERE `StudentResult` >= 90 AND `SubjectNo` IN (SELECT `SubjectNo` FROM `subject`WHERE `SubjectName` = 'Human Resources'
);-- INNER JOIN 写法
SELECT s.`StudentNo`, `Name`, `StudentResult`
FROM student s
INNER JOIN result r
ON s.StudentNo = r.StudentNo
INNER JOIN `subject` sub
ON r.`SubjectNo` = sub.`SubjectNo`
WHERE `SubjectName` = 'Human Resources' AND StudentResult >= 90;-- 优化:由里及外查询
SELECT `StudentNo`,`Name`
FROM `student` WHERE StudentNo IN (SELECT `StudentNo` FROM `result`WHERE `StudentResult` >=90 AND `SubjectNo` IN (SELECT `SubjectNo` FROM `SUBJECT`WHERE SubjectName = 'Human Resources')
);

2 MySQL 函数

2.1 常用函数

-- ================ 常用函数 ================ --
-- 数学运算
SELECT ABS(-8); -- 绝对值
SELECT CEILING(9.4); -- 向上取整
SELECT FLOOR(9.4); -- 向下取整
SELECT RAND(); -- 返回一个0~1之间的随机数
SELECT SIGN(-10); -- 判断一个数的符号: 负数返回-1,正数返回1-- 字符串函数
SELECT CHAR_LENGTH('你好世界!') -- 字符串长度
SELECT CONCAT('我','爱','JAVA') -- 拼接字符串
SELECT INSERT('OK WORLD',1,2,'HELLO') -- 查询,替换, 从某个位置开始替换某个长度
SELECT LOWER('HELLO') -- 转小写字母
SELECT UPPER('hello') -- 转大写字母SELECT INSTR('JeverDemut','D') -- 返回第一次出现的位置
SELECT REPLACE('坚持就能成功','坚持','勤奋') -- 替换字符串SELECT SUBSTR('JEVERDEMUT', 6,5) -- 返回指定的子字符串 (从指定位置截取指定长度)SELECT REVERSE ('你是年少的欢喜') -- 反转字符串-- 时间和日期函数(记住)
SELECT CURRENT_DATE() -- 获取当期日期
SELECT CURDATE() -- 获取当前日期
SELECT NOW() -- 获取当前时间
SELECT LOCALTIME() -- 本地时间
SELECT SYSDATE() -- 系统时间SELECT YEAR(NOW())
SELECT MONTH(NOW())
SELECT DAY(NOW())
SELECT HOUR(NOW())
SELECT MINUTE(NOW())
SELECT SECOND(NOW())-- 系统
SELECT SYSTEM_USER()
SELECT USER()
SELECT VERSION()

2.2 聚合函数

函数名称 描述
COUNT() 计数
SUM() 求和
AVG() 平均值
MAX() 最大值
MIN() 最小值
-- 查询一个表中记录的个数
-- 以下三种方法均能够统计
SELECT COUNT(`Name`) FROM student -- COUNT(字段) 会忽略所有的null值
SELECT COUNT(*) FROM student -- COUNT(*) 不会忽略null值,本质:计算行数
SELECT COUNT(1) FROM result -- COUNT(1) 不会忽略null值,本质:计算行数SELECT SUM(`StudentResult`) AS 总和 FROM result
SELECT AVG(`StudentResult`) AS 平均分 FROM result
SELECT MAX(`StudentResult`) AS 平均分 FROM result
SELECT MIN(`StudentResult`) AS 平均分 FROM result;

案例展示:(内含分组与过滤!

-- 查询不同课程的平均分,最高分,最低分
-- 核心:根据不同的课程分组计算
SELECT `SubjectName`, AVG(StudentResult) AS 平均分, MAX(StudentResult) AS 最高分, MIN(StudentResult) AS 最低分
FROM result r
INNER JOIN `subject` sub
ON r.`SubjectNo` = sub.`SubjectNo`
GROUP BY sub.SubjectName -- 通过某个字段来分组
HAVING 平均分>60 -- 分组与过滤
ORDER BY AVG(StudentResult) DESC -- 通过平均分降序排列

2.3 数据库级别的MD5级别加密

MD5主要增强了算法复杂度和不可逆性。同时,MD5不可逆,具体的值对应的md5是一样的!

补充:MD5破解网站的原理,背后有一个字典,MD5加密后的值,加密的前值,所以一般这种网站是骗人的!

在测试之前我们首先需要建立一个简单的数据表:(代码如下)

-- ============ 测试MD5加密 ============= --
CREATE TABLE `testmd5`(`id` INT (4) NOT NULL,`name`  VARCHAR(20) NOT NULL,`pwd` VARCHAR(50) NOT NULL,PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8-- 插入数据
INSERT INTO `testmd5` VALUES(1,'张三','123456'),(2,'李四','666666'),(3,'王五','222222')

创建完成后,查看数据表:

输入以下代码并运行:

-- 加密
UPDATE testmd5 SET pwd=MD5(pwd) WHERE id = 1

先对上述代码进行优化并交代如何校验:

-- 插入的时候就加密
INSERT INTO `testmd5` VALUES(4,'小明',MD5('222222'))-- 如何校验:将用户传递进来的密码进行md5加密,随后比对加密后的值!
SELECT * FROM testmd5 WHERE `name` = '小明' AND pwd=md5('222222')

3 SELECT 小结

SELECT 的使用基本语法格式参照下列代码:

SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[AS alias1][,table.field2[AS alias2][,...]}
FROM TABLE_NAME [AS TABLE_ALIAS][LEFT | RIGHT | INNER JOIN TABLE_NAME2] -- 联表查询[WHERE ...] -- 指定结果需要满足的条件[GROUP BY ...] -- 指定结果按照哪几个字段来分组[HAVING ...] -- 过滤分组的记录必须满足的次要条件[ORDER BY ...] -- 指定查询记录按照一个或多个条件排序[LIMIT startindex, pagesize] -- 指定查询的记录从哪条到哪条

写在最后

if you continue in your faith, established and firm, and do not move from the hope held out in the gospel. (Colossians 1 : 23)

To Demut!

MySQL Day05 子查询、函数、MD5加密、SELECT小结相关推荐

  1. mysql view 子查询_mysql – View的SELECT包含FROM子句中的子查询

    我有两个表,我需要创建一个视图.表格是: credit_orders(id, client_id, number_of_credits, payment_status) credit_usage(id ...

  2. mysql嵌套子查询索引_SQL 子查询,索引优化

    场景 索引优化 单列索引 多列索引 索引覆盖 排序 场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表 create table Course( c_id int PRIMARY KE ...

  3. MySQL 行子查询

    MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...

  4. 浅谈mysql的子查询

    2019独角兽企业重金招聘Python工程师标准>>> mysql的子查询的优化一直不是很友好,一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一,mysql在处理子查 ...

  5. mysql rand() 子查询_MySQL ------ 子查询(十三)

    查询(query):任何SQL 都是查询,但此术语一般指select 语句 子查询(subquery):嵌套在查询中的查询,MySQL4.1 引入对子查询的支持. 接下来得就比较有意思了,需要你对于表 ...

  6. 生产库中遇到mysql的子查询

    使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在 ...

  7. mysql怎么子查询_在mysql中如何进行子查询?

    在mysql中,子查询是指将一个查询语句嵌套在另一个查询语句中,可以在SELECT.UPDATE和 DELETE语句中配合WHERE子句进行实现,WHERE子句中语法格式为"WHERE (另 ...

  8. MySQL子查询的优缺点_浅谈mysql的子查询

    浅谈mysql的子查询 mysql的子查询的优化一直不是很友好,一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一,你可以点击这里 ,这里来获得一些信息,mysql在处理子查询的时候,会 ...

  9. Mysql之子查询20221016

    Mysql之子查询20221016 子查询案例: 子查询案例: 子查询:谁的工资比Abel的高 SELECT last_name,salary FROM employees WHERE salary ...

最新文章

  1. render_template 网页模板
  2. javascript event
  3. python TypeError can only concatenate tuple not str to tuple
  4. 在电脑上显示未知发布者怎么办_电脑开机后显示器黑屏只有鼠标能动,怎么办呢?...
  5. tensor如何实现转置_PyTorch中的傅立叶卷积:通过FFT有效计算大核卷积的数学原理和代码实现...
  6. 学习Vim 全图解释
  7. IPSEC是如何穿越NAT的
  8. 【HDOJ】1071 The area
  9. Centos学习笔记 linux 常用命令:压缩解压命令
  10. DP题目推荐合集(洛谷/UVa)
  11. STC-ISP烧录软件
  12. android 贴吧列表,Android仿百度贴吧客户端Loading小球
  13. mp3排序软件哪个好用_电脑上有什么录音软件,哪个电脑录音软件好用
  14. ios 苹果支付(IAP)
  15. 钓鱼网站制作 ---- Setoolkit 克隆web页面钓鱼
  16. 解决苹果手机连接了wifi,依旧无法更新系统的问题
  17. linux teamviewer升级,在CentOS 8系统上自动更新TeamViewer的方法
  18. 笔记本计算机虚拟技术,ThinkPad笔记本电脑如何开启CPU虚拟化技术的图文教程
  19. Altium Designer20原理图->PCB
  20. AVR单片机特性简介

热门文章

  1. linux安装sqlserver
  2. 如何进行电脑远程桌面连接
  3. github 首页 html,GitHub - merrier/github-html-preview: 一个可以直接预览html页面的chrome插件...
  4. 车载以太网解决方案 助力智能网联汽车开发
  5. 短视频系统源代码,加载本地图片和加载网络图片
  6. python基于pingouin包进行统计分析:使用tost函数执行单样本的双单侧检验(TOST)、以dataframe的形式输出分析结果(包含p值、自由度、bound等)
  7. 【观察】并非所有桌面云DaaS都一样,思杰Citrix有何神奇魔力?
  8. 华为APP UI自动化测试岗面试真题,真实面试经历。
  9. 股票及炒股票的基础知识
  10. oa html5管理系统模板,OA系统html5整站模板 后台模板