JavaWeb-8

多表操作

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注解包含了前三个注解,所以导入依赖以后,只需要在上面加三个注解就行。

需要导入依赖

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值