表格字段设置如图
语句:
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