多表操作
1.查询
a.内连接
代码:
# ------------------------------------------------------内连接-------------------------------------------------------- # A.查询员工的姓名,以及所属部门的名称(隐式内连接实现) select tb_emp.name as '员工姓名',tb_dept.name as '部门名称' from tb_emp,tb_dept where dept_id = tb_dept.id; #表名太长可以用空格+ 别名 select a.name as '员工姓名',b.name as '部门名称' from tb_emp a,tb_dept b where b.id = a.dept_id; # B.查询员工的姓名,以及所属部门的名称(显隐式内连接实现) select tb_emp.name as '员工姓名',tb_dept.name as '部门名称' from tb_emp inner join tb_dept on tb_emp.dept_id=tb_dept.id;
b.外连接(包括左连接和右连接,左连接左表数据全有,右连接右表数据全有)
如果后面还有条件可以加where:
select a.name, a.price, a.status, b.name from dish a left join category b on (a.category_id = b.id ) where a.price between 10 and 50 and a.status = 1;
代码:
# ------------------------------------------------------左右连接-------------------------------------------------------- # 查询员工表所有的员工姓名,和对应的部门名称链接(左外连接) select e.name,b.name from tb_emp e left join tb_dept b on e.dept_id=b.id; # 查询部门表 所有 部门的名称,和对应的员工名称(右外连接) select e.name,b.name from tb_emp e right join tb_dept b on e.dept_id=b.id;
c.嵌套查询(子查询)
1.标量子查询
代码:
# ------------------------------------------------------标量子查询-------------------------------------------------------- # 通过 教研部 查询所有属于该部门的员工信息 select * from tb_emp where tb_emp.dept_id = (select id from tb_dept where name = '教研部'); #查询 方东白 入职之后的员工信息 select * from tb_emp where entrydate > (select entrydate from tb_emp where name='方东白');
2.列子查询
代码:
# ------------------------------------------------------列子查询-------------------------------------------------------- # 查询 教研部 和 咨询部 的所有员工信息 select * from tb_emp where dept_id in (select id from tb_dept where name ='教研部' or name='咨询部');
3.行子查询
# ------------------------------------------------------行子查询-------------------------------------------------------- # 查询 入职日期和职位都相同 的所有员工信息 select * from tb_emp where (entrydate,job) = (select entrydate,job from tb_emp where name ='韦一笑');
4.表子查询
代码: a.* 可以简写查询临时表的所有信息。
# ------------------------------------------------------表子查询-------------------------------------------------------- # 查询 入职日期是“2006-01-01”之后的员工信息,及其部门名称 select a.*,b.name from (select * from tb_emp where entrydate>'2006-01-01') a ,tb_dept b where a.dept_id = b.id ;
案例(含题目和代码):
# -----------------------------------------------------------案例---------------------------------------------------- # 1.查询价格低于10元的菜品的名称、价格及其菜品的分类名称 select a.name, a.price, b.type from dish a, category b where a.category_id = b.id and a.price < 10; # 2.查询所有价格在10元(含)到50元(含)之间且状态为"起售"的菜品名称、价格及其分类名称(即使菜品没有分类,也需要将菜品查询出来). select a.name, a.price, a.status, b.name from dish a left join category b on (a.category_id = b.id ) where a.price between 10 and 50 and a.status = 1; # 3.查询每个分类下最贵的菜品,展示出分类的名称、最贵的菜品的价格﹒ select b.name, max(a.price) from dish a, category b where a.category_id = b.id group by b.name; # 4.查询各个分类下菜品状态为"起售",并且该分类下菜品总数量大于等于3的分类名称 select b.name,count(*) from dish a,category b where a.category_id = b.id and a.status = 1 group by b.name having count(*)>=3; # 5.查询出"商务套餐A"中包含了哪些菜品(展示出套餐名称、价格,包含的菜品名称、价格、份数) select a.name, a.price, c.name, c.price, b.copies from setmeal a, setmeal_dish b, dish c where a.id = b.setmeal_id and b.dish_id = c.id and a.name = '商务套餐A'; # 6.查询出低于菜品平均价格的菜品信息(展示出菜品名称、菜品价格) select a.name, a.price from dish a where price < (select avg(a.price) from dish a);
2.事务
3.索引
a.索引( index): 是帮助数据库高效获取数据的数据结构。
b.代码:
create index ind on dish(id);
c.优缺点对比
d.索引操作
Mybatis
1.构建项目的基本操作(现在定义用户类我们要用包装类)
配置文件代码:
2.@mapper知识点
会自动生成接口类,将其交给IOC管理容器,需要使用的时候,可以直接定义一个接口,然后通过Autowired进行装配
3.详细步骤
@Select:可以改为其他操作。
4.配置Sql语句
5.JDBC
6数据库连接池
7.Lambook注解
@Data注解包含了前三个注解,所以导入依赖以后,只需要在上面加三个注解就行。
需要导入依赖