MySQL开发——【高级操作、五子句】
高级新增操作
①基本插入操作:
insert into 数据表名称(字段) values (值);
②批量插入操作:
insert into 数据表名称(字段) values (值1),(值2),(值3)...
③主键冲突
解决主键冲突的方法一共有两种形式:
第一种方案:
insert into 数据表名称values (1,’e’) on duplicate key update 字段 = 字段值;
第二种方案:基本语法:
replace into 数据表(字段) values (值);
如果数据表中不存在这条记录,则添加。
如果数据表中存在这条记录,则更新。
但是要特别注意,虽然replace方法比较简单,但是其效果并不高。
④蠕虫复制
蠕虫:就是一种会分裂的小虫子。所谓的蠕虫复制就是采用这样一种复制方式。
基本语法:
复制表结构:
create table数据表名称 like ‘数据表’;
以上语句只能复制数据表的表结构,而不能复制数据。
insert into 数据表(忽略主键) select 字段 from 数据表;
以上代码就是蠕虫复制,蠕虫复制得到的结果其实是没有意义的。蠕虫复制的主要目的是测试数据库的承载能力、性能等等
高级删除操作
①基本语法:
delete from 数据表名称; //删除所有记录
delete from 数据表名称 where 删除条件; //删除指定的记录
②清空表,基本语法:
truncate数据表名称; //清空表
delete from 数据表与truncate 数据表之间的区别:
两者虽然都是删除数据表中的所有记录,
但是两者不同在于对于数据结构中的自动增长处理不同,
truncate会重新创建表结构,
auto_increment字段会从1重新开始编号。
truncate效果:数据会重新从1开始:
delete from 效果:数据会在最后一条记录的基础上,继续编号:
③高级删除操作(order by|limit)
order by|limit基本语法:
order by 字段[asc|desc] :对某个字段进行排序,asc代表升序,desc降序。
limit[num]:指定要删除的数量,limit语句在SQL语句中是放在最末端的。
delete from 数据表名称 where 条件 order by 字段 [asc|desc] limit 5;
高级更新操作
基本语法:
update 数据表名称 set 字段=字段值[,字段=字段值] where 更新条件;
高级更新:
order by 字段 [asc|desc] :对记录进行按某个字段进行排序
limit [num] :更新多少条记录
高级查询操作
①SQL语句中的五子句,基本语法:
select */字段 from 数据表 where [条件] group by [分组条件] having[条件] order by 字段 [asc|desc] limit [offset,length]
offset:偏移量,值默认从0开始
② where子句
第一种情况:运算符
算术运算符:>< = <>(不等于) != >= <=
逻辑运算符:and(&&) or(||) 非(!)
布尔运算符:is null,is not null
第二种情况:in与not in(重点),基本语法:
select* from 数据表 where id in (1,2,3); //同时查询多条记录
delete from 数据表where id in (1,2,3); //同时删除多条记录
第三种情况:between...and...或not between...and...
使用between...and...有一个基本要求,between后面的值一定要小于and后面的值,而且两者是一个闭区间。
选择年龄在18周岁-20周岁之间的小伙伴。
基本语法:
select * from 数据表名称 where age between 18 and 20;
③all与distinct(去重)
④like模糊查询
like在实际应用中,主要用于数据的搜索,like语句里面有两个匹配符:
% :匹配任意个字符
_ :只能匹配一个任意字符
特殊情况,如果要查询的关联词中包含%或_怎么办呢?答:使用\反斜杠进行转义。
③group by子句
基本语法:
select * from 数据表 group by 字段;
group by的主要功能就是实现对数据的分组功能。
select * from student group by sex;
如以上代码运行可知,如果仅仅使用group by对某个字段进行分组操作,则其每个组只会返回一条记录。
分组的意义在于实现对数据进行统计,可以使用如下函数:
count(*/字段) :获取数据表中的总记录数
max(字段) :获取某个字段的最大值
min(字段) :获取某个字段的最小值
avg(字段) :获取某个字段的平均值
sum(字段) :获取某个字段的和
表别名与字段别名(主要针对多张表)
表别名,基本语法:
表别名:
select */别名.字段 from 数据表1 as 别名;
或
select */别名.字段 from 数据表1 别名;
字段别名,基本语法:
字段别名:
select count(*) as 字段别名 from 数据表;
或
select count(*) 字段别名 from 数据表;
字段别名的作用有二:
第一点:给字段起一个更有意义的名字,比如count(*)起名为num。 第二点:如果多表关联,出现同名字段,后面的会覆盖前面的,所以这个时候可以给冲突字段起别名。
count函数与null
在实际应用中,如果count(*),代表统计所有记录。但是count函数还可以只统计某个字段的总记录数,但是在统计时会自动忽略null记录。
group by结合统计函数
基本语法:
select 分组字段,统计函数(*/分组字段) from 数据表 group by 字段;
select sex,count(*) from student group by sex;
④having子句
having子句与where子句功能是一致的,都是用于实现对数据的筛选。
两者的唯一区别在于发生的顺序不同。
where子句:在数据表中就对数据进行筛选,不需要进入内存。 having子句:在数据进行到内存之后(比如group by),才对数据进行筛选。
在MySQL中,如果没有特别的要求,只是简单的筛选操作,having与where子句可以相互替换。
①对于字段别名的处理不同(having可以通过别名字段对数据进行筛选,但是where不行) ②对于统计函数与group by的处理不同(having可以处理统计函数,但是where不行)
⑤order by子句
order by就是实现对某个字段或多个字段进行排序,有两个排序参数。asc升序,desc降序。
基本语法:
select * from 数据表 order by 字段 [asc|desc];
默认采用asc升序排列。
order by与多字段排序,基本语法:
select * from 数据表 order by 字段1 [asc|desc],字段2 [asc|desc],字段3 [asc|desc]... ;
系统首先对 字段1 进行排列,
如果两个字段的字段1值相同。则对 字段2 进行排序,
如果两个字段的字段2值相同。则对 字段3 进行排序,
这就是多字段的执行顺序。
⑥limit 子句
基本语法:
select * from 数据表 limit [offset,length];
offset :代表从哪条记录开始,默认从0开始
length :代表获取的总记录数
特别说明:
高级查询时,limit拥有以上两个参数,但是高级更新与高级删除时,其只有一个length参数,而没有offset偏移量。
分页的原理就是limit
①数据表中一共有99台电脑
②每页显示10台,多了就分页
③使用limit实现数据分页(读取每一页的数据)
④offset与页码之间有什么关系呢?
第一页:offset从0开始,length是10
第二页:offset从10开始,length是10
第三页:offset从20开始,length是10
...
第十页:offset从90开始,length是10
推导一下:offset与页码之间的关系,(当前页码 - 1)* length
⑦group by补充两个知识点
group_concat函数
把获取的记录数拼接成字符串。
PHP把数组转化为字符串implode函数,PHP把字符串转化为数组explode函数。
explode(‘炸开点’,‘要炸开的字符串’);
回溯统计with rollup(分组后的数据汇总)
回溯统计就是把分组后的结果进行汇总,得到最终的结果。
MySQL开发——【高级操作、五子句】的更多相关文章
- MySQL 数据库高级操作 (配图)
MySQL数据库高级操作 1.一键部署mysql 数据库 2.数据表高级操作 3.数据库用户管理 4.数据库用户授权 1.首先一键部署mysql 数据库 : 可以看我之前的博客 https://www ...
- SpringMVC整合Mongodb开发,高级操作
开发环境: 操作系统:windows xpMongodb:2.0.6依 赖 包:Spring3.2.2 + spring-data-mongodb-1.3.0 + Spring-data-1.5 + ...
- MySQL之高级操作
新增数据: 基本语法: insert into 表名 [(字段列表)] values(列表值) 在数据插入的时候,假设主键对应的值已经存在,插入一定会失败 主键冲突: 当主键存在冲突的时候(Dupl ...
- mysql的select的五子句
转: http://www.cnblogs.com/billyu/p/5033167.html http://www.cnblogs.com/xiadong90-2015/p/4222965.html ...
- Java+selenium之WebDriver的cookie,等待等高级操作(五)
1. 操作cookie // 增加一个 name = "name",value="value" 的 cookie Cookie cookie = new Coo ...
- MySQL学习笔记_10_MySQL高级操作(下)
MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table ...
- MySQL<数据库的高级操作>
数据库的高级操作 MySQL提供了一个mysqldump命令,它可以实现数据的备份 数据的备份 1.备份单个数据库 mysqldump -uusername -ppassword dbname [tb ...
- python数据库-MySQL数据库高级查询操作(51)
一.什么是关系? 1.分析:有这么一组数据关于学生的数据 学号.姓名.年龄.住址.成绩.学科.学科(语文.数学.英语) 我们应该怎么去设计储存这些数据呢? 2.先考虑第一范式:列不可在拆分原则 这里面 ...
- MySQL学习笔记_9_MySQL高级操作(上)
MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1; #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...
随机推荐
- OpenLDAP一登录系统就修改密码
1:修改配置文件 在前面打开注释 moduleload ppolicy.la modulepath /usr/lib/openldap modulepath /usr/lib64/openldap ...
- Java虚拟机的内部体系结构
1.Java程序执行流程 Java程序的执行依赖于编译环境和运行环境.源码代码转变成可执行的机器代码,由下面的流程完成: Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行. ...
- 1.1.25 word图片批量对齐
1.打开文件,点击[开始]>[编辑]>[替换](或ctrl+h)> \ 在[查找内容]输入^g>定位到[替换为]>[格式]>[段落]>[对齐方式|居中]> ...
- httpd基础知识
apache简介 Apache取自"a patchy server"的读音,意思是充满补丁的服务器.Apache起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发 ...
- dubbo 熔断,限流,降级
1 写在前面 1.1 名词解释 consumer表示服务调用方 provider标示服务提供方,dubbo里面一般就这么讲. 下面的A调用B服务,一般是泛指调用B服务里面的一个接口. 1.2 拓扑图 ...
- mysql 远程备份
#远程备份./innobackupex --defaults-file=/etc/my.cnf --no-timestamp --user xxx --host 192.168.1.123 \--pa ...
- write(6)、write(10)和write(16)以及read(6)、read(10)和read(16)的区别与应用
大家知道,我们读写硬盘的时候发送的命令为SCSI READ或SCSI WRITE.即SCSI读和SCSI写命令.但是READ和WRITE有很多种,这些命令的应用场合是什么呢? 最重要的一点就是,这是跟 ...
- 6.8 出口条件循环:do while
while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容.C语言还有出口条件循环(exit-condition loop),即在循环的每次迭代 ...
- redis5.0.4 集群搭建
准备工作用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-5.0.4 版本. 两台虚拟机都是 CentOS ,一台 CentOS ...
- CIF 搜索逻辑
test code #include <cstddef> class CIF { }; template <typename OBJ> class CList { public ...