后端-navicat查找语句(单表与多表)
表格字段设置如图。

表格字段设置如图

语句:
1.输出
1.在学生表里找出name ,和 age列
SELECT name,age from student
1.2.找到学生表的所有信息
select * from student
1.3 在学生表里找性别为 男 的有多少个人
select count(*) from student where sex="男"
插入
insert into student(name,age,sex,class_num) values("admin",14,"女",3)
更新
update student set name="lili" ,sex="男",age=31,class_num=3 where id=5
有就是更新,没有就找不到,不更新


删
delete from student where id = 3
2.where子语句
1.运算符:
=等于
>大于
>=大于等于
<小于
<=小于等于
!= <>不等于
select * from student where age!=24

select * from student where age<24

2.逻辑运算符:
and 并且
or 或者
not 取非 主要用在is 或in
select * from student where age>=24 and sex="女" and name="admin"

select * from student where age>=24 or sex="男"

select * from student where age>=20 and age<=24

3.范围
between ..and ..范围查询,在两个值之间
in 范围查询 包含
select * from student where id between 3 and 5

select * from student where id not in(1,4,5)

4.空
is null 为null
select * from student where age is not null

5.模糊查询
模糊查询 like 为模糊查询 需要配合占位符一起使用 _代表一位字符 %代表任意位字符
select * from student where name like "张_"

select * from student where name like "张%"

select * from student where name like "%张%"

3.分页查询-limit子语句
1.语句
limit a,b ----a表示起始的索引值 b表示查询的个数
limit b offset a
select * from student limit 0,5

eg.
一页3个 pagesize
$1.第一页 page
select * from student limit 0,3

$2. 第二页
select * from student limit 3,3

$3. 第三页
select * from student limit 6,3

$4.第四页
select * from student limit 9,3

2.总结 :
select * from student limit (page-1)*pagesize,pagesize
3.位置:
limit 子语句放在最后位置
select * from student where sex="男" limit 0,3

4.排序子语句
1.语句
order by 列名 desc降序排列 || asc升序
select * from student ORDER BY age desc

2.位置:
排序子语句的相对位置
在where子语句之后 在limit子语句之前
select * from student where sex="女" order by class_num desc limit 0,3

5.分组函数和聚合函数
1.聚合函数
- -- sum()求和
- -- min()取最小值
- -- max() 取最大值
- -- avg()取平均值
- -- count()取得的记录数量
count(*)表示取得当前查询表的所有记录数
count(字段名称)不会统计为null的记录
select count(age) from student

select count(*) from student

2.分组函数
GROUP BY 字段名称 分完组之后做查找用having
select * from student group by class_num
返回第一个
表格如图:

分组之后结果返回:

返回的是class_num的第一个人
select * from student group by class_num having sex="女"

筛选性别为女的
select max(age),class_num from student GROUP BY class_num

select max(age),class_num from student GROUP BY class_num having class_num=2

6. 重命名
重命名 as 新名字 as 可以省略
select student.*,class.name 班级名,class.teacher from 学生表 as student,班级表 as class where cid=class.id

遇到表名后加空格一个新名的,就是重命名
2.多表查询
1.关系

1.1 一对一

$ 1.合并成一张表 效果最好
![]()

$ 2. 在其中一张表加入外键

&&or

$3. 单独创建一张表存关系

1.2 一对多
学生对班级

$1. 合成一张表

缺点:有多少学生这些信息得存多少遍 数据冗余

$2. 在多方加入外键 效果最好
修改班级等方便, &&查看班级多少人,只需看cid有多少个
![]()

②在1方加入外键 数据冗余

$3. 单独创建一张表存关系

1.3 多对多
学生对课程

课程对学生
$1. 合并成一张表----->重复

$2. 加外键
在谁方谁冗余
①学生方

②课程方

$3. 单独创建一张表存关系
![]()


1.4 结论:

2.查询
$1. 建立班级表和学生表
$2. 添加外键

$3. 填入数据


$4. 查询
select * from 班级表,学生表 where 学生表.cid=班级表.id

连表查询
-- 连表查询 join on
-- 内连接
-- 外连接 左外连接和右外连接
- -- 内连接 公共的部分
把where的地方换成on
select * from 班级表 join 学生表 on 学生表.cid=班级表.id

后面再加条件的话加where
select * from 班级表 join 学生表 on 学生表.cid=班级表.id where age=21
2. -- 外连接 左外连接和右外连接
#左连接 (公共的部分加上左边空的<独有的>)
select * from 班级表 left join 学生表 on 学生表.cid=班级表.id

#右连接(公共的部分加上右边空的<独有的>)
select * from 班级表 right join 学生表 on 学生表.cid=班级表.id

多个表
select * from 学生表 join 课程表 join 选课表 on 学生表.id=选课表.sid and 选课表.cid=课程表.id

select * from 学生表 join 选课表 on 学生表.id=选课表.sid join 课程表 on 选课表.cid=课程表.id

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)