新手村之SQL——函数多表联结

1.将数值四舍五入——ROUND
ROUND( X ):返回参数 X 四舍五入后的一个整数。
ROUND(X, D): 返回参数 X 四舍五入且保留 D 位小数后的一个数字。如果 D 为 0,结果将没有小数点或小数部分。

2.判断字段是否为NULL——ISNULL
是否为 NULL 值返回 0 或 1。

SELECT ISNULL(`column_name`)
FROM `table_name`;

IFNULL() 函数也用于判断字段是否为NULL,但是与 ISNULL() 不同的是它接收两个参数,第一个参数 column_name 为列名,第二个参数 value 相当于备用值。

SELECT IFNULL(`column_name`, `value`)
FROM `table_name`;

3.获取当前时间——NOW() 、 CURDATE()、CURTIME()
NOW() 可以用来返回当前日期和时间 格式:YYYY-MM-DD hh:mm:ss
CURDATE() 可以用来返回当前日期 格式:YYYY-MM-DD
CURTIME() 可以用来返回当前时间 格式:hh:mm:ss

在使用 NOW() 和 CURTIME() 时,如果要精确的秒以后的时间的话,可以在()中加数字,加多少,就表示精确到秒后多少位。
比如 NOW(3) 就是精确到毫秒,表示为: 2021-03-31 15:27:20.645

4.提取日期和时间——DATE()、TIME()

SELECT DATE('2021-03-25 16:16:30') AS `date`,TIME('2021-03-25 16:16:30')  AS `time`;
+------------+----------+
| date       | time     |
+------------+----------+
| 2021-03-25 | 16:16:30 |
+------------+----------+
1 row in set
mysql> SELECT `name`, `created_at`, -> DATE_FORMAT(DATE(`created_at`),"%Y-%m-%d") AS `created_date`,-> DATE_FORMAT(TIME(`created_at`),"%H:%i:%s") AS `created_time`-> FROM `courses`;
+-------------------------+---------------------+--------------+--------------+
| name                    | created_at          | created_date | created_time |
+-------------------------+---------------------+--------------+--------------+
| Advanced Algorithms     | 2020-06-01 09:10:12 | 2020-06-01   | 09:10:12     |
| System Design           | 2020-07-18 10:11:12 | 2020-07-18   | 10:11:12     |
| Django                  | 2020-02-29 12:10:12 | 2020-02-29   | 12:10:12     |
| Web                     | 2020-04-22 13:01:12 | 2020-04-22   | 13:01:12     |
| Big Data                | 2020-09-11 16:01:12 | 2020-09-11   | 16:01:12     |
| Artificial Intelligence | 2018-05-13 18:12:30 | 2018-05-13   | 18:12:30     |
| Java P6+                | 2019-01-19 13:31:12 | 2019-01-19   | 13:31:12     |
| Data Analysis           | 2019-07-12 13:01:12 | 2019-07-12   | 13:01:12     |
| Object Oriented Design  | 2020-08-08 13:01:12 | 2020-08-08   | 13:01:12     |
| Dynamic Programming     | 2018-08-18 20:01:12 | 2018-08-18   | 20:01:12     |
+-------------------------+---------------------+--------------+--------------+
10 rows in set

5.提取指定的时间信息——EXTRACT
EXTRACT() 函数用于返回日期/时间的单独部分,如 YEAR (年)、MONTH (月)、DAY (日)、HOUR (小时)、MINUTE (分钟)、 SECOND (秒)。

mysql> SELECT `name`, EXTRACT(HOUR FROM `created_at`) AS `created_hour`
FROM `courses`;
+-------------------------+--------------+
| name                    | created_hour |
+-------------------------+--------------+
| Advanced Algorithms     | 9            |
| System Design           | 10           |
| Django                  | 12           |
| Web                     | 13           |
| Big Data                | 16           |
| Artificial Intelligence | 18           |
| Java P6+                | 13           |
| Data Analysis           | 13           |
| Object Oriented Design  | 13           |
| Dynamic Programming     | 20           |
+-------------------------+--------------+
10 row in set

6.格式化输出日期——DATE_FORMAT()

mysql> SELECT DATE_FORMAT(`created_at`, '%Y %m') AS `DATE_FORMAT`-> FROM `courses`;
+-------------+
| DATE_FORMAT |
+-------------+
| 2020 06     |
| 2020 07     |
| 2020 02     |
| 2020 04     |
| 2020 09     |
| 2018 05     |
| 2019 01     |
| 2019 07     |
| 2020 08     |
| 2018 08     |
+-------------+
10 rows in set (0.01 sec)

7.增加和减少时间——DATE_ADD&DATE_SUB

select name,date_add(created_at,interval 1 day) as new_created from courses
推迟一天

8.时间差——TIMESTAMPDIFF

select TIMESTAMPDIFF(month,created_at,'2020-04-22') as 'MonthDiff' from courses

8.JOIN 连接子句
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行
CROSS JOIN:又称笛卡尔积,两个表数据一一对应,返回结果的行数等于两个表行数的乘积

INNER JOIN:
标准语法:

SELECT `table1`.`column1`, `table2`.`column2`...
FROM `table1`
INNER JOIN `table2`
ON `table1`.`common_field` = `table2`.`common_field`;

示例:

SELECT `c`.`id`, `c`.`name` AS `course_name`, `t`.`name` AS `teacher_name`
FROM `courses` `c`
INNER JOIN `teachers` `t` ON `c`.`teacher_id` = `t`.`id`;

LEFT JOIN:
以关键字 LEFT JOIN 左边的表为参考表。左外连接的结果包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是连接列所匹配的行,这就意味着,左连接会返回左表中的所有记录,加上右表中匹配到的记录。如果左表的某行在右表中没有匹配行,那么在相关联的结果行中,右表的所有选择列表均为空值

mysql-> SELECT c.name AS course_name, t.name AS teacher_name-> FROM teachers tLEFT JOIN courses c ON c.teacher_id = t.id;
+------------------------+--------------------+
|  course_name           | teacher_name       |
+------------------------+--------------------+
| Big Data	         |Eastern Heretic     |
| Data Analysis          |Eastern Heretic     |
| Dynamic Programming	 |Eastern Heretic     | 
| NULL	                 |Northern Beggar     |
| System Design          |Western Venom       |
| Django	         |Western Venom       |
| Artificial Intelligence|Western Venom       |
| Java P6+	         |Western Venom       |
| Senior Algorithm	 |Southern Emperor    |
| Web	                 |Southern Emperor    |
| Object Oriented Design |Southern Emperor    |
| NULL	                 |Linghu Chong        |
+------------------------+--------------------+
12 rows in set (0.01 sec)

RIGHT JOIN:
以关键字 RIGHT JOIN 右边的表为参考表,如果右表的某行在左表中没有匹配行,左表就返回空值。

mysql-> SELECT c.name AS course_name, t.name AS teacher_name, t.email AS teacher_email-> FROM courses cRIGHT JOIN teachers t ON c.teacher_id = t.id;
+------------------------+----------------------+---------------------------+
|  course_name           | teacher_name         | teacher_email             |
+------------------------+----------------------+---------------------------+
| Dynamic Programming	 | Eastern Heretic	| eastern.heretic@gmail.com |
| Data Analysis   	 | Eastern Heretic	| eastern.heretic@gmail.com |
| Big Data   	         | Eastern Heretic	| eastern.heretic@gmail.com |
| Dynamic Programming    | Northern Beggar	| northern.beggar@qq.com    |
| Java P6+	         | Western Venom	| western.venom@163.com     |
| Artificial Intelligence| Western Venom	| western.venom@163.com     |
| Django	         | Western Venom	| western.venom@163.com     |
| System Design	         | Western Venom	| western.venom@163.com     |
| Object Oriented Design | Southern Emperor	| southern.emperor@qq.com   |
| Web	                 | Southern Emperor	| southern.emperor@qq.com   |
| Advanced Algorithms	 | Southern Emperor	| southern.emperor@qq.com   |
| NULL	                 | Linghu Chong	        | NULL                      |
+------------------------+----------------------+---------------------------+
12 rows in set (0.01 sec)

FULL (OUTER) JOIN:
只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行。FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

MySQL 数据库不支持全连接,想要实现全连接可以使用 UNION ALL 来将左连接和右连接结果组合在一起实现全连接。

mysql-> SELECT c.name AS course_name, t.age AS teacher_age-> FROM courses cLEFT JOIN teachers t ON c.teacher_id = t.id-> UNION-> SELECT c.name AS course_name, t.age AS teacher_age-> FROM courses cRIGHT JOIN teachers t ON c.teacher_id = t.id;
+------------------------+---------------+
|  course_name           | teacher_age   | 
+------------------------+---------------+
| Advanced Algorithms	 | 21            | 
| System Design	         | 28            | 
| Django                 | 28            | 
| Web Southern	         | 21            |  
| Big Data	         | 20            |  
| Artificial Intelligence| 28            | 
| Java P6+	         | 28            |  
| Data Analysis Eastern	 | 20            |  
| Object Oriented Design | 21            |  
| Dynamic Programming	 | 20            |  
| Linghu Chong 	         | 18            | 
| NULL	                 | 21            |  
| NULL	                 | 18            |  
+------------------------+----------------------+---------------------------+
13 rows in set (0.01 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言:回文字符串

题目: 思路: 创建一个字符数组,然后判断字符串长度,用循环,看对应字符是否相等,相等则输出,不相等则将对应字符ascll较大的改成ascll较小的(题目要求字典最小的情况)。…

手势识别4:C/C++实现手部检测和手势识别(含源码下载)

手势识别4:C/C实现手部检测和手势识别(含源码下载) 目录 手势识别4:C/C实现手部检测和手势识别(含源码下载) 1. 前言 2. 手势识别模型(YOLOv5) (1)手势识别模型训练 (2)将Pyto…

c语言总结(解题方法)

项目前期处理: 1.首先需要确定项目的背景知识,即主要的难点知识,如指针,数组,结构体,以检索自己是否对项目所需的背景知识足够了解。 2.确定问题实现方法,即题目本身的实现方法,在c语…

GoLong的学习之路,进阶,Redis

这个redis和上篇rabbitMQ一样,在之前我用Java从原理上进行了剖析,这里呢,我做项目的时候,也需要用到redis,所以这里也将去从怎么用的角度去写这篇文章。 文章目录 安装redis以及原理redis概念redis的应用场景有很多red…

【开源】基于Vue+SpringBoot的创意工坊双创管理系统

项目编号: S 049 ,文末获取源码。 \color{red}{项目编号:S049,文末获取源码。} 项目编号:S049,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、…

nodejs 沙盒逃逸

1.[GFCTF 2021]ez_calc 一道很有意思的一道nodejs的题 沙箱逃逸和绕过: F12 看源码 if(req.body.username.toLowerCase() ! admin && req.body.username.toUpperCase() ADMIN && req.body.passwd admin123){ // 登录成功&am…

如何关闭vue项目中的[eslint]校验

要关闭Vue项目中的ESLint校验,可以按照以下步骤进行操作: 打开项目根目录下的.eslintrc.js文件(如果没有该文件,则创建一个新的)。在文件中添加以下代码:module.exports {// 其他配置项...rules: {// 禁用…

Qt MVC示例 simpletreemodel 树模型

Qt MVC示例 simpletreemodel 树模型 从文本中读取树模型数据&#xff0c;缩进代表子项 TreeItem 表示一行字符串数据 treeitem.h #ifndef TREEITEM_H #define TREEITEM_H#include <QList> #include <QVariant>//! [0] class TreeItem { public:explicit Tree…

聚焦清晰度评价指标所用到的各种算法

首先&#xff0c;我想吐槽一下&#xff0c;看了好几篇聚焦评价函数的文章&#xff0c;说到底都是一篇文章转载或者重复上传&#xff0c;介绍了将近 15 种清晰度的算法&#xff0c;原文找了半天都没找到在哪&#xff0c;最多也仅能找到一些比较早的转载。 无参考图像的清晰度评…

习题3-5 三角形判断

习题3-5 三角形判断 给定平面上任意三个点的坐标(x1​,y1​)、(x2​,y2​)、(x3​,y3​)&#xff0c;检验它们能否构成三角形。 输入格式: 输入在一行中顺序给出六个[−100,100]范围内的数字&#xff0c;即三个点的坐标x1​、y1​、x2​、y2​、x3​、y3​。 输出格式: 若这3个…

压缩字符串II

null备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/string-compression/description/ 给你一个字符数组 chars &#xff0c;请使用下述算法压缩&#xff…

Moonbeam生态项目分析 — — 去中心化交易所Beamswap

流动性激励计划Moonbeam Ignite是帮助用户轻松愉快体验Moonbeam生态的趣味活动。在Moonbeam跨链连接的推动下&#xff0c;DeFi的各种可能性在这里爆发。DeFi或许不热门&#xff0c;但总有机会捡漏&#xff0c;了解Monbeam生态项目&#xff0c;我们邀请Moonbeam大使分享他们的研…

数学 --笔试、面试高频

数学 排列组合 10个相同的糖果&#xff0c;分给三个人&#xff0c;每个人至少要得一个。有()种不同分法 10个糖果&#xff0c;中间正好9个空挡&#xff0c;从这9个空挡中任意取出2个作为分割点&#xff0c;正好能把糖果分为3份&#xff0c;并且保证每一份中至少有一个糖果。…

动手学深度学习(五)---模型选择、过拟合、欠拟合

文章目录 一、理论知识1.训练误差和泛化误差 【相关总结】 一、理论知识 1.训练误差和泛化误差 训练误差&#xff1a;模型在训练数据上的误差泛化误差&#xff1a;模型在新数据上的误差 ex:根据摸底考试成绩来预测未来考试分数在过去的考试中表现很好&#xff08;训练误差&am…

【教程】 一文部署配置并入门 Redis

综述 什么是Redis Redis官网——Redis.io Redis, 作为一个高性能的键值对数据库&#xff0c;主要应用于以下场景&#xff1a; 缓存系统&#xff1a;由于其高速读写能力&#xff0c;Redis 非常适合用作缓存系统&#xff0c;减少数据库负载。 会话存储&#xff08;Session St…

【九日集训】第五天:排序

今天主要学习了C语言中的排序API,Qsort()本质上还是使用快速排序实现的; 具体使用方法:qsort(待排序数组, 数组长度, 每个元素字节长 sizeof(int), 比较函数) 比较函数 比较函数决定当前排序是升序还是降序,传入两个参数,返回1则交换,-1和0则不交换 一般使用方法 int cmp(…

在Spring Boot中使用不同的日志

前言&#xff0c;本篇就是介绍在Java中使用相关的日志&#xff0c;适合初学者看&#xff0c;如果对这篇不感兴趣的可以移步了&#xff0c;本篇主要围绕我们Java中的几种日志类型&#xff0c;也说不上有多深入&#xff0c;算的上浅入浅出吧&#xff0c;如果你有一段时间的开发经…

单片机_RTOS_架构

一. RTOS的概念 // 经典单片机程序 void main() {while (1){喂一口饭();回一个信息();} } ------------------------------------------------------ // RTOS程序 喂饭() {while (1){喂一口饭();} }回信息() {while (1){回一个信息();} }void main() {create_task(喂饭);cr…

OpenHarmony 4.0 Release 编译及报错

1、环境准备 安装下面这三东西&#xff0c;是为了下载 Harmony 源码 sudo apt install curl sudo apt install python3-pip sudo apt install git-lfs 安装下面这五个东西&#xff0c;是为了解决编译到最后报错(头铁不信的&#xff0c;你可以试试&#xff0c;等最后再安装) …

opencv常用函数表

函数名功能说明cv2.imread()读取图像文件cv2.imshow()显示图像窗口cv2.imwrite()保存图像文件cv2.cvtColor()颜色空间转换cv2.resize()图像缩放cv2.flip()图像翻转cv2.rectangle()绘制矩形cv2.circle()绘制圆形cv2.line()绘制直线cv2.putText()绘制文本cv2.bitwise_and()与操作…