您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL 数据库(三):查

bubuko 2022/1/25 20:05:44 mysql 字数 17751 阅读 856 来源 http://www.bubuko.com/infolist-5-1.html

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

掌握单表查询

不加条件的查询:

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

示例:

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

查询所有字段:

语法

select * from <表名>:

示例

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

掌握 多表查询

问题一:

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

问题二:

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

对结果集进行排序 asc、desc

语法:
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 * ,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;
SELECT * from member where id BETWEEN 10 and 20;

 

掌握 limit 方法

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

语法:

  • select ... from 表名 limit m,n;
  • m指的索引值是从m开始,n表示每页要取多少条。
SELECT * from membe rLIMIT 10,10;
  • x*(y-1),x
  • 4页。20条
  • 20*3,20

示例:

  • 每页取十条展示。
  • 第一页为: 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 字段名 from 表名 inner JOIN 表名 on 关联关系;
SELECT * from user INNER JOIN user_lover on user.id = user_lover.id

 

 

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

MySQL 数据库(三):查

原文:https://www.cnblogs.com/shouhu/p/12492204.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶