目录
1.插入数据
注意:1,2,3例子用的表名是book_bak1,字段含义为:bno是编号的意思,bname是书名的意思,press是出版社的意思,price是价格的意思,author是作者的意思
1.不指明字段名:insert into 表名 values (值1,值2,等等)
例如:
insert into book_bak1 values('B10111','理想国','清华大学出版社',65,'小明');
注意:replace和insert有相同的作用,但replace更牛X一点,它不仅可以添加表里没有的数据,还能添加和表里主键或者唯一性约束相同的数据,它会替代之前的数据
2.指明字段名:insert into 表名 (字段名1,等等) values (值1,等等)
3.同时插入多条:insert into 表名 (字段名1,等等) values (值1,等等),(值1,等等),等等
例如:
insert into book_bak1 (`bno`,`bname`,`press`,`price`,`author`)
values
('B1114','天堂','清华大学出版社',65,'小刚'),
('B1115','活着','清华大学出版社',65,'小天'),
('B1116','平凡世界','清华大学出版社',100,'慢羊羊');
4.从另一个的数据插入目标表中:insert into 表名 select 列名 from 表名
注意:插入的字段和字段类型要与目标表一致
2.修改数据
update 表名 set 字段1=值1,字段2=值2,等等 where 条件表达式
注意:where后面加的是找到要改的数据地条件,可以理解为当什么什么则什么什么被改成什么什么
例如:
update book_bak1
set bname='阿伟',price=9
where bno='B1110';
解释:当编号为B1110时将原有的书名和价格改为阿伟和9
3.删除数据
delete from 表名 where表达式
例如:
delete from book_bak1
where bno='B10111';
还有直接清空表中数据的:truncate 表名
truncate book_bak1;
4.单表查询
注意:
- []是选择性的语句
- select *表示查询所有字段与列出所有字段效果一样
- 这次例子用的表名是book字段和1,2,3的例子一样
select的具体用法:
select 字段列
from 表名
[where 表达式]
[group by 列名]
[having 表达式]
[order by 列名 [asc/desc]]
[limit 子句];
解释:
- where表达式上面有就是条件的筛选
- from是表示查的是哪个表
- group by是分组的意思,having与它一起用来条件筛选
- order by是排序 默认是asc是升序,desc是降序
- limit是限制查询的条数
1.普通带where的查询
例子:
select * from book
where press='机械工业出版社';
2.避免重复数据查询
distinct可以去除重复的查询记录,就是把查的重复的数据去除只保留一条
系统默认是all,就是全部列举出来
select distinct press from book;
3.为表和字段去别名关键字as
例如:查询book表中出版社,并把press换成出版社
select press as '出版社' from book;
注意:as可以省略
4.带运算符的查询
例如:查询价格大于30的所有书的所有信息
select * from book
where price>30;
5.带有in关键字的
用法:[not] in (元素1,元素2,等等)
就是满足数据在元素里面的意思
例如:查询价格是39,38,56的书的所有信息
select * from book
where price in (38,39,56);
6.带有between and的
就是某个数据值在什么与什么之间
例如:查询价格在40和60之间的书的所有信息
select * from book
where price between 40 and 60;
7.带有is null的
就是判断指定字段是否为空值
例子:查询价格不为空的所有书的信息
select * from book
where price is not null;
8.带有like的
注意:
- 介绍通配符%和_
- %和_都是可以代替东西的存在
- %可以代表任意长度的字符
- _只能代表一个字符
例子:查找作者为王姓的所有书的所有信息
select * from book
where author like '王%';
9.分组查询
语句是:select 字段1 from 表名 group by 字段2 [having表达式][with rollup]
意思是按照字段2分组查找字段1,having是限制条件,with rollup是上面的记录的总和
例如:查询表book中每个作者书的价格总和,并将所有价格进行汇总。
select author,SUM(price)from book
GROUP BY author
with rollup;
10.对查询结果排序
例子:查询书的所有信息按价格的降序排列
select * from book
order BY price
desc;
11.查询结果数量限制
例子:10号的例子限制三条,意思就是查询价格最贵的三本书的所有信息
select * from book
order BY price
desc
limit 3;
12.聚合函数
- count 是用来统计记录的条数
- sum是计算字段值的总和
- AVG是用来计算字段值的平均值
- max是查询字段的最大值
- min是查询字段的最小值
注意:sum和AVG,max,min都遵守的规则:
- 如果给的行一列记录都为空值函数结果为空
- 如果有些值为空的话平均值不算他仅仅除以非空的数量
- 对呀AVG和sum如果中间结果为空则函数值为空
13.合并查询
关键字为:union
用法:一条select语句和另一台select之间用于连接
如:查询价格大于30或者机械工业出版社的书的作者和编号
select author,bno from book
where price>30
UNION
select author,bno from book
where press='机械工业出版社';
5.多表查询
注意:
- 例子中用于与book表连接的是borrow表
- borrow表的字段id就是id,bno是图书编号也是外键,rno是读者编号这里其实还有一张读者表没展示,borrowtime借书时间,backtime还书时间,latefree延迟费,damagefee 损坏费,oprator管理员编号。
一.内连接:
1.等值连接
关键字:inner join
例如:通过bno连接两个表,查询4条所有信息
SELECT *
from book inner join borrow
on book.bno=borrow.bno
limit 4;
2.自然连接
关键字:nature join
例如:和1号一样的例子
select *
from book natural join borrow
limit 4;
3.不等值连接
关键字:inner join
例如:和之前例子一样
SELECT *
from book inner join borrow
on book.bno!=borrow.bno
limit 4;
其实就把=换成!=
二.外连接查询
1.左外连接
关键字:left join
例子:与上面例子一样,不过左外连接的特性是,一左面表为主体如果右边表中没有对应的信息就填空,上面例子连接,如果没有对应就不会被查到。
select *
from book LEFT JOIN borrow
on book.bno=borrow.bno
limit 4;
2.右外连接
关键字:right join
例子:与左外连接相反
select *
from book RIGHT JOIN borrow
on book.bno=borrow.bno
limit 4;
三.子查询
1.带有in关键字的子查询
例如:查询book表中图书编号在borrow表中也有的书的名字
select bname
from book
where bno in(select bno from borrow);
2.带有exists关键字的子查询
例如:如果借书表中有编号为B11002的话就查询book表中所有的书的名字
select bname
from book
where exists (select * from borrow where bno='B11002');
3.带有any关键字的子查询
例如:查询book表中价格比borrow表中的某一个id值大的书的名字
select bname
from book
where price >any(select id from borrow);
4.带有all关键字的子查询
例如:查询book表中价格比borrow表中的所有id值大的书的名字
select bname
from book
where price >all(select id from borrow);