mysql(2)

本文介绍了DQL的基本语法,包括数据查询、条件过滤、分组统计和排序等操作。讨论了单行和分组函数的使用,如COUNT、SUM、AVG等,并提到了日期和时间函数。此外,文章还涉及了多表关联查询的重要性,解释了第一、第二和第三范式在数据库设计中的角色,以及内外连接、子查询的使用策略。
摘要由CSDN通过智能技术生成

DQL(数据查询query语句)

查询结果处理

select 结果 from order by limit group by

查询的结果是一个虚拟的表格

*代表所有

支持算数运算(细节查询课件)

distinct 去重(所有列都相同叫重)

  1. 函数

(使用时 一般要先加字段 末尾最后加表名 from)

单行函数 :原来多少行处理后还是多少行

字符处理函数

汉字在utf-8占三个字节

as 别名

char_length字符

concat 字段连接

upper 转大写 lower转小写

substring 截取字符串 从1开始

instr 返回字符串第一次出现的索引,找不到返回0

trim 去掉前后的空格 或者字串 from

分组函数(也叫统计函数):把多行数据处理后变完一行数据

lpad rpad左填充 右填充

replace 替换

now():返回当前的日期和时间

curdate():返回当前的日期

curtime():返回当前的时间

year(date),month(),day(),hour(),minute(),second()只要日期时间的个别部分 只要年,月......

str_to_date(日期,格式)字符串转日期

date_format(日期,格式)日期转字符串

datediff(big,small)返回两个日期的相差天数

逻辑处理函数

case when条件 then 结果1 else 结果2 end;可以有多个when

ifnull( , )

if(条件,结果1,结果2)

分组函数

用作统计需求

sum avg 处理数值类型

max min count()处理任何类型

都可以忽略null值

count(*)用于统计行数

2.条件查询

where 条件 and/or 条件

in()相当于or

not

查询空值要用 is null

between and 之间(包含边界 )

like 模糊查询(有弊端 后期有替代 了解即可)

通配符 % 任意多个字符包含0个字符 , _ 任意多个字符

不为空 是 not null

3.分组查询

group by

order by 排序 desc降序

limit(n,m)从n+1开始显示 一共显示m个

查询条件 case when在里面

条件 升降序 分组 在from table_name 后面

查询 后 就是 字段

union(通过union连接两个查询语句,会把重复的记录删掉)

union all(效率高于union)

排序 order by(besc)

先查询字段(查字段中可能有选择语句) 然后是from table 条件语句 排序 限制等等

group by 多用于统计

查什么 by 后面就加什么 经常和count组合

子查询 from(查询的表)

having 分组后的数据 过滤

where 分组前的数据 筛选过滤

多表设计_关联查询


为什么需要多表关联???

答:一张表不能满足需求 不能将所有的信息都存储在一张表内 所以需要多张表

数据冗余拆分

把表与表关联起来即可

外键(foreign key)!

references 参考

1.数据库设计范式

第一范式 确保列的原子性(不可再拆分 整体)

第二范式 有主键(完全函数依赖 为了找到其他的字段)

第三范式 消除函数传递(消除冗余) 使用外键 进行关联

修改表结构

alter table table_name add column 字段名 数据类型(和关联的表要一致)

外键约束

外键有弱关联约束(没有约束)

外键有强关联关系(有约束)

在建表中可直接添加约束

constraint 约束名 foreign key(主表的id) references table_name (id)

约束名命名规则

外键_外表 _ 主表 _ 字段名

FK_ForeigntTable_PrimaryTable_on_ForeignColumn

添加约束后 要遵守规则约束

删除主表要保证从表没人使用

2.多表查询

防止笛卡尔积现象

如何避免:添加有效的连接条件

内连接:inner join(没有关系不影响)

左外连接left join

右外连接

right join

多表查询 on和where的区别.

on是先对表进行筛选再生成关联表,where是先生成关联表再对关联表进行筛选

on先执行,where后执行。外连接时,on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。而where条件是在临时表生成好后,再对临时表进行过滤的条件。

3.子查询

返回一个值

查询 最高 人 的信息

这里给出两个信息 第一是最高 第二是信息

所以需要子查询 两条查询语句

select 只能出现标量子查询

from 表子查询

where 标量子查询 列子查询

1 是一列

2 是标量

3 表

图解 SQL 的执行顺序


图解 SQL 的执行顺序_having_数据_分组


1:先执行from 和 join 确定表之间的连接关系

2:where对数据进行初步筛选

3:group by 进行分组

4: having函数

5: distinct 去重

6: order by 排序

where和join连接表有什么区别?????????????????

在WHERE子句中不可以使用函数

8版本 子查询 in 和limit不能同用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值