初学数据库(3)

166 阅读3分钟

「这是我参与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;  //借阅状态

然后创建对应的表和添加表数据:

图书表:

image.png

借阅记录表:

image.png

用户表:

image.png

显示的数据来自多张表

1、内连接查询: [inner] join

从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.

基本语法:左表 [inner] join 右表 on 左表.字段 = 右表.字段;

例如:我们查询所有借阅了书籍的用户信息以及借阅的记录信息。

SELECT u.username,u.nick,b.bookcode FROM USER u JOIN borrow b ON u.username=b.username ;

  image.png

 

内连接可以没有连接条件: 没有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 ; 

image.png

2.2 右连接: right join: 右外连接(右连接), 以右表为主表 ****

基本语法:  from 左表 right join 右表 on 左表.字段 = 右表.字段;
右表不管能不能匹配上条件,最终都会保留:能匹配,正确的保留; 若不能匹配,左表的字段都置NULL。****

| 为了测试这个案例,在借阅记录表中创建一条用户不存在的数据。

image.png

SELECT u.username,u.nick,b.bookcode FROM USER u RIGHT JOIN borrow b ON u.username=b.username ; 

image.png


 

二、子查询

子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 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;