数据库基础MySQL(四 DQL高级查询数据 全是重点!!!)

1.DQL高级查询数据

        首先来说一下什么是DQL高级查询数据,DQL(Data Query Language)高级查询数据在数据库管理中扮演着至关重要的角色,它允许用户从数据库中检索复杂的信息。DQL是SQL(Structured Query Language)中的一部分,专门用于数据查询。在高级查询中,DQL不仅支持基本的SELECT语句,还包括多表连接(JOIN)、子查询、分组(GROUP BY)、排序(ORDER BY)、聚合函数(如SUM、AVG、MAX、MIN)等高级功能。

1.1limit分页查询

        当数据量太多时,为了更快的加载数据内容,可以进行分页处理。下面是limit分页查询语法:

select 字段名 from 表名 limit M, N;
# M: 整数,表示从第几条索引开始,计算方式:(当前页-1) * 每页显示条数;
# N: 整数,表示查询多少条数据.

注:

(1)limit是分页查询的关键字;

(2)M为整数,表示从第几条索引开始,默认值是0;

下面来列举一些例子;

#查询5条数据
select * from product limit 0,5;  # 0是索引
#查询5-10的数据
select * from product limit 5,10;  # 取值: 6-15条,第5个之后开始读10条
# 仅查询2件商品
select * from product limit 0,2;

1.2分组查询

        分组查询在sql中经常会用到,来详细介绍一下什么是分组查询,什么时候会用到,下面直接上干货。

        分组查询是SQL中一个非常强大的功能,它允许你将结果集中的记录按照一个或多个列进行分组,并对每个分组应用聚合函数来计算统计信息,如总和、平均值、最大值、最小值、计数等。分组查询通常与GROUP BY子句一起使用,并经常与HAVING子句(用于过滤分组后的结果)和聚合函数(如SUM()AVG()MAX()MIN()COUNT())结合使用。可以理解为当出现聚合函数时,想要不同的字段拥有不同的函数结果,就要对其进行分组。

        分组查询group by

分组查询的语法:

select 字段名1,字段名2,... from 表名 group by 分组字段名 [having 分组条件];

 下面进行举例子

####################分组group by############################
# 查询所有数据
select * from person;
# 分组查询每个id的分数和
select id,sum(score) from person group by id;
# 对年龄进行分组
select gender from person group by gender;

1.2.1group by + having的使用

        GROUP BY 和 HAVING 子句在SQL中经常一起使用,以执行更复杂的分组查询和过滤分组后的结果。GROUP BY 子句用于将结果集中的记录按照一个或多个列进行分组,而 HAVING 子句则用于对分组后的结果进行过滤,类似于 WHERE 子句对原始记录进行过滤,但 HAVING 是在分组和聚合之后应用的。having用于过滤分组数据,且只能用于group by,语法:

select 字段名1,字段名2,... from 表名 group by 分组字段名 having 分组条件;

 例如

# 总个数 > 2的信息
select gender,count(*) from student group by gender having count(*) > 2;

分组查询要好好牢记,多多练习,在大数据行业会经常用到。

2.外键和关系

        2.1外键约束简介

         外键约束(Foreign Key Constraint,简称FK)是关系型数据库管理系统(RDBMS)中用于维护数据一致性和完整性的一种重要机制。外键约束是指在一个表中定义一个或多个列,这些列的值必须与另一个表(通常称为主表或父表)中的一个或多个列(主键或唯一键)的值相匹配。被约束的表称为从表或子表。通过这种方式,外键约束在两个表之间建立了关联关系,确保了两个表之间数据的一致性和完整性。

(1)主键   primary key
(2)外键   foreign key         

        有两张数据表,且它们之间有关联。可以通过了某个字段来建立连接,这个字段在第一张表A中是主键primary key,在第二张表B中,就称为外键约束foreign key。

添加主外键约束语法:

create table 表名(
    id int  primary key,
    字段名 数据类型(长度) [约束],
) engine = InnoDB default charset utf8;

create table 表名(
    字段名 数据类型(长度) [约束],
    foreign key (字段名) references 另外表名(主键列名)
) engine = InnoDB default charset utf8;

 当建表之后,若想对表添加外键约束,可以用以下语法;

# 通过外部添加外键
alter table 表A add constraint xxxfk foreign key (外键字段名) references 另外表名(主键字段名);

 3.子查询

        子查询指的是将一条select语句的结果,作为另一条select语句的一部分(如:查询条件、查询结果、表等),来进行数据查询。具体语法如下;

select *|字段名1,字段名2,.. from 表名 where 字段名 = (另外select语句的结果);

        子查询在sql中的地位也不容小觑,也会很经常的用到。

 4.多表查询

  4.1什么是多表查询     

        多表查询(Multiple Table Queries)是数据库操作中常见的一种查询方式,它允许从两个或两个以上的表中检索数据。在关系型数据库中,数据通常被分布在不同的表中,这些表之间通过特定的关系(如外键约束)相互关联。多表查询正是利用这些关系来从多个表中联合检索信息的过程。

        多表查询主要依赖于SQL(Structured Query Language,结构化查询语言)中的几个关键语句,如JOINUNIONINTERSECTEXCEPT(或MINUS,取决于数据库系统),但最常见和强大的是JOIN语句。

注意事项

  • 确保连接条件正确无误,以避免返回错误的数据。
  • 对于大数据量的表,多表查询可能会非常耗时,因此考虑使用索引来优化查询性能。
  • 在设计数据库时,合理规划和设置外键关系,以便更有效地进行多表查询。

 多表查询可以分为4类:

(1)交叉连接查询
(2)内连接查询
(3)外连接查询
(4)自连接查询

4.2交叉连接查询

        通常地,交叉连接查询的结果是:两个数据表的并集,也称为笛卡尔积。笛卡尔积是指在数学中,两个集合X和Y的笛卡尔乘积,又称直积。

交叉连接查询的语法:

select 字段名 from A表名, B表名;

或者:

select 字段名 from A表名 cross join B表名;

 4.3内连接查询

        内连接查询指的是查询两个数据表中,符合条件的共有记录,即交集。

对于内连接查询,可分为两类,分别是:隐式内连接和显式内连接。

(1)隐式内连接是指没有inner join关键字,而条件直接使用where来指定,语法:

select 字段名 from A表名, B表名 where 条件;

(2)显式内连接是指需要使用inner join ... on语句,可以省略inner,语法:

select 字段名 from A表名 别名 inner join B表名 别名 on 条件 [where 查询条件];
select 字段名 from A表名 别名 join B表名 别名 on 条件 [where 查询条件];

4.4外连接查询

        外连接查询(Outer Join Queries)是SQL中用于结合两个或多个表中的数据,同时返回至少一个表中所有行的查询方式。与内连接(Inner Join)不同,外连接不仅返回匹配的行,还返回那些在不匹配的情况下,属于连接条件一侧表中的数据行,这些行在另一侧表中没有匹配的行,则对应的列将包含NULL值。

        外连接主要分为两种类型:左外连接(Left Outer Join)和右外连接(Right Outer Join),但在某些数据库系统中,hive还支持全外连接(Full Outer Join),尽管并非所有数据库系统都直接支持全外连接语法。

4.4.1左外连接(Left Outer Join)

左外连接返回左表(LEFT JOIN语句左侧的表)的所有行,即使右表中没有匹配的行。如果右表中没有匹配的行,则结果中右表的部分将包含NULL。

语法示例:

SELECT columns  
FROM table1  
LEFT JOIN table2  
ON table1.common_field = table2.common_field;

4.4.2右外连接(Right Outer Join)

右外连接返回右表(RIGHT JOIN语句右侧的表)的所有行,即使左表中没有匹配的行。如果左表中没有匹配的行,则结果中左表的部分将包含NULL。

语法示例:

SELECT columns  
FROM table1  
RIGHT JOIN table2  
ON table1.common_field = table2.common_field;

    左、右外连接的区别

(1)当左表有数据为null时,左外连接查询的结果中,右表的数据结果都为null值;
(2)当右表有数据为null时,右外连接查询的结果中,左表的数据结果都为null值。

 5.自连接查询

        自连接查询(Self-Join Query)是指在数据库中,使用一个表的两个副本进行连接的查询操作。它是一种特殊的表连接操作,用于在同一张表中进行数据关联和查询。自连接查询通常用于解决需要在同一张表中进行多次关联的情况,比如在一个员工表中查找员工的上级、下属等关系,或者在地区表中查询一个省份下的所有城市等。

SELECT e1.name AS 员工, e2.name AS 领导  
FROM emp e1  
JOIN emp e2 ON e1.managerid = e2.id;
后面会继续更新越来越高阶的数据库内容,供各位小白和刚步入MySQL的哥们们相互学习。
  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值