mysql基础二(查询)

本文详细介绍了SQL查询的基本语法,包括单表查询、条件查询、排序、聚合函数、分组查询、分页查询以及多表查询(交叉连接、内连接和外连接)。着重讲解了各种操作的关键字、注意事项和执行顺序。
摘要由CSDN通过智能技术生成

单表查询

1.关键字: select from where
2.语法: select * from 表名
查询所有数据,展示所有的列 b.select 列名,列名 from 表名 -> 查询所有数据,展示指定的列
3.注意: 我们查询出来的结果都是以表的形式展示的,但是查询出来的表示一张"伪表",伪表是只读的,不能修改数据的

简单查询

1.关键字: select from where
2.语法: a.select * from 表名
查询所有数据,展示所有的列 b.select 列名,列名 from 表名 -> 查询所有数据,展示指定的列
3.注意: 我们查询出来的结果都是以表的形式展示的,但是查询出来的表示一张"伪表",伪表是只读的,不能修改数据的

条件查询

a.select * from 表名 where 条件
按照指定条件查询数据,展示所有的列 b.select 列名,列名
from 表名 where 条件
按照指定条件查询数据,展示指定的列

比较运算符< <= >= = <>大于、小于、大于(小于)等于、不等于
BETWEEN …AND…显示在某一区间的值(含头含尾)
字段 IN(set)显示在in列表中的值,例:price in(100,200) 查询id为1,3,7的商品: id in(1,3,7)
列名 LIKE ‘张pattern’模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符, 例如:first_name like '_a%';
比如:查询姓张的人:name like ‘张%’
查询商品名中带香的商品: pname like ‘%香%’
查询第二个字为想的商品: like ‘想%'
查询商品名为四个字的商品:like '
___’
IS NULL判断是否为空 不为空的就是 IS NOT NULL
逻辑运行符and (与)多个条件同时成立 全为true,整体才为true
or(或)多个条件任一成立 有真则真
not(非)不成立,例:where not(salary>100);

排序查询

1.关键字: order by desc asc
2.语法: select 列名 from 表名 order by 排序字段 ASC|DESC
3.排序规则: ASC:升序(默认) DESC:降序
4.问题:先查询还是先排序 -----先查询,最后排序
书写sql语句关键字的顺序

select 
from 
where 
group by 
having 
order by

执行顺序:
from 
where 
group by 
having 
select 
order by

先定位到要查询哪个表,然后根据什么条件去查,表确定好了,条件也确定好了,开始利用select查询
查询得出一个结果,在针对这个结果进行一个排序

聚合查询

1.我们要知道的是:聚合查询时纵向查询
2.语法: select 聚合函数(列名) from 表名 where 条件
3.聚合函数:
count(列名):统计总记录数
sum(列名):对指定列求和
avg(列名):对指定列求平均值
max(列名):对指定列求最大值
min(列名):对指定列求最小值

分组查询

1.关键字: group by
2.语法: select 聚合函数(列名) from 表名 group by 分组列 having 条件
3.注意: 分组查询一般都是和聚合函数结合使用
4.分组小技巧: 观察以哪一组分组展示 相同的合并为一组展示 不同的单独为一组展示

5.having和where的区别: a.相同点:都是筛选条件 b.不同点:
having跟在分组之后筛选
where跟在分组之前筛选

书写sql语句关键字的顺序:偏向的是关键字
select 
from 
where 
group by 
having 
order by

执行顺序:偏向的是逻辑
from 
where 
group by 
having 
select 
order by

先定位到要查询哪个表,然后根据什么条件去查,表确定好了,条件也确定好了,开始利用select查询
查询得出一个结果,在针对这个结果进行一个排序

分页查询

1.语法: select * from 表名 limit m,n
2.字母代表啥: m:每页的起始位置 n:每页显示条数
3.小技巧: 我们将整个表的每一条数据进行编号,从0开始

4.每页的起始位置快速算法: (当前页-1)*每页显示条数

5.其他分页参数:
a.每页的起始位置:(当前页-1)每页显示条数
b.int curPage = 2; - - 当前页数
c.int pageSize = 5; - - 每页显示数量
d.int startRow = (curPage - 1) * pageSize; - - 当前页, 记录开始的位置(行数)计算
e.int totalSize = select count(
) from products;- -记录总数量
f.int totalPage = Math.ceil(totalSize * 1.0 / pageSize);- -总页数
总页数 = (总记录数/每页显示条数)向上取整

/*
  select * from 表名 limit m,n
  m:每页的起始位置
  n:代表每页显示条数
*/
-- 第一页
SELECT * FROM product LIMIT 0,5;

-- 第二页
SELECT * FROM product LIMIT 5,5;

-- 第三页
SELECT * FROM product LIMIT 10,5;

-- 第四页
SELECT * FROM product LIMIT 15,5;

多表查询

1.交叉查询

1.语法: select 列名 from 表A,表B
2.注意: 交叉查询很容易出现"笛卡尔乘积"

-- 查询所有商品的具体信息
SELECT * FROM category,products;

SELECT * FROM category,products WHERE category.cid = products.`category_id`;

SELECT * FROM category c,products p WHERE c.cid = p.`category_id`;

2.内连接查询

1.关键字:inner join on -> inner 可以省略
2.语法:
a.显示内连接:select 列名 from 表A join 表B on 条件
b.隐式内连接:select 列名 from 表A,表B where 条件

-- 查询具体的商品信息->隐式内连接
SELECT * FROM category c,products p WHERE c.`cid` = p.`category_id`;

-- 查询具体的商品信息->显示内连接
SELECT * FROM category c JOIN products p ON c.`cid` = p.`category_id`;

-- 用显示内连接的方式查询"化妆品"的商品信息
/*
  on 条件1 and 条件2  -> 条件1 and 条件2是一个大条件
  
  on 条件1 where 条件2 -> 两个小条件
*/
SELECT * FROM category c JOIN products p ON c.`cid` = p.`category_id` AND c.`cname` = '化妆品';

SELECT * FROM category c JOIN products p ON c.`cid` = p.`category_id` WHERE c.`cname` = '化妆品';

3.外连接

1.关键字:outer join on -> outer可以省略
2.分类: 左外连接:select * from 表A left join 表B on 条件 右外连接:select * from 表A right join 表B on 条件
3.左外连接,右外连接,内连接区别: 左外连接:查询的是和右表的交集以及左表的全部 右外连接:查询的是和坐标的交集以及右表的全部 内连接:只查询两张表的交集
4.怎么区分左表和右表 看join,在join左边的是左表;join右边的是右表

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值