单表查询
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右边的是右表