创建表
Create table 表名
例: create table person(
id int primary key,
name varchar(16) not null,
age int,
phone varchar(11),
address varchar(256)
);
插入数据(增)
insert into person(id,name,age,phone,address)
values(1,'yang',22,'1232323','中国上海')
查询数据(查)
1. 查询所有数据
select * from hero
2.统计表中有多少数据
select count (*) from hero
3.分页查询
显示前5条数据
select * from hero limit 0,5
修改数据(改)
update hero set hp = 818 where id = 1
删除数据(删)
delete from hero where id = 1
where子句
查询出,名字叫「yang」,年龄为「22」的记录
select * from person
where name ='yang'&&22;
HAVING 子句
HAVING 子句在我看来就是一个高配版的 where 子句,无论是我们的分组或是排序,都是基于以返回的结果集,也就是说 where 子句的筛选已经结束。
那么如果我们对排序、分组后的数据集依然有筛选需求,就用到我们的 HAVING 子句了。
例如:
select avg(age) as vage from person
group by name
having vage>23;
like子句
LIKE 子句,一般用来做一些简单的搜索查询,或者说模糊匹配,表达式主要涉及到两个符号:
- 百分号 %:匹配任意多个字符
- 下划线 _:匹配固定一个字符
例:查询所有的数据,找到其中 name 字段以字符「ang」结尾的数据记录集合:
select * from person where name like '%ang';
in子句
in 关键字也是使用在 where 子句的条件表达式中,它限制的是一个集合,只要字段的值在集合中即符合条件,例如:
select * from person where age in (22,30,23);
not in 反向限制,查询不是这些集合的数据
select * from person where age not in (22,30,23);
ORDER BY 子句
ORDER BY 子句根据一列或者多列的值,按照升序或者降序排列数据。某些数据库就默认以升序排列查询结果。
ASC 表示数据结果集按升序排序,DESC 表示数据结果集按降序排序。
select * from person order by id desc;
GROUP BY 子句
GROUP BY 子句用于将查询返回的结果集进行一个分组,并展示各个分组中排在第一个的记录,将分组中其余成员隐藏。
select * from person group by name;
平均值
select avg(age) as '平均年龄' from person group by name;
多表查询
join操作
在数据库的查询中,多表连接查询是一大难点,也是多表查询里的重点。连接主要有以下四种情况:
INNER JOIN或者JOIN(内连接):如果表中有至少一个匹配,则返回行 【在语法中可以省略INNER关键字】
select a.*, b.* from tablea a
inner join tableb b
on a.id = b.id
LEFT JOIN(左连接):从左表返回所有的行,如果右表中没有匹配,对应的列返回Null
select a.*, b.* from tablea a
left join tableb b
on a.id = b.id
RIGHT JOIN(右连接):从右表返回所有的行 ,如果左表中没有匹配,对应的列返回Null
select a.id aid,a.age,b.id bid,b.name from tablea a
right join tableb b
on a.id = b.id
FULL JOIN(全连接):只要其中一个表中存在匹配,则返回行(即结合左连接和右连接的结果)
select a.id aid,a.age,b.id bid,b.name from tablea a
left join tableb b
on a.id = b.id
union
select a.id aid,a.age,b.id bid,b.name from tablea a
right join tableb b
on a.id = b.id