演示数据库mysqltest 演示表 student
在看这篇文章之前我想解释一下sql语言的分类
DDL:数据库的定义,与数据库/表结构:create,drop,alter
DML: 数据操纵语言:操作表中数据 insert update delete
DCL:数据控制语言 设置访问用户的权限 安全
DQL:数据查询语言 select from where;
student 的表结构:
-
表中数据的插入(insert)
insert into student(sid,sname,sage) values("001","zhangsan",21); 批量插入 insert into student(sid,sname,sage) values(002,"zhangsan",21), (003,"zhangsan",21), (004,"zhangsan",21), (005,"zhangsan",21); 如果插入的是部分列 列名不能省略,如果是全部列 列名可以省略
解决插入数据过程中 中文乱码问题;
-
表中数据的更新(update)
update 表名 set 列名1=列的值,列名2=列的值 [where 条件] update student set sname="李四" where sid=002;
-
表中数据的删除(delete)
delete from 表明 [where 条件] delete from student where sid=001; 删除表中的所有数据 delete from student; delete和truncate的区别 delete:属于DML,一条一条的将表中数据删除 truncate:数据DDL,先删除表 再重建表 对表结构的影响; 关于哪条执行效率高:具体要看表中的数据量 如果数据比较少 delete 如果数据比较多 truncate
-
表中数据的查找(select)
select [distinct] [*] [列名1,列名2] from表名 [where 条件] distinct 去除重复的数据 查找表中的名字(不重复的) select distinct sname from student;
- 复杂查询(测试表 student(学生表 )grade(成绩表))
学生表的结构
成绩表的结构
列的别名的使用
select sage age from student;
表的别名的使用
select s.sage from student as s;
去掉重复的值
select distinct sage from student;
select运算查询+-*/都可以
select sage*1.5 from student;
select sage/1.5 from student;
select sage+10 from student;
select sage-10 from student;
条件查询
where 关键字
查询学号等于2的学生的姓名
select sname from student where sid=2;
查询学号不等于2的学生的姓名
select sname from student where sid <> 2;
还有另外一种非官方写法
select sname from student where sid != 2;
其他的条件还有
>= <= > < =
逻辑运算 or not and
select sid from student where sid>2 and sid<4;
select sname from student where sid = 3 or sid =4;
模糊查询 like
_:一个字符
%:多个字符
select * from student where sname like"x%";
select * from student where sname like"_i%";
select * from student where sname like"_i__";
排序查询
order by
asc 升序 默认就是升序
desc 降序
根据年龄降序排列
select * from student order by sage desc;
根据年龄升序排列
select * from student order by sage asc;
聚合函数 where 后面不能跟聚合函数
获得学生的个数
select count(sid) from student;
获得学生年龄的和
select sum(sage) from student;
获得年龄的最大值
select max(sage) from student;
获得年龄的最小值
select min(sage) from student;
获得年龄的平均值
select avg(sage) from studnet;
向student添加claid的列
分组 group by
根据claid 分组
select claid,count(*) from student group by claid;
having 关键字可以接聚集函数 出项在分组之后
where 关键字不可以接聚集函数 出现在分组之前
编写顺序
S F W G H O
select ... from... where... group by... having... order by
执行顺序
F W G H S O