【MySQL学习篇】— 查询大套餐
分组查询(group by)
USE testyao;
CREATE TABLE market(
id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
goodName VARCHAR(40) COMMENT '商品名称',
goodCategroy VARCHAR(40) COMMENT '商品种类'
);
#使用分组查询
# 查看 marker 表中商品的种类
SELECT goodCategroy FROM market GROUP BY goodCategroy;
#查看 商品种类 中是否有 玩具类型 :
#后面条件使用 having 关键字
SELECT goodCategroy FROM market GROUP BY goodCategroy HAVING goodCategroy='玩具';
分页查询(limit(起始下标,每页显示的数据量))
# market 表中有7条记录,每页显示3条,总共分3页
#获取第一页
SELECT * FROM market LIMIT 0,3;
#获取第二页
SELECT * FROM market LIMIT 3,3;
#获取第三页
SELECT * FROM market LIMIT 6,3;
#起始下标:每页数据量乘以页码减一
SELECT * FROM market LIMIT ((pageNo-1)*pagesize),pagesize;
多表查询
多表查询时,一定要给表取别名
#格式
SELECT * FROM 表1,表2,……,表n WHERE 条件;
#现有一个部门表、一个员工表
#部门表
CREATE TABLE dept(
id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '部门编号',
deptName VARCHAR(40) COMMENT '部门名称'
);
#员工表
CREATE TABLE emp(
id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '员工编号',
empNmae VARCHAR(40) COMMENT '员工名称',
salary FLOAT COMMENT '薪水',
deptId BIGINT(20) COMMENT '部门编号'
);
#找出研发部 和 测试部 所有员工名、薪水、部门名
#1. 先找出研发部、测试部的全部信息
SELECT * FROM dept WHERE dept.`deptName` IN ('研发部','测试部');
#2. 多表查询,判断条件:在第一步找到的 id 和员工表的 id 相等,即找到了对应的员工,至于要输出员工名、薪水明、部门名 在 select 后面写上对应项目即可
SELECT * FROM emp e,(SELECT * FROM dept WHERE dept.`deptName` IN ('研发部','测试部')) temp WHERE e.`deptId`=temp.id;
通过关键字查询
- 内连接
- 外连接
- 左外链接
- 右外连接
内连接:以两边表为主,只有条件同时存在时,才会有结果
#内连接:表1 inner join 表2 on 条件(多个表之间有关联的)
#查询所有部门所有员工
SELECT * FROM dept d INNER JOIN emp e ON d.id=e.deptId;
#查询研发部所有人
SELECT * FROM dept d INNER JOIN emp e ON d.`id`=e.`deptId` AND d.`deptName`='研发部';
外连接
#左外连接:left join on
#以左边的表为主,若左边满足条件,则输出,右边的不满足条件项为 null
SELECT * FROM book b LEFT JOIN publisher p ON b.`P_ID`=p.`P_ID`;
#右外链接:right join on 与左外连接同理
联合查询
# union:将两个查询语句结果合并,自动去重
#union all:不能去重
#找出研发部 和 测试部 所有员工名、薪水、部门名
#分别找到两个部门,然后用union连接
SELECT d.deptName,e.empNmae,e.salary FROM dept d,emp e WHERE d.id=e.deptID AND d.deptName ='研发部'
UNION
SELECT d.deptName,e.empNmae,e.salary FROM dept d,emp e WHERE d.id=e.deptID AND d.deptName ='测试部'
模糊查询
#查询 book 表中姓王的人出版的处 '%'代表模糊部分
SELECT * FROM book WHERE B_AUTHER LIKE '王%';
SELECT * FROM book WHERE B_AUTHER LIKE '%二%';
#只要包含 a 都能查到
SELECT * FROM book WHERE B_AUTHER LIKE '%a%';