MySQL 数据库(三):查

  • 掌握 单表查询
  • 掌握 多表查询
  • 掌握 order by 排序方法
  • 掌握 in 查询用法
  • 掌握 like 模糊查询用法
  • 掌握 count() 统计用法
  • 掌握 group by 分组用法
  • 掌握 distinct 去重用法
  • 掌握 between 用法
  • 掌握 limit 方法
  • 掌握 mysql 常用函数
  • 掌握 select 语句查询结构
  • 掌握 左右内连接查询

掌握单表查询

不加条件的查询:

查询特定字段,语法
select <字段1,字段2,...> from <表名>;

示例:

查询会员表里所有用户的手机号码和可用余额
select MobilePhone, LeaveAmount from member:

查询所有字段:

语法

select * from <表名>:

示例

查询会员表的所有用户信息。
select * from member;

掌握 多表查询

问题一:

  • 对于不同类型的信息该怎么存储呢?是放一个表呢,还是不同类型数据放不同表。(结合仓库去理解)
  • 放在一个表的缺点:
    • 字段过多  
    • 难以维护  
    • 表数据庞大  
    • 数据冗余,重复数据多  

问题二:

  • 既然不同类型的数据放在了不同的表,那原本有联系的数据怎么保持原有的联系呢?
  • 解决方案:
    • 设计表的时候两个表之间维持一个关联即可。  

掌握 order by 排序方法

对结果集进行排序 asc、desc

语法:
  select 查询字段名 from 表名 order by 字段名A ascdesc;
select ... from ... order by 字段A asc(desc); select ... from ... order by 字段A asc(desc), 字段B asc(desc); ============== asc: 升序(默认) desc: 降序 ==============

示例:
SELECT regname, leaveamount from member ORDER BY LeaveAmount desc;

 

掌握 in 查询用法

使用场景:查询的时候,条件字段的值存在于某个数据集

  • 语法
    • select ... from 表名 where 条件字段 in (数据集)
    • 数据集可以是具体的某几个值:值a, 值b.....值n;也可以是通过一个子查询  得到的数据集
  • 示例
    • 查询用户Id为1001,1002, 1003的用户信 息
    • select * from member where Id in(1001, 1002, 1003) ;
  • 拓展
    • not in 的用法:条件字段的值不存在于某个数据集
    • 查询用户Id不为1001, 1002,1003的用户
-- 查询会员 id 为 1,2,3,7,15 的会员信息;
SELECT * from member where id in (1,2,3,7,15);

-- 查询会员 id 不为 1,2,3,7,15 的会员信息;
SELECT * from member where id not in (1,2,3,7,15);

 

掌握 like 模糊查询用法

  like:模糊查询  “%xx”,“xx%”,“%xx%”

条件字段的值以任意字符串开头,以xx结尾的值---(大熊猫)
select <字段1,字段2,...> from <表名> where <条件字段> like '%XX';
select * from member WHERE RegName like "%猫";

条件字段的值以xx开头,以任意字符串结尾---(大熊猫)
select <字段1,字段2,...> from <表名> where <条件字段> like 'XX%'
SELECT * from member where RegName like "大%";

条件字段的值包含了xx ---(大熊猫)
select <字段1,字段2,...> from <表名> where <条件字段> like '%XX%'
SELECT * from member where RegName like "%%";

 

掌握 count() 统计用法、group by 分组用法

  • 使用场景:group by顾名思义就是按照某-一个,或者多个字段来分组,它必须有“聚合函数”来配合才能使用,使用时至少需要一个分组字段。 某某信息来进行分组
  • 语法
    • select 查询字段,聚合函数 from 查询涉及到的表 group by 分组字段 having 过滤条件;
  • 语法解释:
    • 聚合函数:对一组值执行计算并返回单一的值的函数。聚合函数经常与 SELECT 语句的 GROUP BY子句一同使用
      • 常见的聚合函数有: 
        • sum(求和)、
        • count(计数)、
        • avg(平均数)、
        • min(最小)、
        • max(最大)
    • having:在分完组以后如果想在这个分组结果的基础上继续过滤的话就必须把过滤条件写在 having 后面
  • 示例:  
    • 请按项目分组,统计投资表中各个项目的投资次数。
    • select LoanId, count() from invest GROUP BY LoanId;  

理解:我感觉分组这里还是以理解为主,个人是按照这样理解的;

语法:
    select 查询字段,聚合函数 from 表名 group by 分组字段 having 过滤条件;

1、统计每个投资用户的累计投资额
select
    查询字段,累计投资额
from
    表名
group by
    投资用户;

2、统计每个投资用户的累计投资额,并且显示出每个用户的昵称
    几张表?需要分组吗?有过滤条件吗?
select
    查询字段,累计投资额
from
    表名a,表名b
where
    关联条件
group by
    投资用户;

3、统计a表每个投资用户的累计投资额,并且显示b表 id < 5 的每个用户的昵称
    几张表?需要分组吗?有过滤条件吗?
select
    查询字段,累计投资额
from
    表名a,表名b
where
    关联条件
group by
    投资用户
having
    表名.id < 5;

示例:

语法
select 查询字段,聚合函数 from 查询涉及到的表 group by 分组字段 having 过滤条件;

1、统计每个项目的平均投资额;
SELECT * ,AVG(amount) from invest GROUP BY LoanId;


2、扩展:统讦每个投资用户的累计投资额,并且显示出每个用户的昵称、id:
分析:
  几张表==invest, member 关联?;要分组吗? 有条件过滤吗? 

SELECT 
    member.RegName,
    member.id,
    SUM(invest.Amount)
FROM 
    invest, member
WHERE
    invest.MemberID = member.id
GROUP BY
    invest.MemberID
HAVING
    member.id < 10;

 

掌握 distinct 去重用法

  使用场景:去除查询结果中的重复数据

语法:(译:抵死真可特)
select distinct字段名1 from 表名;
示例:
查询所有有投资的用户Id
select distinct MemberID from invest;

 

掌握 between 用法

  使用场景:条件字段的取值处于两个数据范围内的情况

语法:
    select .... from 表名 where 条件字段 between 数值A and 数值B;

示例:
    id 在10到20 之间数据
SELECT * from member where id BETWEEN 10 and 20;

 

掌握 limit 查询分页方法

  使用场景:取查询结果的前n条

语法:
    select 查询字段 from 表名 limit 开始m,每页显示几条;

m开始,n取几条
每页展示x条,取第 y页
x 乘(y-1),x
4页。20条
20320

示例:

  • 每页取十条展示。
  • 第一页为: limit 0, 10       -----表示取索引从0开始取10条记录。
  • 第二页为: limit 10, 10      -----表示取索引从10开始取10条记录。
  • 第三页为: limit 20, 10      -----表示取索引从20开始取10条记录。

思考:

  • 若每页展示x条数据,则取第y页时,分页语句中的m和n值分别为多少。

拓展:

  • 请用sql将member表数据按照id降序排列后取前三条数据数据。

 

掌握 常用 mysql 函数

数值相关函数

  • 求字段A的最小值:
    • min(字段A)
  • 求字段A的最大值:
    • mag(字段A)
  • 求字段A的平均值:
    • avg(字段A)
  • 求字段A的和:
    • sum(字段A)
求字段A的最小值: min(字段A)
SELECT min (Amount) from invest;
求字段A的最大值:
max(字段A) SELECT max (Amount) from invest;
求字段A的平均值:
avg(字段A) SELECT avg (Amount) FROM invest;
求字段A的和:
sum(字段A) SELECT sum (Amount) from invest;

 

掌握 select 语句查询结构

SELECT
       ....
FROM
       ....
WHERE
       ....
GROUP BY
       ....
HAVING
       ....
ORDER BY
       ....
LIMIT
       ....

 

左右内外 连接查询

内连接为例语法:
select
    a.查询字段名,b.查询字段名
from
    a表名 inner join b表名 on 关联关系;

示例:
select
    a.*, b.*
from
    a inner join b on a.id = b.parent_id;

inner join     内连接
left join        左连接
right join      右链接
full join        完全链接

 外连接,查询从表为空的数据

select * from emp as a left join dept as b on a.dept_id = b.id 
where b.id is null;
#
on : (两张表如何关联) on在where之前 # 和where(结果集的基础上做条件筛选)的区别

 

 

 

*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!******* 

posted @ 2020-03-14 14:58  守护往昔  阅读(288)  评论(0编辑  收藏  举报