MySQL编程技巧_MySQL学习笔记---MySQL开发技巧

SQL语句分类

DDL:数据定义语言 --- CREATE、ALTER、DROP、TRUNCATE

TPL:事务处理语言 --- COMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTION

DCL:数据控制语言 --- GRANT、REVOKE

DML:数据操作语言 --- SELECT、UPDATE、INSERT、DELETE

join从句—内连接

join从句:: inner | full outer | left outer | right outer | cross

内连接inner join:

select a.user_name,a.over,b.over from user1 a join user2 b on a.user_name=b.user_name;

LEFT OUTER JOIN:包含左表中的所有数据,当某个连接谓词不在右表中时,新生成的表的右表字段为NULL。对左表数据的信息进行扩展,增加右表中的字段,当某个连接谓词不在右表中时,新生成的表的右表字段为NULL。

使用LEFT OUTER JOIN对NOT IN 进行优化。

SELECT select_sxpressions

FROM TABLE A LEFT OUTER JOIN TABLE B ON A.key=B.key

WHERE B.key IS NULL;

表A中不包含表B中的数据。

SELECT select_sxpressions

FROM TABLE A LEFT OUTER JOIN TABLE B ON A.key=B.key

WHERE B.key IS NOT NULL;

表A与表B的交集,相当于INNER JOIN。

忽然想起来有次面试问我如何用left join实现not in的功能

select A.内容,B.内容 from A left join B ON a.key=b.key where b.key is null

RIGHT OUTER JOIN:包含右表中的所有数据,当某个连接谓词不在左表中时,新生成的表的左表字段为NULL。对右表数据的信息进行扩展,增加左表中的字段,当某个连接谓词不在左表中时,新生成的表的左表字段为NULL。

使用RIGHT OUTER JOIN对NOT IN 进行优化。

SELECT select_sxpressions

FROM TABLE A RIGHT OUTER JOIN TABLE B ON A.key=B.key

WHERE A.key IS NULL;

表B中不包含表A中的数据。

SELECT select_sxpressions

FROM TABLE A RIGHT OUTER JOIN TABLE B ON A.key=B.key

WHERE A.key IS NOT NULL;

表A与表B的交集,相当于INNER JOIN。

MySQL 中 不会支持 full join

解决方法:采用左连接和右连接结合+ union all 方法来取得两表的合集

select a.user_name , a.over , b.over

from user1 a

left join user2 b on a.user_name = b.user_name

union all

select b.user_name , b.over, a.over

from user1 a

right join user2 b on a.user_name = b.user_name

join优化子查询技巧:

一般子查询写法:(数据小时,没有多大影响,如果数据量大时,则要消耗大量的查询)

select a.user_name , a.voer , (select over from user2 where a.user_name = b,user_name) as over2

from user1 a;

如果这两张表的记录相当多 那么这个子查询相当于对A标的每一条记录都要进行一次子查询。

join优化(左连接)后的写法:

select a.user_name , a.over , b.over from user1 a

left join user2 b on a.user_name = b.user_name

使用join + having优化聚合子查询:

select a.user_name,b.timestr,b.kills from user1 a

join user_kills b on a.id = b.user_id

join user_kills c on c.user_id = b.user_id

group by a.user_name,btimestr,b.kills

having b.kills = max(c.kills);

分类聚合方式查询每一个用户某一个字段数据最大的两条数据:

select d.user_name ,c.ctimestr,kills from

(select user_id ,timestr ,kills ,(select count(*) from user_kills b where b.user_id = a.user_id and a.kills <= b.kills) as cnt

from user_kills a group by user_id,timestr,kills) c join user1 d on c.user_id = d.id where cnt <= 2

如何进行行列转换

如何进行行列转换

需要进行行转列的场景:汇总显示

0e230f303d09

Paste_Image.png

0e230f303d09

Paste_Image.png

未完待续...

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

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

相关文章

cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...

CockroachDB学习笔记——[译]CockroachDB中的SQL&#xff1a;映射表中数据到键值存储原文标题&#xff1a;SQL in CockroachDB: Mapping Table Data to Key-Value Storage原作者&#xff1a;Peter Mattis , Tamir Duberstein原文日期&#xff1a;Sep 16, 2015译&#xff1a;zif…

kafka topic 目录存放在哪_Kafka系列文章之安装测试-第2篇

前言上篇文章讲解了 Kafka 的基础概念和架构&#xff0c;了解了基本概念之后&#xff0c;必须得实践一波了&#xff0c;所谓“实践才是检验真理的唯一办法”&#xff0c;后续系列关于 Kafka 的文章都以 kafka_2.11-0.9.0.0 为例&#xff1b;另外为了让大家快速入门&#xff0c;…

java开发分支_如何选择Java 的分支?

问题阐述听说Java 无所不能&#xff0c;从简单的手机游戏到世界500 强的官方网站都能开发&#xff0c;作为一名Java 的初学者&#xff0c;我该如何入手&#xff1f;专家解答自诞生之日起&#xff0c;Java 语言就处于不断的发展中。目前&#xff0c;其主要分为以下3 个分支。. J…

蚂蚁爬杆 java_java蚂蚁爬杆

import java.util.List;import java.util.ArrayList;import java.math.BigDecimal;/*-作者:volcano_hosan*-----------蚂蚁爬杆*有一根300厘米的细木杆&#xff0c;在第30厘米、80厘米、110厘米、160厘米、250厘米这五个位置上各有一只蚂蚁。*木杆很细&#xff0c;不能同时通过…

java制作加载界面_Java如何制作启动界面?

展开全部大概的思路就是使用线程来计算耗时的32313133353236313431303231363533e58685e5aeb931333337613133操作&#xff0c;在前段显示启动的窗口&#xff0c;示例如下&#xff1a;java 代码/** To change this template, choose Tools | Templates* and open the template in…

java 生成客户端代码_swagger-codegen生成java客户端代码

前后端分离的时候&#xff0c;需要建立契约&#xff0c;Swagger可达到该目的(略)。建立Rest接口后&#xff0c;通过swagger-codegen项目可以自动生成对应的客户端代码(c、php、java、js、node等等)&#xff0c;关于swagger-codegen项目的使用&#xff0c;发现中文文档较少&…

mysql无法启动修复_记一次MySQL无法启动及修复经历

记得有次本地的MySQL无法启动&#xff0c;网上说&#xff0c;去删掉InnoDB日志就行&#xff0c;我就傻乎乎的去删掉了InnoDB相关的文件&#xff0c;果然&#xff0c;没有任何问题&#xff0c;正常启动了。可是谁曾想&#xff0c;过了几天&#xff0c;故障复现了&#xff0c;我就…

mysql的操作语句_Mysql最常用的操作语句收集

Mysql中常用语句简单易学springboot微服务是现在流行的框架&#xff0c;目前大多数做java的人都在使用&#xff0c;java的生态一直很好&#xff0c;各种插件各种第三方jar包推动着java的运行。Mysql是Springboot最常用的数据库&#xff0c;主要原因是Mysql免费而且轻量。考虑性…

java获取网络带宽_Linux Java 获取CPU使用率,内存使用率,磁盘IO,网络带宽使用率等等...

/*** 获取带宽上传下载速度* return*/public String getNetWorkSpeed() {boolean result false;String detailInfo "";DecimalFormat df new DecimalFormat("0.00");String dl "";String ul "";System.out.println("开始收集…

java周期_java 周期时期计算

package org.apple.date;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;/*** 周期时间* author shaoyu**/public class CycleDate {public static void main(String[] args) {SimpleDateFormat dateformatnew SimpleDateFormat("yy…

python实现qq登录界面_使用Python编写一个QQ办公版的图形登录界面!

最近&#xff0c;QQ的办公版本——TIM进行了一次更新升级。本次更新升级大幅修改了界面的样式&#xff0c;看起来更加的清爽、简洁和高效了。这种界面州的先生还是比较喜欢的&#xff0c;没有QQ那么花里胡哨&#xff0c;也比微信那些残缺的功能更加丰富。并且这次的登录界面还新…

python算法详解豆瓣_豆瓣爬虫实践-python版

豆瓣登录&#xff0c;无验证码版&#xff1a;import requests#starturl "https://www.douban.com/accounts/login"loginurl "https://accounts.douban.com/login"headers {User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KH…

python项目打包部署到ios_Python iOS 自动打包脚本(包含上传到fir)

Python iOS自动打包脚本使用说明1.1 使用python3编写&#xff0c;没有python3 环境的需要下载python3python官网下载1.2 通过Homebrew安装Python31.2.1 先搜索$ brew search python输出&#xff1a;app-engine-python micropython python3boost-python python wxpythongst-pyth…

stlink 升级固件以后失败_ST-Link不能下载程序的几种解决办法

一直在用J-LINK&#xff0c;最近改用ST-Link&#xff0c;出现了不少无法下载程序的情况&#xff0c;这里列出几种解决的办法(针对STM32F103系列)&#xff1a;1#是不是你没有选择Flash算法&#xff1f;什么都没有加的话&#xff0c;会提示“找不到Flash算法”的哦2#是不是你JTAG…

cnsl是什么意思_VS2010下创建静态链接库和动态链接库

VS2010下创建静态链接库和动态链接库类封装成dll如果你的工作长期与某个领域相关&#xff0c;比如说长期做直接体绘制 (DVR)方面的开发&#xff0c;那么你可能经常使用自己的传递函数类&#xff0c;如果每一个工程你都把传递函数类的.h和.cpp文件添加进去会比较麻烦&#xff0c…

java hash取余_为什么Java的hash表的长度一直是2的指数次幂?为什么这个(hash(h-1)=hash%h)位运算公式等价于取余运算?...

1.什么是hash表&#xff1f;答&#xff1a;简单回答散列表&#xff0c;在hash结构散列(分散)存放的一种数据集结构。2.如何散列排布&#xff0c;如何均匀排布&#xff1f;答&#xff1a;取余运算3.Java中如何实现&#xff1f;答&#xff1a;hash&(h-1)4.为什么hash&(h-…

java .net 3des_Java.net3DES差异及互通

主要差异如下&#xff1a;1、 对于待加密解密的数据&#xff0c;各自的填充模式不一样C#的模式有&#xff1a;ANSIX923、ISO10126、None、PKCS7、Zero&#xff0c;而Java有&#xff1a;NoPadding、PKCS5Padding、SSL3Padding2、 各自默认的3DES实现&#xff0c;模式和填充方式…

生产调度java程序原码_Rxjava的线程调度源码解析

代码调用Observable.just(1).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer() {Overridepublic void accept(Integer integer) throws Exception {}});直接进入主题&#xff0c;先看subscribe中调用了哪些方法//Observable.…

linux 触摸屏测试源码_Linux触摸屏驱动

问题二&#xff1a;echo "ac_cv_func_malloc_0_nonnullyes" >arm-linux.cache//避免检查ac_cv_func_malloc_0_nonnull若出现提示: undefined reference to rpl_malloc解决&#xff1a;发现config.h.in和config.h里定义了#undef malloc#undef realloc把这两个用//注…

java有没有number数据类型_Java基本数据类型之Number

数据类型byte&#xff1a;byte数据类型是8位、有符号的&#xff0c;以二进制补码表示的整数&#xff1b;最小值是-128(-2^7)&#xff1b;最大值是127(2^7-1)&#xff1b;byte类型用在大型数组中节约空间&#xff0c;主要代替整数&#xff0c;因为byte变量占用的空间只有int类型…