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的配置与使用. 热更新 我们在实际开发时,都有用到热更新,在修改代码后,不用每次都重启服务,而是自动更新.并而不 ...
随机推荐
- Aspect-Oriented Programming : Aspect-Oriented Programming with the RealProxy Class
Aspect-Oriented Programming : Aspect-Oriented Programming with the RealProxy Class A well-architecte ...
- 103、Linux 编译 Kaldi 语音识别工具
由于这个开源的语音识别工具Kaldi只能在Linux下面成功编译, 所以这一小节来写如何成功地在Linux下面编译Kaldi工具 (1)第一步,去github 上面把 Kaldi下载下来 git cl ...
- [MAC]配置Jenkins 开机自启动
如果是将jenkins.war放在tomcat中运行的, 则可以配置开机启动tomcat,脚本如下: XXX表示是你安装Tomcat所在目录 #启动tomcat cd XXX/Tomcat8/bin ...
- 测开之路五十六:实现类似unittest的断言
import inspect class Case(object): """ 实现断言 """ def __init__(self): se ...
- c# 读取和写入excel数据
1. 读取 DataTable GetDataFromExcelByConn(bool hasTitle = false){ OpenFileDialog openFile = new Open ...
- Java程序的设计环境配置
一.下载主要的开发工具 JDK的下载 www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Ecli ...
- Cocos2d Box2D之静态刚体
| 版权声明:本文为博主原创文章,未经博主允许不得转载. b2_staticBody 在模拟环境下静态物体是不会移动的,就好像有无限大的质量.在Box2D的内部会将质量至反,存储为零.静态物体也可 ...
- 什么是中间件?中间件和java应用关系是什么
中间件,比如websphere 是一种独立的系统软件,你的java应用要通过它来管理,比如数据库连接,消息通信等,中间件位于操作系统之上.简单滴说,你不可能直接把你的java应用部署在操作系统上,得由 ...
- lr 计算字符串长度
sizeof求后面的内容or表达式所占用的字节数 strlen求字符串的有效长度,只要遇到'\0'就认为字符串结束 字符串转化为int型变量 Action2() { int j = 0; j = at ...
- shell脚本对代码执行时间的计时
时间秒: $(date +%s) 算数表达式: $(($cost_time/60)) $(($cost_time%60)) #!/bin/bash # ccache is from epel mirr ...