MySQL基础-单表查询

embedded/2024/11/14 16:23:13/

语法

select [distinct] 列名1,列名2 as 别名...
from数据表名
where组前筛选
group by分组字段
having组后筛选
order by排序的列 [asc | desc]
limit 起始索引,数据条数

测试数据

# 建测试表
create table products
(id          int primary key auto_increment, -- 商品idname        varchar(24)    not null,        -- 商品名称price       decimal(10, 2) not null,        -- 商品价格score       decimal(5, 2),                  -- 商品评分,可以为空is_self     varchar(8),                     -- 是否自营category_id int                             -- 商品类别id
);create table category
(id   int primary key auto_increment, -- 商品类别idname varchar(24) not null            -- 类别名称
);# 添加测试数据
insert into category
values (1, '手机'),(2, '电脑'),(3, '美妆'),(4, '家居');insert into products
values (1, '华为mate50', 5499.00, 9.70, '自营', 1),(2, '荣耀80', 2399.00, 9.50, '自营', 1),(3, '荣耀80', 2199.00, 9.30, '非自营', 1),(4, '红米note 11', 999.00, 9.00, '非自营', 1),(5, '联想小新14', 4199.00, 9.20, '自营', 2),(6, '惠普战66', 4499.90, 9.30, '自营', 2),(7, '苹果air13', 6198.00, 9.10, '非自营', 2),(8, '华为matebook14', 5599.00, 9.30, '非自营', 2),(9, '兰蔻小黑瓶', 1100.00, 9.60, '自营', 3),(10, '雅诗兰黛粉底液', 920.00, 9.40, '自营', 3),(11, '阿玛尼红管405', 350.00, null, '非自营', 3),(12, '迪奥996', 330.00, 9.70, '非自营', 3);

简单查询

-- ---------------------- 案例1: 简单查询 ----------------------
-- 1. 查看表中所有的数据.
select id, name, price, score, is_self, category_id from products;
select * from products;     # 效果同上-- 2. 查看指定列, 例如: 商品名, 价格
select name, price from products;-- 3. 给列, 表起别名.
select name as 商品名, price as 商品单价, is_self from products as p;
select name as 商品名, price 商品单价, is_self from products  p;  # 细节1: as可以省略不写
select name as 商品名, price 商品单价, is_self from products  p;  # 细节2: 别名和关键字重名要加反引号``
select name as `desc`, price 商品单价, is_self from products  p;  # 细节2: 别名和关键字重名要加反引号``-- 4. 去重查询. distinct,  查看所有商品的类别.
select distinct category_id from products;
select distinct category_id, is_self from products;     # 细节: distinct后边有多列, 则是把多列作为1个整体来去重的.

条件查询

条件运算符:

  1. 比较运算符:=、>、=、

select * from products where price > 4199; -- 查询价格大于4199的手机

select * from products where price != 4199; -- 查询价格不等于4199的手机信息

select * from products where price <> 4199; -- 查询价格不等于4199的手机信息

  1. 逻辑运算符:AND(并且)、OR(或者)、NOT(非、取反)

select * from products where price > 2000 and price

select * from products where price =4000; -- 查询价格在2000之下的手机信息和4000之上的手机信息

select * from products where not (price =4000); -- 查询价格在2000到4000的手机信息

not的意思是给条件取反

  1. LIKE模糊查询

select * from products where name like '荣耀%' ; -- 查询名称以荣耀开头的手机信息

select * from products where name like '%mate%'; -- 查询名称包含mate的手机信息

select * from products where name like '%1_'; -- 查询名称倒数第二位是1的手机信息

  1. 范围查询

select * from products where price between 2000 and 4000;-- 查询价格在2000到4000的手机信息

select * from products where price in (2199, 2399); -- 查询价格2199, 2399的手机信息

  1. 空值判断:IS NULL 和 IS NOT NULL

注意:空值的判断一定不能使用 = 或 !=

select * from products where score is null; -- 查询score为null的手机信息

select * from products where score is not null; -- 查询score不为null的手机信息

常用的聚合函数

注意:聚合函数的计算会忽略NULL值

COUNT(col):求指定列的总记录数

count:计数;

select count(*) from products; -- 查询总共有多少行

面试题:count(*),count(1),count(列) 区别

却别1:count(列)不会统计null值,count(*),count(1) 会统计null值

却别2:效率问题,count(主键列)> count(1)>count(*)>count(列)

MAX(col):求指定列的最大值

maximum:最大值;

注意:如果统计的是字符串,则返回字符串长度最大的列

MIN(col):求指定列的最小值

minimum:最小值;

SUM(col):求指定列的和

sum:总和;

AVG(col):求指定列的平均值

average:平均数;

注意:平均数小数比较多,需要保留特定位数,可以使用round(1234.12,2)

select round(avg(price),2) as round2_avg_price from table_name;

select max(price), min(price),round(avg(price),2),sum(price) from products; -- 依次查询最高价格,最低价格,价格平均值,价格总量

排序

  • asc 升序排序
  • desc 降序排序

select * from products order by score desc , price asc ; # 按score 降序,price 升序

select * from products order by price asc; --按价格升序排列

select * from products order by price desc; --按价格降序排列

select * from products order by category_id asc, score desc; --先按category_id升序排列,如果category_id相同则安score降序排列

分组查询

注意:分组查询的查询列,只能出现:分组字段,聚合函数

select

分组字段1,分组字段2, ... ... ,

聚合函数1,聚合函数2, ... ...

from table_name

group by 分组字段1,分组字段2, ... ...

select category_id,count(*) as '每组个数' from products group by category_id ; -- 分组查询,综管有三组,并显示出每组的个数

再强调下,select 后面跟的列只能是后面group by 用的列,与聚合函数。

select

count(*) as '每组个数',

round(avg(price),2) as '每组价格平均数',

max(price) as '每组最高价格',

min(price) as '每组最低价格'

from products group by category_id ;

-- 这个查询是不是就有意义了。

having 和 where 有什么区别

having 是对分组聚合之后的结果进行过滤,where是在对分组前的数据进行过滤

where -> group by ->聚合 -> habing

having 后面可以使用聚合函数(统计函数),where后面不可以使用聚合函数

select

count(*) as '每组个数',

round(avg(price),2) as '每组价格平均数',

max(price) as '每组最高价格',

min(price) as '每组最低价格'

from products group by category_id having max(price) < 3000; --这里的max(price) 可以写成 【每组最高价格】不能写成 【'每组最高价格'】

-- 查询出每组最高价格小于3000 的统计信息

limit

1、起始索引默认是从0开始,如果你写的代码起始索引为0,则可以不写

 select * from products limit 2; -- 查询前两行数据

select * from products limit 1,1; -- 查询跳过第一行后的一个数据

这个分页自己学习试试,有什么不明白的可以留言

查询某也数据:limit (页数-1)*页条数,页条数

求总页数:

方法一:(总条数+页条数-1) / 页条数

方法二:

总行数%页条数>0 总行数/条数+1

总行数%页条数=0 总行数/条数

方法三:ceil (总条数/总行数)

常用函数

round(1234.1234,12,2) #四舍五入,保留2位小数

ceil(123.111) #向下取整,舍去小数


http://www.ppmy.cn/embedded/136820.html

相关文章

CMS那点事

大家好&#xff0c;今天我们来深入探讨JVM垃圾回收机制中备受关注的老年代垃圾回收器——CMS&#xff08;Concurrent Mark Sweep&#xff09;。 CMS垃圾回收算法&#xff1a;标记-清理 CMS的核心算法是标记-清理。简单来说&#xff0c;它分为两个主要步骤&#xff1a; 标记&a…

外贸行业热门CRM系统大盘点

在全球化的今天&#xff0c;外贸行业面临着激烈的竞争和复杂的市场环境。为了在这个竞争激烈的市场中脱颖而出&#xff0c;企业需要有效的客户关系管理&#xff08;CRM&#xff09;系统来帮助他们管理客户信息、优化销售流程和提高客户满意度。本文将盘点外贸行业中一些热门的C…

Redis设计与实现 学习笔记 第十六章 Sentinel

Sentinel&#xff08;哨岗、哨兵&#xff09;是Redis的高可用性&#xff08;high availability&#xff09;解决方案&#xff1a;由一个或多个Sentinel实例&#xff08;instance&#xff09;组成的Sentinel系统可以监视任意多个主服务器&#xff0c;以及这些主服务器属下的从服…

C#强大的应用场景和优势

一、简洁优雅的语法 清晰的代码结构 C# 采用了类似于 C 和 C++ 的语法风格,但更加简洁和易读。它具有明确的代码块结构,通过大括号来界定代码的范围,使得代码的层次结构一目了然。例如,在 C# 中定义一个类和方法非常直观:class MyClass {public void MyMethod(){// 方法体…

Ubuntu 20.04配置ollama并下载安装调用本地大语言模型

Ubuntu 20.04配置ollama并下载安装调用本地大语言模型 ollama 介绍(来自ChatGPT)主要特点 ollama开发环境预配置ollama在ubuntu下的安装直接安装压缩包安装创建开机ollama的脚本启动ollama ollama在ubuntu下的运行 ollama 介绍(来自ChatGPT) Ollama 是一种新的本地语言模型管理…

C++动态库和静态库的特点以及区别

目录 命名规则使用方式发布方式资源占用运行效率更新方式加载方式其他 C的库文件包括动态库和静态库两种&#xff0c;可以说是开发的时候必然会接触的内容&#xff0c;应该都很熟悉了&#xff0c;这篇文章就简单聊一下这两种库的特点以及区别。 命名规则 在Windows系统中动态…

Autosar CP Can State Mangement规范导读

CanSM的主要功能 CAN网络通信模式控制 管理CAN网络的启动、停止和不同通信模式(如全通信、静默通信、无通信)之间的切换。通过状态机实现对CAN网络状态的精确控制,确保网络在不同条件下稳定运行。错误处理与状态报告 根据AUTOSAR基础软件的错误分类方案处理错误,包括开发错…

【vue2.0入门】认识vue工程

目录 引言一、工程目录介绍1. package.json文件2. src\App.vue3. src\components 文件夹4. src\assets 文件夹5. node_modules 文件夹6. 其他 二、安装 vuejs devtools 插件1. 下载插件2. 配置插件3. 使用插件 三、总结 引言 本系列教程旨在帮助一些零基础的玩家快速上手前端开…