网站建设硬件方案,seo推广费用,怎么建设网站是什么,google地图嵌入网站目录
一 插入
1 基本语法
①全列插入
②指定列插入
③多条记录插入
④冲突更新
二 查询 查询全部数据 指定列查询
显示
拼接
取别名
去重查找
where
逻辑运算符和比较运算符
结果排序
Limit
group by 分组
聚合函数 对于count 对于sum
对于group by 相关的语…目录
一 插入
1 基本语法
①全列插入
②指定列插入
③多条记录插入
④冲突更新
二 查询 查询全部数据 指定列查询
显示
拼接
取别名
去重查找
where
逻辑运算符和比较运算符
结果排序
Limit
group by 分组
聚合函数 对于count 对于sum
对于group by 相关的语法细节 ①如果有多个分组条件 ②关于显示 ③关于分组后筛选
关于执行顺序
三 UPDATE 更新
四 DELETE/TRUNCATE 删除
DELETE
语法
注意
TRUNCATE 一 插入
1 基本语法
先创建一个表之后插入 有几种写法可以基本分类成是否带上列名是否是多条记录插入是否有冲突更新
①全列插入
不带列名默认是一一对应的全列插入
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
示例 全插入的话自增的值也是要指定的 ②指定列插入
带上列名默认插入的值是和自己指定的列名的顺序一一对应
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...); 可以省略自增的值 注意 此时如果默认省略了列名进行全列插入的话不能够省略自增字段的值不会自动更新 此时如果指定了列名进行插入的话可以省略自增长的值会自动补充 ③多条记录插入 在上述两种插入的基础上增加新的记录
INSERT INTO table_name
VALUES (value1, value2, value3, ...)(value1, value2, value3, ...)(value1, value2, value3, ...);
或者
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...)(value1, value2, value3, ...)(value1, value2, value3, ...)④冲突更新
冲突理解
如果表中已经存在的主键或者唯一键和我要插入的值是一样的此时就发生了冲突如果发生冲突的话mysql就会直接进行拦截不允许该信息的插入。
本质插入冲突是因为我们之前存在相同的值如果不想让操作失败的话可以先进行更新再插入。
其实就是一种替换可以选择删除之前的数据再插入新的值。但是主键和唯一键不被修改其他的被修改
语法
INSERT INTO ……
ON DUPLICATE KEY UPDATE column values [,column value]…… 其实replace可以替换掉上述的语句两者的意思是一样的 示例
有冲突并且冲突值不一样
有冲突但是冲突值和之前是一样的
没有冲突直接插入 和replace是一样的
影响 此时分为几种情况 ①插入的时候无冲突直接插入一行受影响-----》只有自己插入的这一行受影响 ②插入的时候发生键值冲突了但是冲突的值和之前的是一样的此时0行受影响 ③插入的时候发生键值冲突了并且冲突的值不一致这时候就会删除之前的然后插入新的假设之前只有1行记录冲突那么就是两行受影响 二 查询 在一个数据库内做一个表的组合查询
语法
SELECT
{* | 字段列名}
[
FROM 表 1, 表 2…
[WHERE 表达式
[GROUP BY group by definition
[HAVING expression [{operator expression}…]]
[ORDER BY order by definition]
[LIMIT[offset,] row count]
]
先来简单介绍一下这些意思
from就是要指明在哪些表中进行查找
where的话设定对应的查询条件通过逻辑运算符或者算数运算符进行设置
order by的话是排序的意思有升序和降序默认是升序
limit的话是筛选出指定行。我们可以和order by搭配使用这样的话就可以选出符合条件的前几条或者最后几条数据 演示一下对应的操作先创建一个表并且插入数据做准备 1 查询全部数据
后面不带任何的筛选条件就是查询所有的数据。但是这样的话如果对于数据量非常大的表来说的话数据量非常大而且筛选不出符合自己条件的。 指定列查询
可以只查询自己关心的列。但是也是所有数据的。 显示
我们在查询列的时候显示结果是跟着自己的指定列的而非创建表的时候的顺序 拼接
我们查找的时候还可以拼接常数或者计算式或者字符串 取别名
as 取别名 取别名的时候也可以不加as 去重查找
规则要根据对应查找的内容整体来判断的 比如这里根据名字和数学成绩一起去重虽然数学成绩有重复的但是名字是没有重复的也没有数据被筛选掉都被看成不重复的 这样才会去重 where
主要使用两大类运算符来进行筛选
逻辑运算符和比较运算符
以下是比较运算符的种类
运算符说明 大于 大于等于 小于 小于等于等于 不能对NULL运算等于 可以用来比较NULL! , 不等于BETWEEN AND闭区间内的一个值INoption1option2……如果是option中的任意一个就可以返回TRUEIS NULL是NULLIS NOT NULL不是NULLLIKE模糊匹配 %匹配多个 _匹配一个
,,,一般来说是可以来比较整数或者浮点数的大小的 比如这个语句就筛选出了薪水大于1000的 除了比较数字之外还可以用来比较字符串但是不能对NULL进行比较 注意mysql中的等于是而非语言中的 对于NULL值的运算可以使用 或者 IS NOTNUL 注意null值和空串的区分 对于空串是可以使用 进行筛选出来的但是null的话只能使用 或者ISNOTNULL运算 ‘ ’表示的是空串他是个字符串类型只不过内容是空的 NULL一般不参与计算这个运算符只能比较存在的数据因此对于这个不存在的NULL不能进行比较 查找一个区间内的数字
一般整数和浮点数才能进行查找
比如筛选出工资在1000到2000的 这个其实和这个查找语句是等同的 查找在一个集合内的
成功找到就返回1找不到就返回-1 也可以查看某一条记录的某个数据是否在集合范围内 模糊匹配
%多个匹配
-一个匹配
查找以A开头的姓名的人的所有信息 查找姓名中有A的 逻辑运算符
这个是用来连接多个条件的有时候查询条件可能不止符合一个
运算符注释AND多个条件都必须为真才为真OR任意一个条件为真就可以为真NOT如果为真结果就是假 其他的使用也是类似的 需要注意的是最终结果的显示和查找的条件中的列数可以不相等。比如想查找符合某条件的但是最终显示的时候不显示对应列也是可以的
比如这个查找的对应工资要大于1000的但是最后只显示工资大于1000的人的对应的姓名 结果排序
我们可以对查找的结果按照某些顺序进行排序比如可以按照薪资的多少进行排序默认是升序如果我们想按照降序排列带上des 排序不是筛选条件是显示条件 这里一些sal相同的也有顺序其实是因为这个排序是以排序的关键字为key值进行排序把整条记录都进行排序了。
对于NULL的话默认是最小的如果是升序排序就出现在最上面降序排序就出现在最下面 Limit
如何查找符合某些条件的前几名
这样就选出了工资最少的前三名 也可以指定一个区间起始下标从0开始 利用这个条件筛选可以实现分批取出数据的目的一页limit多少数据这一页放不下就放到下一页 group by 分组
在讲这个的时候引入聚合函数的概念。因为聚合函数一般都是和group by搭配使用的
聚合函数
mysql内部本身就挺了一些数据库的函数以供我们使用。 对于聚合函数的理解 聚合函数是直接或者简介对列的数据进行统计。由于是列的数据那么就具有相同的属性。换句话说相同属性的就具有了聚合函数统计的前提 并且由于是列统计那么对于一个表的数据进行统计一定是一行或者多行的一批数据 总结对列具有相同属性 对于一批数据 函数注释COUNT返回查询到的数据的数量SUM返回查询到的数据的总和必须是数字AVG返回查询到的数据的平均值必须是数字MAX返回查询到的数据的最大值必须是数字MIN返回查询到的数据的最小值必须是数字
对于count
想查询有多少条记录 也可以进行重命名 其他的写法
所有的记录* Select 1的时候其实已经把所有的数据都筛选出来了只不过显示的时候只显示1
这样我们有多少条记录就有多少个1。 注意直接筛选的时候null是不参与运算的也要注意‘ ’为了避免空串的统计可以在条件中设置 去重
如果不想统计的数据中有重复的我们就可以使用这个进行去重 执行的时候先去选出符合条件的不重复的数据之后再进行统计是比较好的如果先统计再计算的话不符合要求去重之后还需要再次统计没意义
如果是distinct countmath的话是先去统计math的已经统计了重复的。之后选出数据之后再去重只不过此时不显示这样的话我们看到的是7统计没去重的
如果是countdistinct math的话 是要先对count内部的math做去重之后再进行统计
总结count的话是先执行count内的
count都是先有最后的结果数据再统计的 对于sum
也是差不多的可以计算总和总和计算出来之后可以计算平均值 这个相当于 同理其他的聚合函数也是这么使用的
都是遍历列之后聚合的 对于group by
对指定列分组查询。
之间我们select查询的时候都是将数据作为一个整体来查询的。其实mysql也可以支持按照指定的列对数据进行分组在分组的数据中操作。
比如可以查找某个部门的最高最低工资平均工资 group by和聚合函数搭配使用执行的顺序是先去执行group by对结果进行分组之后再去每一组里面进行聚合。如果先执行聚合的话是对所有数据的而非组的。
比如上面的就是先按照部门把人分出来之后在每一个部门里面分别查找最高最低和平均的工资 相关的语法细节
①如果有多个分组条件
比如这个按照部门和工作进行分组就是先对部门进行分组再在部门内部根据工作进行分组 其实相当于一棵多叉树的结构先按照一个分组的依据分成一个一个的小表之后再在小表的内部继续分。 ②关于显示
只有group by作为分组条件的列之后在显示的时候才能够显示出来。比如我这里显示想显示部门号和工作但是我在输入分组条件的时候没有把工作作为分组的依据因此就不能 ③关于分组后筛选
由于where筛选的时候是先有对应的条件才会去对数据进行筛选但是聚合函数是先有了对应的数据才会去聚合分组。因此where后面是不能够带上group by的
如果想对group by的结果进行筛选的话应该需要使用having语句 这里是对group by分组出来的数据再进行having条件的筛选 总结 group by的话一定会和聚合函数搭配使用统计 如果需要对分组后的条件再进行筛选的话需要用having语句进行筛选。只有group by才使用having having与where的区别 where对数据进行初筛having 对where筛选和group by分组之后的数据再次进行筛选 where的话执行语句是比较靠前的是在分组之前先按照where的条件进行筛选符合条件才会进入group by 的having having之前通常有聚合函数统计和group by分组 举例子比如我需要筛选出工资1000的人在这条件之下按照部门分组平均工资2000的人的相关信息 ①先去from emp找到对应的表的数据
②where 对表的数据进行筛选
③group by分组
④avg聚合
⑤对这样分组和聚合的数据进行 having条件筛选 关于执行顺序
where条件设置的时候吗是按照这样的一个逻辑来查找数据的
①我们先要去找到对应的表因此是from先找到表
②之后利用where进行数据的筛选
③group by分组以便执行聚合函数和having
④执行聚合函数如果之后有having筛选条件在having最后显示的时候筛选
⑤这样我们就完成了对应的条件的筛选再去执行select找出符合的对应的列
⑥有了这样的数据才会知道有没有重复的再去考虑distinct去重
⑦最后order by排序因为还有一个limit是要在所有的数据都执行的差不多了的情况下才会去找出对应的几条数据 from -》where-》group by -》聚合函数-》having -》 select -》 distinct-》as-》order by -》limit 我们可以这样分类了之后去理解有两类查询where和having。与where相关的先用红色标出橙色的也属于红色只不过select后面可以重命名和去重比较特殊单独再拎出来
我们执行的时候先去执行where的执行条件再去看having的
要执行where必须有数据数据从表来因此最开始from
from找得出数据后就可以where先进行一轮筛选筛选的数据如果还需要分组等的筛选就去执行蓝色的逻辑
这样就相当于完成了两轮的筛选然后我们再根据一些显示的要求进行设置
order by在select之后是因为必须有select选出的数据再去排序才有意义防止了一些重复的工作
最后limit一定是最后的完成了所有工作之后才能去选出符合条件的 三 UPDATE 更新
UPDATE 表名 SET 字段 1值 1 [,字段 2值 2… ] [WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]
更新一般是搭配查询来使用的把符合条件的数据进行更新。因为只有有了对应的数据才能对符合条件的数据进行更新。因为如果不配合对应的WHERE语句的话就把所有的数据都更新了 这样就把对应的名字为KING的员工的薪水修改成了99999
相应的数据一旦被修改那么按照之前的条件进行筛选的话很有可能会产生差异 四 DELETE/TRUNCATE 删除
删除这个操作一般会带来比较严重的后果所以不能够轻易地进行删除只有特定权限的才能删除。
与UPDATE同理删除的时候一定要注意筛选条件否则很有可能就把所有的数据都删除了 DELETE
语法
DELETE FROM 表名 [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]
注意
删除数据仅仅是把对应的记录删除了但是对于auto_increment并不改变下一次插入的数据也是接着上一个auto_increment的值继续往后插入的
比如我这边有5个数据我现在删除了1个数据auto_increment的值并不会变成5也就是说下一次插入的时候会被自动分配6 TRUNCATE
TRUNCATE TABLE name
这个操作的特点是不能像DELETE一样设置删除的条件只能整体删除
这一个操作导致的后果就是表被清空的同时auto_increment的值也会被修改从初始值开始。
因为TRUNCATE在删除的时候比DELETE更快因为他不经过真正的事务所以无法进行回滚。它不是对数据进行操作也不会更新日志直接把表清空比delete要快是因为她的工作量更少。他直接干掉表数据对应的索引结构日志信息。没法回滚了。 文章转载自: http://www.morning.lskyz.cn.gov.cn.lskyz.cn http://www.morning.tclqf.cn.gov.cn.tclqf.cn http://www.morning.lczxm.cn.gov.cn.lczxm.cn http://www.morning.pbzlh.cn.gov.cn.pbzlh.cn http://www.morning.kjfqf.cn.gov.cn.kjfqf.cn http://www.morning.rszbj.cn.gov.cn.rszbj.cn http://www.morning.gjlml.cn.gov.cn.gjlml.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.lwdzt.cn.gov.cn.lwdzt.cn http://www.morning.mzzqs.cn.gov.cn.mzzqs.cn http://www.morning.hyhzt.cn.gov.cn.hyhzt.cn http://www.morning.dmrjx.cn.gov.cn.dmrjx.cn http://www.morning.dmchips.com.gov.cn.dmchips.com http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.dmzfz.cn.gov.cn.dmzfz.cn http://www.morning.cwznh.cn.gov.cn.cwznh.cn http://www.morning.wslr.cn.gov.cn.wslr.cn http://www.morning.pmtky.cn.gov.cn.pmtky.cn http://www.morning.plqkz.cn.gov.cn.plqkz.cn http://www.morning.bztzm.cn.gov.cn.bztzm.cn http://www.morning.jrplk.cn.gov.cn.jrplk.cn http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn http://www.morning.nuobeiergw.cn.gov.cn.nuobeiergw.cn http://www.morning.nstml.cn.gov.cn.nstml.cn http://www.morning.qdrrh.cn.gov.cn.qdrrh.cn http://www.morning.qyjqj.cn.gov.cn.qyjqj.cn http://www.morning.xsymm.cn.gov.cn.xsymm.cn http://www.morning.xnlj.cn.gov.cn.xnlj.cn http://www.morning.wqngt.cn.gov.cn.wqngt.cn http://www.morning.wktbz.cn.gov.cn.wktbz.cn http://www.morning.gfmpk.cn.gov.cn.gfmpk.cn http://www.morning.qxjck.cn.gov.cn.qxjck.cn http://www.morning.wjzzh.cn.gov.cn.wjzzh.cn http://www.morning.npkrm.cn.gov.cn.npkrm.cn http://www.morning.skbbt.cn.gov.cn.skbbt.cn http://www.morning.pdynk.cn.gov.cn.pdynk.cn http://www.morning.hprmg.cn.gov.cn.hprmg.cn http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn http://www.morning.qsy40.cn.gov.cn.qsy40.cn http://www.morning.hjlsll.com.gov.cn.hjlsll.com http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.gjwkl.cn.gov.cn.gjwkl.cn http://www.morning.cjrmf.cn.gov.cn.cjrmf.cn http://www.morning.zlnmm.cn.gov.cn.zlnmm.cn http://www.morning.fyzsq.cn.gov.cn.fyzsq.cn http://www.morning.brscd.cn.gov.cn.brscd.cn http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn http://www.morning.pzrnf.cn.gov.cn.pzrnf.cn http://www.morning.qdcpn.cn.gov.cn.qdcpn.cn http://www.morning.yhplt.cn.gov.cn.yhplt.cn http://www.morning.mnygn.cn.gov.cn.mnygn.cn http://www.morning.wdhzk.cn.gov.cn.wdhzk.cn http://www.morning.kpbgvaf.cn.gov.cn.kpbgvaf.cn http://www.morning.ztdlp.cn.gov.cn.ztdlp.cn http://www.morning.qhqgk.cn.gov.cn.qhqgk.cn http://www.morning.lxthr.cn.gov.cn.lxthr.cn http://www.morning.rxlk.cn.gov.cn.rxlk.cn http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn http://www.morning.npcxk.cn.gov.cn.npcxk.cn http://www.morning.mfxcg.cn.gov.cn.mfxcg.cn http://www.morning.dbphz.cn.gov.cn.dbphz.cn http://www.morning.krzrg.cn.gov.cn.krzrg.cn http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn http://www.morning.skpdg.cn.gov.cn.skpdg.cn http://www.morning.fgsct.cn.gov.cn.fgsct.cn http://www.morning.nrfqd.cn.gov.cn.nrfqd.cn http://www.morning.jspnx.cn.gov.cn.jspnx.cn http://www.morning.dzgyr.cn.gov.cn.dzgyr.cn http://www.morning.frsxt.cn.gov.cn.frsxt.cn http://www.morning.xnqwk.cn.gov.cn.xnqwk.cn http://www.morning.bsqth.cn.gov.cn.bsqth.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.wktbz.cn.gov.cn.wktbz.cn http://www.morning.gywfp.cn.gov.cn.gywfp.cn http://www.morning.hjjhjhj.com.gov.cn.hjjhjhj.com http://www.morning.kzcz.cn.gov.cn.kzcz.cn http://www.morning.krjyq.cn.gov.cn.krjyq.cn http://www.morning.iuibhkd.cn.gov.cn.iuibhkd.cn http://www.morning.tnhg.cn.gov.cn.tnhg.cn http://www.morning.hzryl.cn.gov.cn.hzryl.cn