mysql语句二级查询_mysql_2 基本查询语句

2ff34e647e2e3cdfd8dca593e17d9b0a.png

数据库表设计3范式

第一范式(1NF)

要求数据达到原子性,是数据不可再分

第二范式(2NF)

使每一行数据具有唯一性,并消除数据之间的部分依赖每一行数据具有唯一性: 只要给表设计主键,就可以保证唯一性

消除数据之间的”部分依赖”

依赖的概念

就是在一个表中,其中某个字段的值B可以由另一个字段的值A来决定,则此时我们就称为:字段B依赖于字段A,或者字段A决定字段B。

就是根据字段A的某个值,一定可以找出一个确定的字段B的值,就是A决定B.

部分依赖?

如果某个字段,值依赖于部分主键字段,此时就称为部分依赖。–发生此情况的前提一定是: 主键字段有多个。

完全依赖?

某个字段,是依赖于主键的所有字段。– 如果一个表的主键只有一个字段,则此时必然是完全依赖。

第三范式(3NF)

独立性,消除传递依赖。

使每个字段都独立地依赖于主键字段(独立性),而要消除其中部分非主键字段的内部依赖–这种内部依赖会构成传递依赖

数据操作语言 DML

插入数据(增)形式1: insert [into] 表名 [(字段名1,字段名2...)] values(值表达式1,值表达式2,...),(),()...;

这是最常用的插入语句,可以一次性插入多行数据,用逗号隔开;

插入语句,要理解为每次插入数据都是以行为单位进行插入;

字段名通常不推荐省略,其后续的值列表应该字段列表一一对应

其中的值表达式,可以是一个直接或函数调用结果,或变量值; 其中,如果对应字段是字符或时间类型,则直接值应该使用单引号

形式2: replace [into] 表名 [(字段名1,字段名2...)] values(值表达式1,值表达式2,...),(),()...;

其跟insert into几乎一样: 唯一区别 如果插入的数据的主键或唯一键有重复,则此时就会变成修改改行数据

形式3: insert [into] 表名 [(字段名1,字段名2,...)] select 字段名1,字段名2,... from 其他表名;

形式4: insert [into] 表名 set 字段名1=值表达式1,字段名2=值表达式2,...;

load data (载入数据) 语法

使用于载入 结构整齐的纯文本数据。 前提也要有一个对应结构的已存在的表。

简单格式: LOAD DATA INFILE '文件名' INTO TABLE 表名;

删除数据

形式: delete from 表名 [where 条件] [order by 排序] [limit 限定];

说明:删除数据仍然是以行为单位进行

通常删除数据都需要带where条件,否则就会删除所有数据。

where条件的语法跟select中的语法一样

order by 排序设定,用于指定这些数据的删除顺序,他通常跟limit配合使用才有意义

limit限定用于设定删除多少行(按orderby 设定顺序)

修改数据

形式: update 表名 set 字段1=值1, 字段2=值2,...[where 条件] [order by 排序字段][limit 限制行数];

说明:通常,update语句,也都需要where条件,否则: 就会修改所有(这很少见);

where条件的语法跟select中语法一样;

order by 用于设定修改的顺序,limit用于设定修改的行数,他们通常也是结合使用(虽然很少用)

实际应用中,通常很少用到order by和limit,修改的常规操作就成为: update 表名 set 字段1=值1,字段2=值2,... where条件

数据查询语言 DQL

基本语法形式

select [all | distinct] 字段或表达式列表 [from 子句] [where 子句] [group by 子句] [having 子句] [order by 子句] [limit 子句];

字段或表达式列表字段,肯定来源于表,所以必然依赖于from语句

表达式是类似这样一个内容: 8 , 8+3, now(); //concat()函数是mysql中的系统函数,用于连接多个字符串。

每个输出项(字段或表达式结果),都可以给其设定一个别名,形式为: 字段或表达式 as 别名。

all 和 distinct 设定select出来的数据,是否消除重复行,可以不写,那就是默认值all。 all表示不消除,既所有都出来,默认值;distinct表示会消除。

form,表示select部分从中取得数据的数据源—就是表。

where,对数据源中的数据进行帅选的条件设定,所以where依赖于form子句。

is 运算符: 空值和布尔值的判断

有四种情况:xx is null: 判断某个字段是null值,就是没有值

xx is not null: 判断某个字段不是null值

xx is true: 判断某个字段为真

xx is false: 判断某个字段为假,false,0,0.0,’’, null

其他扩展位类型bit: 使用形式: bit[(M)] ,其中M是1~64的数字,表示使用多少位二进制数字来存储数据。插入形式为: b’value’ 比如: b’101’

序列类型serial: 只是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的一个别名(同义词)

布尔类型bool: 其实只是tinyint(1)的同义词,其值为0就表示false,否则为true

between运算符: 范围判断

用于判断某个字段的数据值是否在某个给定的范围之间–适用于数字类型

形式: xx between 值1 and 值2;

含义: xx字段的值在给定值1和值2之间,其实相当于: xx>=值1 and xx<=值2

in运算符

给出确定数据的范围判断

语法: xx in (值1, 值2, 值3, ...);

含义: 表示字段xx的值为所给出的这些值中的一个,就算是满足了条件;这些值,通常是零散无规律的。

like运算符

对字符串进行模糊查找

语法: xx like '要查找的内容'

含义: 实现对字符串的某种特征信息的模糊查找,它依赖于一下两个特殊的符号。% :它代表任何个数的任何字符

_ :它代表一个任何字符

group by 分组

形式: group by 字段1 [desc|asc] ,字段2 [desc | asc], ....

说明:分组是对前述已经找出的数据(既where已经筛选结束的)进行某种指定标准依据的分组。

同时,该分组结果,可以同时指定其 排序方式 :desc倒序 ,asc顺序

通常,分组就是一个字段,2个以上很少

什么叫做分组?

分组: 就是讲多行数据,以某种标准(就是指定的字段)来进行分类存放。

特别注意: 分组之后的结果,一定要理解为:只有一个个的组。 在部分语言此语法可能会出现不同的问题。

应用中,分组之后,通常只有如下几种可用的组信息。分组依据本身的信息,其实就是该分组依据的字段名

每一组的数量信息: 就是count(*)获得

原来数据中的 数值类型字段的聚合信息 包括如下几个:

最大值: max(字段名); 最小值: min(字段名); 平均值 avg(字段名); 总和值: sum(字段名); 上述其实是4个系统内部函数。

having 子句

having的作用和where完全一样,但其只是对 分组的结果数据 进行筛选。 既where对原始数据进行筛选; having对分组之后的数据进行筛选。

这里既是在select 后面没有写查询count(*) 时,在having设定筛选条件的时候,也可以使用,因为count(*)是独立计算的结果,既对每一组进行原始数据行的统计,并用该条件进行筛选。

恢复(导入)数据

mysql登录后: source "备份数据文件的完整路径"

order by 子句

用于 将前面取得的数据以设定的标准(字段)来进行排序以输出结果。

形式: order by 字段1 [asc | desc], 字段2 [asc | desc], ...

limit子句

用于将 前述取得的数据 ,按指定的行取出来: 从第几行开始取出多少行。

形式: limit 起始行号 , 要取出的行号

说明: 行号默认从0开始, 行号和id没有关系。

对select语句进行简要总结虽然在形式上,select的很多子句都是可以省略的,但是他们的顺序(如果出现),就不能打乱:必须仍然按照给出的顺序写出

where子句依赖于from子句: 既没有from,就不能有where

having子句依赖于group by子句: 既没有group by就不能有having

select 中的字段也是依赖于from子句

上述子句的执行过程,基本上也是按照该顺序进行: – 从from的数据源中获取所有的数据,然后使用where对这些数据进行筛选,之后再使用group by子句对筛选出来的数据进行分组,接下来才可以使用having对这些分组的数据进行筛选,然后才可以order by 和limit。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值