文章目录
- 新建数据库
- 新建表
- 增、删、改、查
- select 查找
- insert 添加
- delete 删除
- update 修改
- where 扩展
- = < > <= >= != <> 比较运算符
- and or 逻辑运算符
- between...and... 介于..和..之间
- in 包含
- like 模糊查询
- is null 为空的
- 查询扩展
- order by 排序
- limit start count / count offset start 限制查询
- 聚合查询
- group by 分组查询
- having 分组后筛选
- 综合练习
- 多表
- where 多表查询
- join on 内、外连接
- union 属性相同 合表
新建数据库
新建表
主键:像人的身份证号一样,唯一代表。
右键表->新建 输入内容
添加数据
增、删、改、查
select 查找
select 属性名 form 表名
select name, sex, age from student
* 查找所有信息
select * from student
where 筛选符合条件的
select * from student where sex = '男'
insert 添加
insert into 表名(要添加的属性) value(添加的属性值)
insert into student(name, sex, age, classid) value("小李李","男", 18, 2)
delete 删除
delete form 表名 where 删除符合的条件
delete from student where id = 3
表示为 删除id值为3的人信息。
update 修改
update 表名 set 要改的属性 where 筛选需要改的条件
表示为将 id 为 4 的人的姓名改成哈哈,性别改成女,年龄改为 2。
update student set name="哈哈", sex="女", age=2 where id = 4
where 扩展
可以发现删、改、查、都需要查找目标用到where
= < > <= >= != <> 比较运算符
和上面 = 用法相似
and or 逻辑运算符
select * from student where sex="男" and math > 60 or chinese > 60 and sex="女"
between…and… 介于…和…之间
相当于 >= <=
in 包含
方便批量操作
like 模糊查询
需要配合占位符使用,不加占位符与等号没有区别
_代表一位字符
%代表任意位字符(0位也算)
is null 为空的
查询扩展
order by 排序
asc 升序 desc 降序
select * from student order by age asc
limit start count / count offset start 限制查询
select * from student limit 2, 3
聚合查询
sum() avg() count() max() min() 配合分组使用
group by 分组查询
求男女年龄平均值
select sex, sum(age)/count(age), avg(age) from student group by sex
having 分组后筛选
求男女数学平均分后,只查看男生的。
select sex, avg(math) from student group by sex having sex = "男"
综合练习
含义:挑选男生,以个人(id)分组,平均分大于60的,以总分降序,只显示前三人,的名字、性别、总分、平均分。
注意书写顺序。
select name, sex, sum(math + english+ chinese) 总分, sum(math + english+ chinese) / 3 平均分 from student where sex = "男" group by id having 平均分 > 60 order by 总分 desc limit 0, 3;
多表
下面例子以如下表操作。
student:
id | name | sex | age | address | math | chinese | english | class |
---|---|---|---|---|---|---|---|---|
2 | 李四 | 男 | 18 | 保定 | 90 | 87 | 77 | 1 |
3 | 王浩 | 男 | 10 | 廊坊 | 66 | 77 | 22 | 1 |
4 | 哈哈 | 女 | 2 | 北京 | 78 | 76 | 55 | 1 |
5 | 杜甫 | 男 | 19 | 上海 | 67 | 72 | 88 | 2 |
6 | 花花 | 女 | 46 | 天津 | 45 | 34 | 98 | 2 |
7 | 丽丽 | 女 | 7 | 河南 | 56 | 87 | 78 | 2 |
8 | 小明 | 女 | 37 | 河北 | 98 | 78 | 67 | 2 |
9 | 小李 | 女 | 25 | 邯郸 | 67 | 46 | 56 | 3 |
10 | 小花 | 女 | 28 | 石家庄 | 23 | 65 | 45 | 3 |
11 | 小王 | 女 | 13 | 无 | 78 | 45 | 34 | 3 |
12 | 李华 | 女 | 20 | 无 | 99 | 56 | 23 | 3 |
13 | 李玉与 | 男 | 16 | 无 | 45 | 78 | 65 |
class:
cid | class_num |
---|---|
1 | 2301 |
2 | 2302 |
3 | 2303 |
4 | 2304 |
where 多表查询
如果我们不用 where 而是直接合表,会显示笛卡尔积的结果,显然不是我们需要的。
样例截图未全截,明白意思即可。
select * from class, student
我们需要的是班级编号与学生班级编号一一对应的和表结果,可以在where后面加上需要的判断条件来显示。
select * from class, student where class.cid = student.class
join on 内、外连接
[inner] join 内连接 与 where 用法相似
select * from class join student on class.cid = student.class
left [outer] join 左外连接
select * from student left join class on class.cid = student.class
可以发现student中班级为空的也展现出来了。
right [outer] join 右外连接
与左连接相同,左右的区分,就是看书写的顺序而已。
菜鸟教程里的图解,还是很容易理解之间的区别的。
union 属性相同 合表
将男女筛选出来再合起来。
select * from student where sex="男"
union
select * from student where sex="女"