【SQLite】基本查询语句

正文索引 [隐藏]

数据库的查询指令非常灵活,想怎么查就怎么查,我们就来过一遍基本查询方法,我们先把数据库带入到sqlite里面,数据库我已经放好链接
lib.sql
把sql文件和数据库放在同一目录下,然后用.read lib.sql,之后可以看到五张表
1

一、基础查询

1. 查询数据字段重命名
因为sqlite属于轻量级数据库的原因查询后的数据是不显示字段的,所有这个就没有效果

select id,name as '姓名',author '作者',price from book;

2. 去重查询
1
3. 升序/降序查询
desc是降序是,默认都是升序,如果担心值一样排序问题咋办,还要第二排序

select * from book order by price desc,id;

1
4. 分组查询
具体怎么用呢,比如我想查一个表里面男的有几个,女的有几个,分组查询的优势就体现出来了,具体语法为
select sex,count(id) from reader group by sex;

1
一般查询加条件都是where,但是分组的时候条件是having,具体语法如下

select avg(price),publishHouse from book group by publishHouse having avg(price)>45;

5. 模糊查询
select * from reader where name like '孙%';

如果要求只要名字有孙的话,可以用%孙%即可

1
6. 求最大值
select max(price) from book;

7. 求两者之间的数据
select * from book where between 40 and 50;

8. 求不能有这个值的数据
select * from book where publishHouse not in('清华大学出版社','人民文学出版社');

二、连接查询

查询的时候最好两张表都用select * from table看一下

下面三种为内连接,外连接用的极少

1. 比如我想查询借过书的读者编号、名字、借书日期、还书日期,语法如下
select reader.id,reader.name,borrowdate,returndate from reader,borrowinfo where reader.id = borrowinfo.readerid;

1
2. 查询有借阅历史的书籍编号、书名、借书日期、还书日期,具体语法如下
select book.id,book.name,borrowdate,returndate from book inner join borrowinfo on book.id = borrowinfo.bookid;

以上inner join相当于逗号,on相当于条件where

1
前面是两张表关联查询,下面是三张表查询
3. 读者借阅情况(读者姓名、借阅的书名、借阅时间、归还日期)
select reader.name,book.name,borrowdate,returndate from book,reader,borrowinfo where reader.id = borrowinfo.readerid and book.id = borrowinfo.bookid;

1

三、子查询

1. 查询高于平均价格的图书信息

select * from book where price > (select avg(price) from book)

2. 查询借过书的读者信息
select * from reader where id in (select readerid from borrowinfo);

1
还有一种写法是,效果是一样的

select * from reader where exists (select * from borrowinfo where reader.id = borrowinfo.readerid);

3. 查询从来没借过书的读者信息
select * from reader where id not in (select readerid from borrowinfo);

4. 查询所有没借出过的图书信息
select * from book where not exists (select bookid from borrowinfo where borrowinfo.bookid=book.id);

blank