一、数据操作
1、增
#新增
insert into 表名(字段列表) values(值列表);
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );

#蠕虫复制 (优点:快速复制数据,测试服务器压力)
insert into 表名1_插入 select (字段列表) from 表名2_复制;
#当主键与表中数据重复时执行更新
insert into 表名(字段列表) values(值列表) on duplicate key update 字段1=值1,字段n=值n;
2、删除
#删除
delete from 表名[删除条件];
delete from 表名 [where条件] [order by 字段名 asc|desc] [limit];

#例如:
delete from user where age<1;--删除age小于1数据
3、修改
#修改
update 表名 set 字段1=新值1,字段n=新值n [修改条件];
update 表名 set 字段1=值1,字段n=值n [where条件] [order by 字段名 asc|desc] [limit];

#例如:
update user set age=100 where id=1;
4、单表查询
#查询
select [select选项] *|字段列表 [as 字段别名] from 表名 [where子句][group by子句][having子句][order by子句][limit子句];
select选项: 系统在查询到相关数据之后,如何显示.

select选项的两个值:all: 默认值,保留所有的查询结果、distinct: 去重,去掉重复的查询结果.

having子句是配合group by 使用的相当于where

*as
#关键字 as:可以为每个列使用别名. 适用于简化列标识,避免多个列标识符重复. 也可省略as.
#例如:
select (Math+English+Chinese) as sum from score;
#省略as
select (Math+English+Chinese)/3 avg from score;
*虚拟表的名称:dual :
Mysql中执行select语句在适当的时候会自动创建一个虚拟表,官方声明纯粹是为了满足select ... from...这一习惯问题,mysql会忽略对该表的引用。

#例如
select now() from dual;
#可省略
select now();
*where
where子句 (条件查询)

从from获得的数据源中进行查询

整型: 1表示真(返回查询记录);0表示假(不返回记录)

表达式由运算符和运算数组成.

运算数: 变量(字段)、值、函数返回值

*运算符
算术运算符

MySQL 支持的算术运算符包括:

运算符 作用
+ 加法
- 减法
* 乘法
/ 或 DIV 除法
% 或 MOD 取余
在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL。

比较运算符

SELECT 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。

符号 描述 备注
= 等于  
<>, != 不等于  
> 大于  
< 小于  
<= 小于等于  
>= 大于等于  
BETWEEN 在两值之间 >=min&&<=max
NOT BETWEEN 不在两值之间  
IN 在集合中  
NOT IN 不在集合中  
<=> 严格比较两个NULL值是否相等 两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0
LIKE 模糊匹配 通配符; _ :代表任意的单个字符; % :代表任意的字符
REGEXP 或 RLIKE 正则式匹配  
IS NULL 为空  
IS NOT NULL 不为空
逻辑运算符

逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。

运算符号 作用
NOT 或 ! 逻辑非
AND 逻辑与
OR 逻辑或
XOR 逻辑异或
位运算符

位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。

运算符号 作用
& 按位与
| 按位或
^ 按位异或
! 取反
<< 左移
>> 右移
运算符优先级

最低优先级为: :=。

最高优先级为: !、BINARY、 COLLATE。

*group by
group by 字段/别名 [排序方式] 分组后排序: asc 升序(默认),desc 降序

统计函数需配合group by使用:

count 返回不同的非NULL统计值 count(*)、count(字段)

sum 求和; max 求最大值; min 求最小值; avg 求平均值

#例如:
select count(*) as total from student;

#查询各个班级总成绩,分组班级降序.
select class, sum(score) as sum from student group by class desc;

#查询各个班级最高成绩,分数要大于80,分组班级升序.
select id,class, max(score) as max from student where score>80 group by class;
*having 子句 (条件查询)
类似where功能、用法相同,执行时机不同.

本质区别:where子句是把磁盘上的数据筛选到内存上,而having子句是把内存中的数据再次进行筛选.

where不可以使用统计函数. 一般需用统计函数配合group by才会用到having

#例如(查询各个班级最低成绩,分组班级,最低分数大于80)

#错误
select class, min(score) as min from student where min(score)>80 group by class;

#正确
select class, min(score) as min from student group by class having min(score)>80;

*order by子句 (排序)
order by 字段1[asc|desc],字段n[asc|desc]

排序: asc 升序(默认),desc 降序

#例如(查询score大于80,排序score升序和name降序)
select * from student where score >80 order by score,name desc;
*limit 子句(限制查询结果数量)
limit offset,length 语法解析: offset是指偏移量,默认为0; length是指需要显示的记录数.

分页示例说明: $page = 3;

//第三页 $pageSize = 10;

//页面显示10条记录 $offset = ($page - 1) * $pageSize;

//偏移量为20 limit $offset,$pageSize

//实现分页 偏移20,显示10

#例如(查询score大于80,排序score升序和name降序,偏移量为1,显示3条记录)
select * from student where score >60 order by score,name desc limit 1,3;
5、多表查询
*级联查询(联合查询 关键字:union)
联合查询:就是将多个查询结果进行纵向上的拼接. (select语句2的查询结果放在select语句1查询结果的后面)

#级联查询
select语句1
union [all | distinct]
select 语句2
union [all | distinct]
select 语句n
*连接查询
+交叉连接

#交叉连接 cross join(一张表的一条记录去连接另一张表中的所有记录,并且保存所有的记录包含两个表的所有的字段.结果上看,就是对两张表做笛卡尔积,有n1*n2条记录.)

select *|字段列表 from 表名1 cross join 表名2;
+内连接(如果数据不存在,不会出现在连接结果中)

数据在左表中存在,同时在右表中又有对应的匹配的结果才会被保存. 如果没有匹配上,数据没有意义不会保存. 通常就是两张表中存在相同的某个字段.(项目中通常是关联主键ID) using() 用法连接两表公共字段. 例如:using(ID)

#例如
select student.*, teacher.class as t_class, teacher.name as t_name from student join teacher on student.class = teacher.class;
查询结果

+外连接 outer join(如果数据不存在,也会出现在连接结果中.)

#左外连接 left join(如果数据不存在,左表记录会出现,而右表为null填充)
select *|字段列表 from 左表 left [outer] join 右表 on 左表.字段 = 右表.字段 [五子句];

#右外连接 right join(如果数据不存在,右表记录会出现,而左表为null填充)
select *|字段列表 from 右表 right [outer] join 左表 on 右表.字段 = 左表.字段 [五子句];

#例如
select student.*, teacher.class as t_class, teacher.name as t_name from student left join teacher on student.class = teacher.class;
查询结果

+自然连接 natural join(自动判断连接条件完成连接.)

#自然内连接 natural inner join(自然内连接其实就是内连接,这里的匹配条件是由系统自动指定.)
select *|字段列表 from 左表 natural [inner] join 右表;

#自然外连接 natural outer join(自然外连接分为自然左外连接和自然右外连接.匹配条件也是由系统自动指定.)

#自然左外连接 natural left join
select *|字段列表 from 左表 natural left [outer] join 右表;

#自然右外连接 natural right join
select *|字段列表 from 右表 natural right [outer] join 左表;
*子查询
子查询(内查询)在主查询(外查询)之前一次执行完成,子查询的结果被主查询使用. 使用子查询需用括号包裹.

#单一值: 返回单行单列的子查询,也叫标量子查询.
select max(score) as max from student;

#一列: 返回单列的子查询,也叫列子查询.
select name from student;

#一行: 返回一行的子查询,也加行子查询.
select *|字段列表 from 表名 where(字段1,字段n)=(行子查询结果)

#多行多列: 返回多行多列的子查询,也叫表子查询.
例如:(查询B班和C班,排序score字段升序)
select * from student where class in ('B','C') order by score;

#exists(主要作用就是判断后面的select语句有没有查询到数据.结果为true有返回数据,否则就是false.)

select exists (select * from student where name ='uzi');

---------------------

mysql全家桶(二)数据操作的更多相关文章

  1. mysql全家桶(四)存储过程

    一.存储过程1.介绍简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法: 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以 ...

  2. 用 Vue 全家桶二次开发 V2EX 社区

    一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...

  3. mysql笔记4之数据操作

    1修改数据 插入:insert into stu(id,name,age,addr) values(2,"李四",44,"重庆"); 2修改某一列 updata ...

  4. jQuery 源码分析(十二) 数据操作模块 html特性 详解

    jQuery的属性操作模块总共有4个部分,本篇说一下第1个部分:HTML特性部分,html特性部分是对原生方法getAttribute()和setAttribute()的封装,用于修改DOM元素的特性 ...

  5. MySQL表的创建和表中数据操作

    这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑 ...

  6. MySQL行(记录)的详细操作一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理

    MySQL行(记录)的详细操作 阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: ...

  7. MySQL(二)表的操作与简单数据操作

    六大约束:主键约束.外键约束.非空约束.唯一约束.默认约束.自动增加 1.not null非空 2.defaul默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primar k ...

  8. vue全家桶(Vue+Vue-router+Vuex+axios)(Vue+webpack项目实战系列之二)

    Vue有多优秀搭配全家桶做项目有多好之类的咱就不谈了,直奔主题. 一.Vue 系列一已经用vue-cli搭建了Vue项目,此处就不赘述了. 二.Vue-router Vue的路由,先献上文档(http ...

  9. 手把手教你全家桶之React(二)

    前言 上一篇已经讲了一些react的基本配置,本遍接着讲热更新以及react+redux的配置与使用. 热更新 我们在实际开发时,都有用到热更新,在修改代码后,不用每次都重启服务,而是自动更新.并而不 ...

随机推荐

  1. AT2705 Yes or No(组合数学)

    传送门 解题思路 首先将这个模型放到坐标轴上,\(x\)轴表示\(1\),\(y\)轴表示\(0\).问题就转化成了从\((0,0)\)走到\((n,m)\),每次可以猜测向\(x\)轴或向\(y\) ...

  2. [CSP-S模拟测试]:water(BFS)

    题目描述 有一块矩形土地被划分成$n\times m$个正方形小块.这些小块高低不平,每一小块都有自己的高度.水流可以由任意一块地流向周围四个方向的四块地中,但是不能直接流入对角相连的小块中.一场大雨 ...

  3. scrapy工作流程

    整个scrapy流程,我们可以用去超市取货的过程来比喻一下 两个采购员小王和小李开着采购车,来到一个大型商场采购公司月饼.到了商场之后,小李(spider)来到商场前台,找到服务台小花(引擎)并对她说 ...

  4. python中实现查找字符串的find函数

    第五题:自己实现一个字符串的find函数1.在一个字符串中查找另一个字符串2.找到了返回第一次出现的位置3.没找到返回-14.参数s1为源字符串,参数s2为要查找的字符串 def index_of_s ...

  5. Python进阶:多线程、多进程和线程池编程/协程和异步io/asyncio并发编程

    gil: gil使得同一个时刻只有一个线程在一个CPU上执行字节码,无法将多个线程映射到多个CPU上执行 gil会根据执行的字节码行数以及时间片释放gil,gil在遇到io的操作时候主动释放 thre ...

  6. 【原】webpack--loaders,主要解释为什么需要loaders和注意事项

    Why需要loaders? webpack开箱即用只支持JS和JSON两种文件类型,但是比如css.less,还有目前市场上比较新的语法糖jsx,怎么处理呢? 通过Loaders去支持其他文件类型并且 ...

  7. C++中若类中没有默认构造函数,如何使用对象数组

    前言: 如果定义一个类,有其默认的构造函数,则使用new动态实例化一个对象数组,不是件难事,如下代码: #include <memory> #include <iostream> ...

  8. Linux-文件系统概述

    主要对外部存储设备: 分区与格式化原理: IDE: /dev/hda 第一块硬盘 ……/dev/hdn    /dev/hda1 第一块硬盘的第一个分区  第n块IDE硬盘 SCSI:/de/sda ...

  9. fpm rpm制作

    使用fpm命令制作rpm包并安装 工作中有如下情况需要将文件打包rpm: 避免重复工作,将源码程序打包为rpm 使用yum发布项目,项目打包为rpm 将自己写好的程序打包为rpm,提供给用户下载 其他 ...

  10. 不要62(数位dp)

    题目传送门 不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...