「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」。
一、连接查询
为了测试连接查询和子查询,我们创建一些表和关联表。
创建图书和借阅记录实体类和表
//图书
public class Book {\
private int id;\
private String bookcode; //图书编号\
private String bookname; //图书名称\
private String author; //图书作者\
private String type; //图书类型\
private String publisher; //出版单位\
private String publicationdate; //出版日期\
private double price; //价格\
private int qty; //总数量\
private int remainqty; //剩余数量\
private String comment; //备注
//借阅记录\
public class Borrow {\
private int id;\
private String username; //借阅人编号\
private String bookcode; //借阅书籍的编号\
private Date starttime; //借阅开始时间\
private Date endtime; //借阅结束时间\
private String state; //借阅状态
然后创建对应的表和添加表数据:
图书表:
借阅记录表:
用户表:
显示的数据来自多张表
1、内连接查询: [inner] join
从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.
基本语法:左表 [inner] join 右表 on 左表.字段 = 右表.字段;
例如:我们查询所有借阅了书籍的用户信息以及借阅的记录信息。
SELECT u.username,u.nick,b.bookcode FROM USER u JOIN borrow b ON u.username=b.username ;
内连接可以没有连接条件: 没有on之后的内容,这个时候系统会保留所有结果。
2、外连接查询
2.1 左连接: left join : 左外连接(左连接), 以左表为主表 。
基本语法: from 左表 left join 右表 on 左表.字段 = 右表.字段;
左表不管能不能匹配上条件,最终都会保留;能匹配,正确的保留; 若不能匹配,右表的字段都置NULL。
比如:查询所有的用户信息以及他们借阅的记录信息。注意第三条数据,借阅记录信息为null
| SELECT u.username,u.nick,b.bookcode FROM USER u LEFT JOIN borrow b ON u.username=b.username ; |
|---|
2.2 右连接: right join: 右外连接(右连接), 以右表为主表 。****
基本语法: from 左表 right join 右表 on 左表.字段 = 右表.字段;
右表不管能不能匹配上条件,最终都会保留:能匹配,正确的保留; 若不能匹配,左表的字段都置NULL。****
| 为了测试这个案例,在借阅记录表中创建一条用户不存在的数据。
| SELECT u.username,u.nick,b.bookcode FROM USER u RIGHT JOIN borrow b ON u.username=b.username ; |
|---|
二、子查询
子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 SELECT、UPDATE 和 DELETE 语句中使用,而且可以进行多层嵌套。在实际开发时,子查询经常出现在 WHERE 子句中。
常用子查询:
1、排序
SELECT * FROM USER ORDER BY id;
2、分组
SELECT * FROM USER GROUP BY sex;
3、in
SELECT * FROM USER WHERE id IN(1,2);
DELETE FROM USER WHERE id IN(1,2);
查询借阅了'WX001'的用户信息:
SELECT * FROM USER WHERE username IN (SELECT username FROM borrow WHERE bookcode='WX001');
三、常用查询关键词
1、like 模糊查询:
SELECT * FROM ADMIN WHERE username LIKE '%三%'
SELECT * FROM ADMIN WHERE username LIKE '三%'
SELECT * FROM ADMIN WHERE username LIKE '%三'
2、limit 分页
//第一个参数:每页开始的下标,第二个参数:页码大小
SELECT * FROM book LIMIT 0,4;
SELECT * FROM book LIMIT 4,4;
SELECT * FROM book LIMIT 8,4;