初识Mysql(2)-DQL

DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。

语法

语法结构:

SELECT
	字段列表
FROM
	表名列表
WHERE
	条件列表
GROUP  BY
	分组字段列表
HAVING
	分组后条件列表
ORDER BY
	排序字段列表
LIMIT
	分页参数

查询多个字段

select 字段1,2,3...from 表名列表

查所有

select * from

设置别名

select 字段1 as 别名,2 as 别名...from表名

去重

select distinct 字段列表 from 表名

条件查询

语法:select  字段列表  from   表名   where   条件列表 ; -- 多个条件用and连接

构建条件的运算符和Java中的大部分一样,这里列举特例

between...and...                      在范围内,含最小,最大值

in(...)                                        in之后的列表中的值,多选一

like占位符                                模糊匹配(_匹配单字符,%匹配任意个)

is null                                       是null

聚合函数

语法:select  聚合函数(字段列表)  from  表名 ; 

常用聚合函数(都是字面意思)

count        min        max          avg           sum

分组查询

分组: 按照某一列或者某几列,把相同的数据进行合并输出。  

通常会使用到聚合函数

select  字段列表  from  表名  [where 条件]  group by 分组字段名  [having 分组后过滤条件];

注意事项:

• 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

• 执行顺序:where > 聚合函数 > having

排序查询 

有升序排序,也有降序排序。

select  字段列表  
from   表名   
[where  条件列表] 
[group by  分组字段 ] 
order  by  字段1  排序方式1 , 字段2  排序方式2 … ;
排序方式
  • ASC :升序(默认值)

  • DESC:降序

分页查询 

语法:

select  字段列表  from   表名  limit  起始索引, 查询记录数 ;

起始索引=(查询页码 - 1)每页显示记录数 


多表设计

各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多(多对一)

  • 多对多

  • 一对一

 一对多(多对一)

想解决数据库层面,并未建立关联,无法保证数据的一致性和完整性的问题,以通过数据库中的 外键约束 来解决。

外键约束:让两张表的数据建立连接,保证数据的一致性和完整性。

对应的关键字:foreign key

-- 创建表时指定
create table 表名(
	字段名    数据类型,
	...
	[constraint]   [外键名称]  foreign  key (外键字段名)   references   主表 (主表列名)	
);


-- 建完表后,添加外键
alter table  表名  add constraint  外键名称  foreign key(外键字段名) references 主表(主表列名);

可用图形化界面操作

物理外键和逻辑外键

  • 物理外键
    • 概念:使用foreign key定义外键关联另外一张表。

    • 缺点:

      • 影响增、删、改的效率(需要检查外键关系)。

      • 仅用于单节点数据库,不适用与分布式、集群场景。

      • 容易引发数据库的死锁问题,消耗性能。

  • 逻辑外键
    • 概念:在业务层逻辑中,解决外键关联。

    • 通过逻辑外键,就可以很方便的解决上述问题。

在现在的企业开发中,很少会使用物理外键,都是使用逻辑外键。 甚至在一些数据库开发规范中,会明确指出禁止使用物理外键 foreign key

一对一(特殊的一对多) 

略         任意一方添加外键

多对多 

建立第三张中间表,至少包含两个外键,分别关联两边

下面举个例子

其中学生课程关系表属于中间表,包含两个外键,关联到两张表 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-Casey-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值