NULL的处理
count函数对NULL的处理:若count函数的参数是*,则统计所有的记录的个数,而如果参数是某字段不统计含NULL值的记录个数
sum和avg函数对NULL的处理:这两个函数会忽视NULL的存在
max和min函数对NULL的处理:这两个函数也会忽视NULL
DQL group by 分组查询:
使用group by 字句对查询信息进行分组
格式:select 字段1,字段2……from 表名 【where】 group by 分组字段 having 分组条件
如果进行分组后 select 字句后,只能出现分组的字段与统计函数,其他的字段不能出现,分组后对统计结果进行筛选的时候,必须使用having 不能使用 where
where 字句用来筛选from 字句中指定操作所产生的行
group by 字句用来分组where字句的输出
having 字句用来从分组的结果中进行筛选
insert into select 将一张表的数据导到另一张表里
insert into tavble2(field1,field2……)_ select value1,value2……from table1
或者
insert into table2 select * from table1
要求是目标表2必须存在
正则表达式
描述了一种字符串的匹配规则,其本身是一个字符串,使用这个字符串来描述
用来定义匹配规则,匹配一系列符合某个句法规则的字符串
在发开中,其用于检索替换那些符合规则的文本
MySQL通过REGEXP关键字支持正则表达式进行字符匹配
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
. 匹配处理\n之外的任意单个字符
[....] 字符集合,匹配所包含的任意一个字符。例:[abc]可以匹配plain中的a
[^...] 负值字符集合,匹配未包含的任意字符。例:[^abc]可以匹配plan中的p
p1|p2|p3 匹配p1或p2或p3 例:z|food匹配z或者food (a|f)ood可以匹配zood 或者food
星号(*)匹配前面的子表达式零次或者多次 例:zo*可以匹配z和zoo,*等价于{0,}
加号(+)匹配前面的子表达式一次或者多次 例:zo*可以匹配zo和zoo,但是不匹配z,+等价于{1,}
{n} n是一个非负数,匹配确定的n次 例:o{2}不可以匹配bob中的o,但是可以匹配book中的两个o
{n,m} nm都为非负数,n<=m,最少匹配N次最多匹配M次
a* 匹配0个或者多个a,包括空字符串
a+ 匹配1个或多个a,不包括空字符串
a? 匹配1个或0个a
(abcd) 把abcd作为一个整体进行匹配,不用括号就是单个字符匹配
多表操作
多表之间的关系:一对一,一对多,多对一,多对多
外键约束 foreign key
是表的一个特殊字段 经常与主键约束一起使用
对于具有关联关系的表而言,相关字段中主键所在的表就是主表,外键所在的表是从表
定义外键的时候,需要遵守以下规则
主表必须存在于数据库中或者是当前正在创建的表
必须为主表定义主键
主键不能包含空值,但是允许在外键中出现空值
在主表的表名后面指定列名或列名的组合,这个列或列的组合必须是主表的主键或候选键
外键中列的数目必须和主表的主键中列的数目相同
外键中的数据类型必须和主表主键中对应的列数据类型相同
创建外键约束
在创建表时设置外键约束
【constraint<外键名,自定义,方便删除操作>】foreign key
字段名【,字段名2……】reference <主表名> 主键列1【,主键列2………】