php学习day11---数据库(3)数据表的增删改查
今天我们学习了数据表的相关操作,以下是笔记。
一、数据操作语言
1.增添数据
在数据表中添加数据有多种的语法形式
形式1:insert [into] table_name [(字段1,字段2,字段3......)] values (值1,值2,值3......),(......),(......)......;
形式2:replace [into] table_name [(字段1,字段2,字段3......)] values (值1,值2,值3......),(......),(......)......;
形式3:insert [into] table_name [(字段1,字段2,字段3......)] select 字段1,字段2,字段3......from other_table_name;
形式4:insert [into] table_name set 字段1 = 值,字段2=值,......
说明:
在四中方法中,形式1是最常用的方法,其中它的值,可以是一个固定的值或者函数调用的结果,或者是变量,如果对应的字段是字符或者时间类型,则直接使用单引号。形式1和形式2的用法大体是一致的,唯一的不同就是在插入的数据的主键或者唯一键有重复的时候,形式1会报错,形式2会更改数据。形式3就是简单的将其他表查询到的数据添加到当前的表中,但必须要注意其字段列表要一一对应。形式4的比较不常用。
方式2:
load data(载入数据)
语法形式:
load data infile“完整的数据文件路径” into table table_name;
2.删除数据
删除数据的语法形式:
delete from table_name [where] [order by] [limit];
说明:
删除数据是以行为单位的;
要带where条件,否则会删除所有的数据;
order by 排序设置,通常与limit一同使用;
limit来限定要删除几行数据;
》》
3.修改数据
修改数据的语法:
update table_name set 字段1=值,字段2=值......[where] [order by] [limit];
说明:
修改时也与where同时用,否则修改全部数据;
值如果是字符串或时间类型,加单引号;
4.查询数据
因为查询的内容比较多,所以查询的相关知识我们单独作为一章来记载。(下面一大章)
二、数据表查询详解
1.基本语法形式
查询语句的基本语法形式:
select [all或distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by 子句] [limit子句]
下面咱们来详细讲解每个子句的含义及用法;
2.all和distinct
用于设定select出来的数据,是否消除重复行,可以不写,,默认为all
all:表示不消除,即表示所有都显示出来,是默认值;
distinct:消除;
3.字段和表达式列表
字段,就是自如来源于表的,在表刚建立的时候设置;
表达式就是类似与内容比如:1,1+2+3,或者now()等内部函数;
当然了我们每插寻出来的结果都可以用as进行别名设置;
4.from子句
from子句表示select 部分中取得数据的数据源---其实就是去哪个表中拿数据,其后面通常是跟表名,也可以是其他一些数据来源(连接表);其中from前面跟的字段必须是来源表中已有的字段名;
5.where子句
说明:
where子句就是对from子句中的数据源的数据进行条件筛选,筛选的机制就是逐行进行判断,其作用基本跟if语句一样。where依赖于from语句。
where中通常使用各种运算符:
算数运算符:+ - * / %;
比较运算符:> < = >= <= <>(不等于) == !=(不等于)
逻辑运算符:and or not
特殊运算符:is between in like
is运算符:
有四种使用的情况:
XX is null:判断某个字段是“null”
XX is not null:判断某个字段是不空;
XX is true:判断某个字段是否为真;
XX is false:判断某个字段的值否为假 : 0,0.0,‘’,null
between运算符:
用于判断某个字段的数据值是否在某个给定的范围,适用于数字类型。
用法: XX between 值1 and 值2;
其用法类似于 XX>=值1 and XX<=值2;
in运算符:
其表示字段的值为所列出的这些值中的一个,就算满足条件,这些值基本上都是无规律的。
语法:XX in (值1,值2,值3......)
like 运算符:对字符串进行模糊查询
其作用就是实现对字符串的某种特征信息的模糊查找,依赖于下面两个特殊符号:
% :代表任何个数的任何字符;
_ :(下杠),代表一个任何字符;
其使用法:XX like “要查找的内容”
6.group by子句
形式:
group by 字段1 [desc|asc],字段2[desc|asc]......
说明:
分组是对前述已经找出来的数据及已经经过where筛选过的数据进行某种标准进行分组;同时,该分组结果,可以同时指定“排序方式”,通常情况下分组只依据一个字段,2个以上很少。
那么什么是分组呢? 就是将多行数据,以某种标准来进行分类;
特别注意的是:分组之后的结果只有一个一个的组了,其结果就是在select 语句中输出的部分只应该出现组的信息:
select 组信息1,组信息2,...from 数据源 group by字段;
在应用中,分组之后,通常有以下几种可以用的组信息(即可以出现在select中):
1.分组依据的本身信息,其实就是该分组依据的字段名;
2.每一组的数量信息是用:count(*)获得;
3.最大值:max(字段名) 最小值:min(字段名) 平均值:avg(字段名) 总和:sum(字段名)
7.having子句
having的作用和where的作用是一样的,但是只是对分组的数据进行筛选。
8.order by子句
它用于将前面取得的数据以设定的标准来进行排序以输出结果。
形式:
order by 字段1 [asc|desc],字段2[asc|desc]......
说明:
对前面的结果数据指定一个或多个字段排序;
排序可以规定是正序还是倒叙;
多个字段排序都是在前一个字段 的基础上。
9.limit子句
含义:
它用于将前面取出的数据按指定的行取出来:从第几行开始取出多少行;
形式:
limit 起始行号,行数;
说明:
起始行号都是从零开始;
起始行号跟数据中的任何一个字段没有关系;
要取出的行号也是数字,应该大于0;
可以有简略:limit 行数;表示从第零行开始;
三、对整个select语句的总结
1.虽然在形式上,select的很多句子都是可以省略的但是她们出现的顺序是不能打乱的,必须按照顺序写出;
2.where依赖于from子句;
3.having依赖于group by 子句;
4.select 中的 字段也是依赖于from子句;
5.上述各子句的内部执行过程也是依赖于from子句的;