mysql全家桶(二)数据操作
一、数据操作
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全家桶(二)数据操作的更多相关文章
- mysql全家桶(四)存储过程
一.存储过程1.介绍简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法: 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以 ...
- 用 Vue 全家桶二次开发 V2EX 社区
一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...
- mysql笔记4之数据操作
1修改数据 插入:insert into stu(id,name,age,addr) values(2,"李四",44,"重庆"); 2修改某一列 updata ...
- jQuery 源码分析(十二) 数据操作模块 html特性 详解
jQuery的属性操作模块总共有4个部分,本篇说一下第1个部分:HTML特性部分,html特性部分是对原生方法getAttribute()和setAttribute()的封装,用于修改DOM元素的特性 ...
- MySQL表的创建和表中数据操作
这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑 ...
- MySQL行(记录)的详细操作一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理
MySQL行(记录)的详细操作 阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: ...
- MySQL(二)表的操作与简单数据操作
六大约束:主键约束.外键约束.非空约束.唯一约束.默认约束.自动增加 1.not null非空 2.defaul默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primar k ...
- vue全家桶(Vue+Vue-router+Vuex+axios)(Vue+webpack项目实战系列之二)
Vue有多优秀搭配全家桶做项目有多好之类的咱就不谈了,直奔主题. 一.Vue 系列一已经用vue-cli搭建了Vue项目,此处就不赘述了. 二.Vue-router Vue的路由,先献上文档(http ...
- 手把手教你全家桶之React(二)
前言 上一篇已经讲了一些react的基本配置,本遍接着讲热更新以及react+redux的配置与使用. 热更新 我们在实际开发时,都有用到热更新,在修改代码后,不用每次都重启服务,而是自动更新.并而不 ...
随机推荐
- SSM + MySQL批量删除操作
最近项目中有个购物车功能需要能够选中商品,然后批量删除的操作,也可以单个删除,其实代码很简单就能实现. 这里需要注意的就是你前端是怎么传值的,我这里采用的数组的形式,用 ‘,’隔开. 然后控制层代码如 ...
- 如果遇到找不到元素如何处理? Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"investmentframe"}
常见几种原因与应对,详细参见http://www.blogjava.net/qileilove/archive/2014/12/11/421309.html 1,动态ID无法找到,用xpath路径解决 ...
- 高并发之CAS机制和ABA问题
什么是CAS机制 CAS是英文单词Compare and Swap的缩写,翻译过来就是比较并替换 CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B. 看如下几个例子: pac ...
- HTML创建文本框的3种方式
我的第一个随笔,记录主要用来整理学习的知识点 1.input 创建单行文本框 <input type="text" size="10" maxlength ...
- 【题解】Beads
题目描述 Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数, ...
- HDU 6464 /// 权值线段树
题目大意: 共Q次操作 操作有两种 操作一 在序列尾部加入f[i]个s[i] 操作二 查询序列第f[i]小到第s[i]小之间的总和 离线操作 把序列内的值离散化 然后利用离散化后的值 在线段树上对应权 ...
- java虚拟机规范(se8)——class文件格式(六)
4.7.4 StackMapTable 属性 StackMapTable 属性是一个变长属性,位于 Code(§4.7.3)属性的属性表中.这个属性会在虚拟机类加载的类型阶段(§4.10.1)被使用. ...
- Https socket 连接
介: 本文主要介绍了网络安全通讯协议 SSL/TLS 和 Java 中关于安全通讯的实现部分.并通过一个简单的样例程序实现,来展示如何在 Java 平台上正确建立安全通讯. 在人类建立了通信系统之后, ...
- MyBatis中XML 映射配置文件的简单介绍
官网写的比较具体,可以查看以下的网站: http://www.mybatis.org/mybatis-3/zh/configuration.html 另外,实际用到标准的CRUD的操作和查询列表, & ...
- element checkbox 勾选时出现弹框提示。
复选框选中的时候,必须提示是否确定选中,取消勾选的时候也要. 不能解决的思路: 1.element的checkbox只有一个change事件,该事件只返回该选项最新的值(true,false)(不会返 ...