MYSQL 高级语法
1.高级建表和插入
使用creat 和select 进行建表操作,中间采用AS 标识符;
CREATE TABLE new_table
AS
SELECT *
FROM exist_table
LIMIT ;
从一个表中复制列插入到指定的表中:
INSERT INTO table2
SELECT * FROM table1;
2.select 子查询
子查询就是一个select 语句作为另一个查询语句的输入值,主要分为以下三种情况:
- 出现在where 语句处 的子查询语句,作用是作为过滤的条件来使用;
Select 列名
From 表名
Where 列 操作符 (Select 列名 From 表名) ******使用注意:
(1)子查询语句必须针对一个字段进行查询操作,否则抛错:Operand should contain 1 column(s - 出现在from 语句处的子查询语句,作用是作为一个临时的表进行查询;
Select 字段
from (select * from 表名)as 别名 *********此处的使用注意:
(1)子查询在from 语句之后,其实就是生成了一个临时表,所以子查询可以查询多个字段;
(2)子查询 在from 之后的时候,必须要对表取一个别名进行使用 - 出现在Select list 语句处的子查询语句,作用是作为一个字段值进行返回;
select 字段1,(select 字段2 from 表名)
from 表名 ***********此处的使用注意:
(1)子查询语句必须针对一个字段进行查询操作,否则抛错:Operand should contain 1 column(s)
(2)子查询语句返回的必须是一行数据,否则抛错:Subquery returns more than 1 row
3.多表操作
- 行合并操作
格式:
select *
from 表A
union (union All)
select *
from 表B; ******使用注意:
()操作合并的两个表,必须是字段或者列数相同;
()union 对表做合并操作的时候,会进行去重操作;
()union all 对表做合并操作的时候,不会进行去重操作;
()使用合并操作的时候,不能进行order by操作,如果需要进行排序操作,可以在合并表结束后,使用子查询的方式,进行order by 操作;
4.行结合 Join :
SQL 的join 子句基于多个表之间的相同字段,进行表之间的行结合操作,主要分为Left Join,Right Join ,Inner Join ,Full Outer Join四种,以下为这四种操作描述:
- INNER JOIN:Join 操作的默认操作(使用Join 即可表示Inner Join ),如果关键字在表中存在一个匹配的时候,则返回行;
- LEFT JOIN:左表返回所有行,右表进行匹配,如果有匹配值,则返回对应的字段值,如果没有匹配值,则全部置为Null 值;
- RIGHT JOIN:与Left Join 操作相反,右表返回所有行,左表进行匹配,如果有匹配值,则返回对应的字段值,如果没有匹配值,则全部置为Null 值;
- FULL Outer JOIN:关键字只要左表和右表其中一个表中存在匹配,则返回行,它结合了 LEFT JOIN 和 RIGHT JOIN 的结果;

注意事项:
)多表关联的核心原理在于笛卡尔积,参考文章(https://www.cnblogs.com/nick-huang/p/4919178.html#my_inner_label1);
)多表关联可能会导致数据的重复,也就是在建立关联时的 :,:N,N:N 的形式,所以需要注意数据的去重工作,要先处理每个表的数据,再进行关联操作;
5.MySql 变量
- 变量的使用场景:
)代码中很多地方都会重复用到同一段代码;
)每次重新使用代码的时候,可能只需要修改某些参数即可;例如:时间,区域
)构建一个标识字段,帮助做数据分析判别。例如:对某类型字段进行排序分析; - 变量的定义规则:
)变量声明: 使用@变量名;
)变量命名组成元素可以是:字母、数字、下划线、‘.’ 、'$'几种元素;
)变量的赋值:
使用: set @变量名 =value;
使用: set @变量名 :=value;
使用: select 方式赋值:select @变量名:=value;(注意:该种方式声明变量只能使用‘:=’进行,因为在select 语句中 ‘=’会被认为是比较操作符)
)变量的使用:直接调用变量名即可;
**********注意:
变量的声明属于会话级别,所以变量在SQL 定义完成并执行后才会有,变量无法指定变量的类型,是在赋值的时候自动推断变量的类型;
MYSQL 高级语法的更多相关文章
- mysql 高级语法手记
Select字段时: CASE WHEN type=1 THEN 1 ELSE 0 END as type1 sum和count同样可以使用case then 时间戳转时间: FRO ...
- mysql高级排序&高级匹配查询示例
在大多数应用场景下,我们使用mysql进行查询时只会用到'=', '>' , '<' , in, like 等常用的方法,看起来,大多数情况下,已经足以应付我们的小型应用了.不过,在一些特 ...
- Mysql高级之触发器
原文:Mysql高级之触发器 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete). 看以下事件: 完 ...
- Mysql高级之游标
原文:Mysql高级之游标 什么是游标?select 语句也许一次性会取出来n条语句,那么游标便可以一次取出来select中的一条记录.每取出来一条,便向下移动一次!可以实现很复杂逻辑! 上面还有有一 ...
- 第四章 MySQL高级查询(二)
第四章 MySQL高级查询(二) 一.EXISTS子查询 在执行create 或drop语句之前,可以使用exists语句判断该数据库对像是否存在,返回值是true或false.除此之外,exists ...
- 第三章 MySQL高级查询(一)
第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1. DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSE ...
- MySQL高级知识(三)——索引
前言:索引在sql调优部分占据着重要的位置,了解并深入索引对我们来说也是非常重要的.本篇主要介绍MySQL中索引的相关知识点. 1.索引是什么 MySQL官方对索引的定义:索引(Index)是帮助My ...
- mysql高级、索引
一.mysql高级 1.视图 # 引子 select * from emp left join dep on emp.dep_id = dep.id union select * from emp r ...
- MYSQL基础语法的使用
喜欢的朋友可以关注下,粉丝也缺. MYSQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之 ...
随机推荐
- Qt的诞生和本质
有没有发现,在这个主函数里面没有了消息循环了.消息循环到哪里去了呢? 我们知道,每个GUI应用程序都有消息循环,一般都需要将消息循环while那个函数写到main的最后位置.那既然如此,为了代码复用, ...
- 为什么有的插件安装需要用Vue.use()方法
问题 相信很多人在用Vue使用别人的组件时,会用到 Vue.use() .例如:Vue.use(VueRouter).Vue.use(MintUI).但是用 axios时,就不需要用 Vue.use( ...
- js获取input checkbox的选中值
HTML代码: <form action="/test/action" method="get"> <input type="che ...
- 查看Linux服务器CPU总核数
下面介绍查看Linux服务器CPU总核数的方法. 通过/proc/cpuinfo可查看CPU个数及总核数. [root@kevin ~]# grep processor /proc/cpuinfo | ...
- 多进程操作-进程队列multiprocess.Queue的使用
一.ipc机制 进程通讯 管道:pipe 基于共享的内存空间 队列:pipe+锁 queue 下面拿代码来实现Queue如何使用: 案例一: from multiprocessing import Q ...
- 基于STM32F429的内存管理
1.内存管理介绍 内存管理,是指软件运行时对计算机内存资源的分配和使用的技术.其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源. 内存管理的实现方法有很多种,他们其实最终都是要 ...
- (五十六)c#Winform自定义控件-瓶子(工业)-HZHControls
官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...
- Netty服务端Channel的创建与初始化
Netty创建服务端Channel时,从服务端 ServerBootstrap 类的 bind 方法进入,下图是创建服务端Channel的函数调用链.在后续代码中通过反射的方式创建服务端Channel ...
- JMeter压测“java.net.SocketException: Socket closed”解决方法
报错详情: java.net.SocketException: Socket closed at java.net.SocketInputStream.socketRead0(Native Metho ...
- CAD简易口诀,保你一天就记住!零基础也能轻松学!CAD制图宝典!
如何才能快速的学习CAD制图呢?不仅仅需要多练习,CAD口诀也是不能错过的哦!实用干货这一个就够了快点收藏起来! 1.创建直线的快捷方式是L+空格 2.创建圆的快捷方式是C+空格 3.创建圆弧的快捷方 ...