学校要建个网站应该怎么做,云南公路建设市场网站,做公众号必了解的网站,网站建设专家推荐乐云seoMySQL基础 目录 MySQL基础一、 MySQL的结构二、 管理数据库1#xff09;查询所有的数据库2#xff09;创建数据库3#xff09;修改数据库的字符编码4#xff09;删除数据库5#xff09;切换操作的数据库 三、表的概念四、字段的数据类型4.1 整型4.2 浮点型(float和double)…MySQL基础 目录 MySQL基础一、 MySQL的结构二、 管理数据库1查询所有的数据库2创建数据库3修改数据库的字符编码4删除数据库5切换操作的数据库 三、表的概念四、字段的数据类型4.1 整型4.2 浮点型(float和double)4.3 定点数4.4 字符串4.5 二进制数据4.6 日期时间类型 五、管理表5.1 查看当前数据库的所有表5.2 创建表5.3 修改表1给表添加一个字段2给表添加多个字段3修改字段数据类型4修改字段的名称5删除表的一到多个字段6修改表名 5.4 删除表5.5 查看表结构5.6 当然也可以使用工具管理表学习课程推荐[在这里(时长847)](https://www.bilibili.com/video/BV1e64y117iM/?p18vd_sourceaf535a87de5ddfde1f3bdd19bbbc73b9)更简便---但是上面咱们列出来的SQL语言也要知道 六、管理数据从这开始是重点内容6.1 查询表的所有数据6.2 给表插入数据6.3主键-自动增长及字段-默认值设置6.4 修改数据6.4 删除表 七、 查询数据重点7.1 简单查询7.2 条件查询7.2.1 比较条件7.2.2 逻辑条件7.2.3 判空条件7.2.4 模糊条件 7.3 聚合查询7.4 排序查询7.5 分页查询7.6 分组查询7.7 sql中完成if判断7.7.1 case流程控制函数7.7.2 IF()函数7.7.3 字符串的集合操作ELT() 八、附源码 一、 MySQL的结构
先有数据库 -- 再有表 --再有数据行 -- 列 MySQL可以创建多个数据库一个库可以创建多张表一张表有多行数据一行数据有多个列字段 二、 管理数据库 注意mysql的关键字不区分大小写 1查询所有的数据库
show databases;2创建数据库
格式
create database 数据库名 default character set 字符编码 collate 字符编码校验规则;示例
create database demo default character set utf8 collateutf8_general_ci;方法二使用工具删除数据库等操作也同理右键
3修改数据库的字符编码
格式
alter database 数据库名 default character set 字符编码;例
alter database demo default character set gbk;
4删除数据库
格式
drop database 数据库名;示例
drop database demo;5切换操作的数据库
格式
use 数据库名;示例
use demo;①. 先创建两个库demo、demo1
②. 各自创建一个表这里创建的abc表 demo1同理 ③. 表里添加数据demo0demo1: 111
三、表的概念 如果要把公司的所有员工都存到数据库 1.需创建一个表来保存员工信息给表一个名字—emp且这个表名在当前的数据库下表名是唯一的一般表名的命名要见名知义首选英文名称 2.给表定义要存什么员工是一个概念对于要存员工的什么(信息)进行进一步的分解根据实际情况来分解—id、姓名、性别、年龄 3.表存数据是以行的形式来存储一个行数据就一个完整的概念对于该emp表来说它的一行数据就一个员工 4.在步骤2我们又知道员工的整体概念被分解一个个单独信息(id姓名性别年龄)这些就被称为一行的多个列正是这些多个列的信息构成一行完整的数据 5.被分解一个个单独信息我们称之为字段(属性) 6.表名—字段名的关系具体到我们现在的员工表的例子就是员工有哪些字段(属性)这样就通过表名—字段名这样的形式就把员工给描述清楚了 7.字段名和表名也是一样最好有含义首选英文名称 四、字段的数据类型
4.1 整型 存整数的 4.2 浮点型(float和double)
存小数使用的时候看需要多大的精度有效数字浮点型是存储近似值不适合用来存储必须精确的数值例如金钱
4.3 定点数 存储精确的数值 m代表有效数字的位数在1~65之间。
d代表小数位在0~30之间但是同时需要dm。 注浮点型在数据库中存放的是近似值而定点类型在数据库中存放的是精确值 4.4 字符串 4.5 二进制数据
保存图片、压缩包、视频这些如果保存到数据库先把这些转成二进制的数据再保存到数据库这个不太常用因为我们现在有其他更好的方式来存储这些大的文件 4.6 日期时间类型 注 TIMESTAMP和DATETIME的不同点 1、两者的存储方式不一样 对于TIMESTAMP它把客户端插入的时间从当前时区转化为UTC世界标准时间进行存储。查询时将其又转化为客户端当前时区进行返回。而对于DATETIME不做任何改变基本上是原样输入和输出。 2、两者所能存储的时间范围不一样 timestamp所能存储的时间范围为‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-1903:14:07.999999’。 datetime所能存储的时间范围为‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-3123:59:59.999999’。 总结TIMESTAMP和DATETIME除了存储范围和存储方式不一样没有太大区别。当然对于跨时区的业务TIMESTAMP更为合适。 五、管理表 注意mysql的关键字不区分大小写 5.1 查看当前数据库的所有表
#查看当前操作的数据库有哪些表
show tables;5.2 创建表
格式
CREATE TABLE 表名 (字段名 字段类型 NOT NULL AUTO_INCREMENT, //主键的值不能是null字段名 字段类型 , ... 字段名 字段类型 ,PRIMARY KEY (字段名)) ;** 示例 **
#创建学生表
create table student(id int(10) not null,name varchar(100),age int(2),primary key(id)
);5.3 修改表
1给表添加一个字段
格式
alter table 表名 add column 字段名 字段类型;示例
alter table student add column classes varchar(10);已设字段 再点击设计表
2给表添加多个字段
格式
alter table 表名 add 字段名 字段类型,add 字段名 字段类型,...,add 字段名 字段类型;示例
alter table student add a int,add b int,add c int;点击设计表–点击保存–可见a,b,c字段
3修改字段数据类型
格式
alter table 表名 modify column 字段名 字段类型;示例
alter table student modify column a varchar(4);点击设计表–点击保存–
4修改字段的名称
格式
alter table 表名 change column 原字段名 新字段名 字段的数据类型;示例
alter table student change column a a1 int;点击-运行已选择的– 点击设计表–点击保存–
5删除表的一到多个字段
格式
alter table 表名 drop column 字段名;alter table 表名 drop column 字段名,...,drop column 字段名;示例
alter table student drop column a1;alter table student drop column b,drop column c;点击-运行已选择的– 点击设计表–点击保存–
6修改表名
格式
alter table 原表名 rename to 新表名;示例
alter table student rename to stu;点击-运行已选择的– 刷新可见表名改为了stu
5.4 删除表
格式
drop table 表名;示例
drop table stu;点击-运行已选择的– 刷新后不见stu表了
5.5 查看表结构
格式
describe 表名;示例
describe student;点击-运行已选择的–
5.6 当然也可以使用工具管理表学习课程推荐在这里(时长8’47’)更简便—但是上面咱们列出来的SQL语言也要知道
六、管理数据从这开始是重点内容
6.1 查询表的所有数据
格式
select * from 表名;示例这里又新建了一张student表
select * from student;点击-运行已选择的–
6.2 给表插入数据
1单条全量插入数据注意 一组单引号代表字符串在给所有字段插入数据时要根据表结构的字段顺序—设计表中的顺序—给值
** 格式**
insert into 表名 values (字段1的值,字段2的值,...,字段n的值);示例
insert into student values (1,张三,14,男);2单条指定字段插入数据
格式
insert into 表名 (字段1,字段2,...,字段n) values (字段1的值,字段2的值,...,字段n的值);insert into 表名 (字段1,字段3,字段5) values (字段1的值,字段3的值,字段5的值);示例
insert into student (id,name,age) values (2,李四,15);insert into student (name,age,id) values (王五,16,3);注:插入的值要和前面指定的字段的顺序保存一致 3批量插入数据
格式
insert into 表名 values (字段1的值,字段2的值,...,字段n的值),(字段1的值,字段2的值,...,字段n的值),...(字段1的值,字段2的值,...,字段n的值);示例
insert into student values (4,lucy,14,一班),(5,小明,15,二班),(6,小红,16,一班);注在插入数据时如果某一个字段是自动递增的可以不用插入这个字段的值而由数据库自己计算填充 6.3主键-自动增长及字段-默认值设置
格式 主键字段名 字段类型 not null auto_increment,#主键-自动增长auto_increment字段名 字段类型 default 这里写要设置的默认值,#字段默认值设置default--示例
-- 创建新表student1
create table student1(id int(10) not null auto_increment,#主键-自动增长auto_incrementname varchar(100) default 不知道,#字段默认值设置default--primary key(id)
);
-- 批量插入数据
-- 主键自动递增
insert into student1 (name) values (lucy),(小明),(小红);
-- 表的字段有默认值则不给其值的话-就自动填默认值
insert into student1 (id) values (4),(5);-- 查看表的所有数据
select * from student1;6.4 修改数据
1修改一到多个指定字段的所有行的值
格式
update 表名 set 字段名 值,字段名 值,...,字段名 值;示例
把表的当前所有行的classes字段的值改成二班:
update student set classes 二班;2按条件修改指定字段的值
格式
update 表名 set 字段名 值 where 字段名 值;示例
把id为2的学生的班级修改为一班
update student set classes 一班 where id 2;3按条件修改一到多个指定字段的所有行的值 这种查询是前面2种查询的结合使用 按条件改表某一行的某几个字段,注意不加where条件会改变当前所有行的数据
格式
update 表名 set 字段名 值,字段名 值,...,字段名 值 where 字段名 值;示例
把id为3的学生的姓名改为张三年龄改为12班级改为一班
update student set name 张三,age 12,classes 一班 where id 3;6.4 删除表 删除表都是按行删除 1按条件删除
格式
delete from 表名 where 字段名 值;示例
删除学生表中id为2的对应行数据
delete from student where id 2;删除学生表中姓名为张三的对应行数据如果有多个叫就是删除多行
delete from student where name 张三;2整体删除删除表当前的所有行数据
格式
delete from 表名;示例
删除学生表的所有行数据
delete from student;注 如果表中有字段是字段递增类型的使用delete删除全表后自动递增的起始点保留。例如一个表的id已经自动递增到了10那么使用delete删除全表后再次insert插入数据时id是从10继续往后递增而不会从0开始计算。 如果想要让自动递增也回归初始状态需要把表drop掉然后重新建表。 另外如果表中有字段是字段递增类型的时候删除中间的某条数据不会影响递增的累加。例如一个表的id已经自动递增到了10那么使用delete删除id为3的那行数据再次insert插入数据时id是从10继续往后递增中间缺失的3就缺失了除非你在insert的时候指定插入的id字段的值为3。 七、 查询数据重点
7.1 简单查询
1查询所有列
格式
select * from 表名;示例
select * from student;2查询指定的列
格式
select 字段,字段,...,字段 from 表名;示例
select name,classes from student;3给查询的指定列取一个别名
格式
select 字段名 别名,字段名 别名 from 表名;示例
select name 姓名,classes 班级 from student;注取别名在多表联合查询时可能会用例如表a有一个字段叫name表b有一个字段叫name我们就可以通过设置别名来区分这两个name 4合并列查询
例如我们想做把班级和姓名放在一个列中查询展示的时候是类似二班-张三这种的
select CONCAT(classes,-,name) 班级-姓名 from student;合并查询可以做算数查询例如查询mysql和hadoop的总成绩
select name 姓名,(mysql hadoop) 总成绩 from student;5查询时添加常量列
就是直接查询一个普通的字符串这个字符串在查询中就会作为一个常量在结果集中展示
select name, age, (mysql hadoop) 总成绩, classes, 光明小学 from student;select 常量 from student;6去除某个列重复数据 使用distinct 注意在使用的时候去重的列(字段要单独查询不要和其他列一起查询 格式
select distinct 字段名 from 表名;示例
查询学生的所有的年龄查询时去除重复的年龄
select distinct age from student;7.2 条件查询
基本格式
select 字段,字段,...,字段 from 表名 where 查询条件;7.2.1 比较条件
符号含义等于大于小于大于等于小于等于!不等于between and在a和b两个值之间包含a和b
1查询所有年龄大于14岁的学生的姓名班级年龄
select name,classes,age from student where age 14;2查询所有年龄大于等于14岁的学生的姓名年龄班级
select name,classes,age from student where age 14;3查询所有年龄小于14岁的学生的姓名年龄班级
select name,classes,age from student where age 14;4查询所有年龄小于等于14岁的学生的姓名年龄班级
select name,classes,age from student where age 14;5查询所有hadoop成绩在80到90之间的学生包含80和90
select * from student where hadoop between 80 and 90;7.2.2 逻辑条件
符号含义and并且or或者
1查询二班的hadoop成绩在95分以上的学生这里查询要使用and
select * from student where classes 二班 and hadoop 95;2查询二班的mysql和hadoop成绩在95分以上的男学生
select * from student where classes 二班 and hadoop 95 and mysql 95;3查询mysql的成绩在85分以上或者hadoop成绩在95分以上的学生
select * from student where mysql 85 or hadoop 95;4查询mysql的成绩在85分以上或者haddop成绩在95分以上或者id为4的学生
select * from student where mysql 85 or hadoop 95 or id 4;5比较条件和逻辑条件混合使用
查询二班hadoop成绩在95分以上或者一班mysql成绩在85分以上的学生
select * from student where (classes 二班 and hadoop 95) or (classes 一班 and mysql 85);7.2.3 判空条件
符号含义是空字符串 is nul是null值is not null不是null值不是非 不是空字符串也不是null值
1查询name是的数据
SELECT * from student where name ;显然此表中没有name是的数据 2查询name是null的数据
SELECT * from student where name is null;显然此表中没有name是null的数据 3查询name不是null的数据is not null单纯的指的是值不是null
SELECT * from student where name is not null;4查询name不等于的数据这个里面包含不等于null,也就是说 代表的意思是不是也不是null
SELECT * from student where name ;5不等于–还可以用来判断别的值
例如
查询所有姓名不是张三的学生
SELECT * from student where name 张三;查询所有年龄不是14的学生
SELECT * from student where age 14;7.2.4 模糊条件
字段类型为字符串时查询字段值是否包含某些子串
例如查询姓张的学生都有哪些这个需要模糊查询
符号含义like包含not like不包含
模糊查询like主要是用来查询字符串,配合_或者%一起使用 _ 是匹配0到1个字符 % 是匹配0到多个字符
1查询name中含有一个张字的学生
select * from student where name like %张%;2查询姓张的学生,就是名字以张开头就行
SELECT * from student where name like 张%;3查询姓张的学生中名字是三个字的
SELECT * from student where name like 张__;显然此表中没有名字是三个字的姓张的学生 4查询三个字的名字张在中间的学生
SELECT * from student where name like _张_;显然此表中没有名字是三个字的张在中间的学生 5查询除了姓张的以外的学生
SELECT * from student where name not like 张%;7.3 聚合查询
函数含义sum求和avg求平均数max最大值min最小值count计数
1查询二班学生hadoop的总分之和,使用sum(字段名),这个是用来给值是数字的列做求和的函数
select sum(hadoop) 二班hadoop总分 from student where classes 二班;2求一班mysql的平均成绩,平均数是avg(字段名),这个是用来给值是数字的列做求平均数的函数
select AVG(mysql) from student where classes 一班;3查询所有的学生中最大的年龄是多少
select max(age) from student;注意一个问题聚合查询就是需要计算哪个列的数据就只查询哪个列 4查询id最小的值是多少
select min(id) from student;5查询一班有多少个学生使用count(),括号里面可以直接用*或者某字段或者常量
select count(*) from student where classes 一班;select count(id) from student where classes 一班;select count(1) from student where classes 一班;注在之前的 MySQL版本使用count(*)效率低这个问题在MySQL8中已经不存在 7.4 排序查询
排序含义order by 字段正序order by 字段 asc正序正序可以省略ascorder by 字段 desc倒序
排序查询使用order by 字段 desc,字段desc,…,字段desc想要以哪个字段排序就order by谁
1正序查询是order by 字段 或者order by字段 asc
select * from student order by age;select * from student order by age asc;2有班级的学生按照年龄倒序排列,倒序排序使用orderby 字段 desc
select * from student where classes is not null order by age desc;3可以排序多个字段并且正序倒序可以混合使用
根据年龄正序排序如果年龄相同则根据id正序排序
select * from student order by age,id;select * from student order by age asc,id asc;根据年龄正序排序如果年龄相同则根据班级倒序排序如果班级也相同则根据id正序排序
select * from student order by age,classes desc,id;5如果where条件和order by同时使用order by放在where条件的后面
select * from student where classes is not null order by age;7.5 分页查询
分页查询就是在已查询得到的结果集中截取其中一部分。
格式 limit 偏移量,步长 limit 步长这种写法是默认偏移量的值是0
名词解释
偏移量查询的起始位置到起始第一行数据的差的行数。如果偏移量的值是0就是从第1行开始查询。
步长就是当前查询的条数。
例如
分页查询学生表从第1行开始查询3条数据
select * from student limit 0,3;select * from student limit 3;分页查询学生表从第3行开始查询4条数据
select * from student limit 2,4;如果我们现在有个查询包含条件where、分页limit和排序先where然后order by然后是limit
select * from student where classes is not null order by age limit 1,3;7.6 分组查询
按照指定的一个或多个字段分组查询主要用于统计数据分组查询多数时候与聚合查询一起使用
格式
group by 字段 1查询表中一班和二班都是多少人就是根据班级分组查询
select classes,count( classes) from student group by classes;考虑到班级可能存在null值的情况
select classes,count( classes) from student where classes is not null group by classes;4在做完分组之后可以在分组上做聚合查询聚合查询结果是每个分组的自己的结果
查询每个的班级的学生总数和hadoop成绩的最高分
select classes,count(classes) 学生数,max(hadoop) 班级hadoop最高分 from student where classes is not null group by classes;5可以根据多个字段来分组
例如统计每个班的男女生都是多少人
我们可以在group by class之后在加入一个字段sex做更细致的分组就变成group by class,sex意思就是先按照班级分组然后在每个班级组的内部再按照性别分组最后得到的结果就是精细到班级的性别的分组这个时候我们再使用聚合查询的时候实际上是在做每个班级内部的性别分组基础上做聚合查询
select class,count(class) 班级中每个性别数,sex,count(sex),max(hadoop) from student where classes is not null group by classes,sex;6对分组查询的聚合函数结果加筛选条件
示例1查询班级人数大于1个人的班级 首先先按照班级做分组查询并且对每个班级的人数进行计数 然后再按照计数看大于1的计数,使用having count(class) 1筛选
select classes,count(classes) from student where classes is not null group by classes having count(classes) 1;示例2查询hadoop的最高分大于90分的班级有哪些 做班级分组查询并且在分组的基础上对hadoop做max查询 用having 筛选max中大于90的数据
select classes,max(hadoop) from student where classes is not null group by classes having max(hadoop) 90;注意 分组查询一般是与聚合查询结合使用针对每个分组去做聚合最大值最小值计数…e查询中如果有where、group by(包含having)、order by使用的顺序group by(包含having) 必须在where之后orderby之前 select classes,max(hadoop) from student where classes is not null group by classes having max(hadoop) 90 order by classes;查询中如果有where、group by(包含having)、order by、limit使用的顺序groupby(包含having) 必须在where之后order by之前limit必须在orderby之后 也就是 where group by order by limit 这样我们前面学习的所有查询就都可以任意混合使用了7.7 sql中完成if判断
数据准备:
新建一张user表,如下 sex: 0-男1-女3-未知 level: 1-超级VIP客户2-VIP客户3-普通客户
7.7.1 case流程控制函数
写法一
格式
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END示例
查询user表性别用中文0-男1-女3-未知表示
SELECT name,(
CASE sex
WHEN 0 THEN 男
WHEN 1 THEN 女
ELSE 未知
END
) 性别
FROM user;写法二
格式
CASE
WHEN condition1 THEN returnvalue1
WHEN condition2 THEN returnvalue2
WHEN condition3 THEN returnvalue3
……
ELSE defaultreturnvalue
END示例
查询user表性别用中文0-男1-女3-未知表示
SELECT name,(
CASE
WHEN sex0 THEN 男
WHEN sex1 THEN 女
ELSE 未知
END
) 性别
FROM user;7.7.2 IF()函数
使用CASE函数可以实现非常复杂的逻辑判断可是若只是实现“如果符合条件则返回A否则返回B”这样简单的判断逻辑的话使用CASE函数就过于繁琐。 MySQL提供了IF()函数用于简化这种逻辑判断。
格式
IF(expr1,expr2,expr3);示例
查询user表性别sex值为3的显示为“未知性别”其他显示为“正常性别”
select name,sex,if(sex 3,正常性别,未知性别) from user;特殊地if函数的简化版专门用来判断null值 格式 #判断 如果value1 不是null,返回value1如果value1 为null,返回value2;
ifnull(value1,value2) 示例
SELECT IFNULL(abc,bcd),IFNULL(null,bcd);7.7.3 字符串的集合操作ELT()
格式
#如果 N 1返回 str1如果N 2返回 str2等等。如果 N 小于 1 或大于参数的数量返回 NULL。
ELT(N,str1,str2,str3,...)示例
查询user表把level的值转化为中文1-超级VIP客户2-VIP客户3-普通客户
SELECT name,ELT(
level,
超级VIP,
VIP,
普通
) 客户类型
FROM user;八、附源码
-- SHOW TABLES;
#学生表主键-id,name,age,classes
#主键的字段不能是null
create table student(id int(10) not null,name varchar(100),age int(2),primary key(id)
);
SHOW TABLES;
--
alter table student add column classes varchar(10);-- 添加多个字段
alter table student add a int,add b int,add c int;-- 修改a的数据类型为vachar
alter table student modify column a varchar(4);-- 将字段名a改为a1
alter table student change column a a1 varchar(4);-- 删除a1字段
alter table student drop column a1;
-- 删除b,c字段
alter table student drop column b,drop column c;-- 将表名student改为stu
alter table student rename to stu;-- 删除stu表
drop table stu;-- 查看表结构
describe student;-- 查看表的所有数据
select * from student;-- 插入数据
insert into student values (1,张三,14,二班);-- 单条指定字段插入数据注意插入的值要和前面指定的字段的顺序保存一致
insert into student (id,name,age) values (2,李四,15);
insert into student (name,age,id) values (王五,16,3);-- 批量插入数据
insert into student values (4,lucy,14,一班),(5,小明,15,二班),(6,小红,16,一班);-- 主键-自动增长及字段-默认值设置
-- 创建新表student1
create table student1(id int(10) not null auto_increment,#主键-自动增长auto_incrementname varchar(100) default 不知道,#字段默认值设置default--primary key(id)
);-- 批量插入数据
-- 主键自动递增
insert into student1 (name) values (lucy),(小明),(小红);
-- 表的字段有默认值则不给其值的话-就自动填默认值
insert into student1 (id) values (4),(5);-- 查看表的所有数据
select * from student1;-- 把表的当前所有行的classes字段的值改成二班
update student set classes 二班;-- 把id为2的学生的班级修改为一班
update student set classes 一班 where id 2;-- 把id为3的学生的姓名改为张三年龄改为12班级改为一班
update student set name 张三,age 12,classes 一班 where id 3;-- 删除学生表中id为2的对应行数据
delete from student where id 2;-- 删除学生表中姓名为张三的对应行数据如果有多个叫就是删除多行
#1,3都叫张三所以此操作会将一和三行的数据都删掉
delete from student where name 张三;-- 删除学生表的所有行数据
delete from student;-- 查询指定的列
select name,classes from student;-- 给查询的指定列取一个别名
select name 姓名,classes 班级 from student;-- 把班级和姓名放在一个列中查询展示的时候是类似二班-张三这种的
select CONCAT(classes,-,name) 班级-姓名 from student;-- 添加多个字段
alter table student add mysql int,add hadoop int;-- 合并查询可以做算数查询例如查询mysql和hadoop的总成绩
select name 姓名,(mysql hadoop) 总成绩 from student;-- 查询时添加常量列
select name, age, (mysql hadoop) 总成绩, classes, 光明小学 from student;
select 常量 from student;-- 去除某个列重复数据
-- 使用distinct 注意在使用的时候去重的列(字段要单独查询不要和其他列一起查询
-- 查询学生的所有的年龄查询时去除重复的年龄
select distinct age from student;-- 条件查询
-- 1查询所有年龄大于14岁的学生的姓名班级, 年龄
select name,classes,age from student where age 14;
-- 2查询所有年龄大于等于14岁的学生的姓名年龄班级
select name,classes,age from student where age 14;
-- 3查询所有年龄小于14岁的学生的姓名年龄班级
select name,classes,age from student where age 14;
-- 4查询所有年龄小于等于14岁的学生的姓名年龄班级
select name,classes,age from student where age 14;
-- 5查询所有hadoop成绩在80到90之间的学生包含80和90
select * from student where hadoop between 80 and 90;-- 逻辑条件
-- 1查询二班的hadoop成绩在95分以上的学生这里查询要使用and
select * from student where classes 二班 and hadoop 95;
-- 2查询二班的mysql和hadoop成绩在95分以上的男学生
select * from student where classes 二班 and hadoop 95 and mysql 95;
-- 3查询mysql的成绩在85分以上或者hadoop成绩在95分以上的学生
select * from student where mysql 85 or hadoop 95;
-- 4查询mysql的成绩在85分以上或者haddop成绩在95分以上或者id为4的学生
select * from student where mysql 85 or hadoop 95 or id 4;
-- 5比较条件和逻辑条件混合使用
-- 查询二班hadoop成绩在95分以上或者一班mysql成绩在85分以上的学生
select * from student where (classes 二班 and hadoop 95) or (classes 一班 and mysql 85);-- 判空条件
-- 1查询name是的数据
SELECT * from student where name ;
-- 2查询name是null的数据
SELECT * from student where name is null;
-- 3查询name不是null的数据is not null单纯的指的是值不是null
SELECT * from student where name is not null;
-- 4查询name不等于的数据这个里面包含不等于null,也就是说 代表的意思是不是也不是null
SELECT * from student where name ;
-- 5不等于--还可以用来判断别的值
-- 查询所有姓名不是张三的学生
SELECT * from student where name 张三;
-- 查询所有年龄不是14的学生
SELECT * from student where age 14;-- 模糊条件
-- 1查询name中含有一个张字的学生
select * from student where name like %张%;
-- 2查询姓张的学生,就是名字以张开头就行
SELECT * from student where name like 张%;
-- 3查询姓张的学生中名字是三个字的
SELECT * from student where name like 张__;
-- 4查询三个字的名字张在中间的学生
SELECT * from student where name like _张_;
-- 5查询除了姓张的以外的学生
SELECT * from student where name not like 张%;-- 聚合查询
-- 1查询二班学生hadoop的总分之和,使用sum(字段名),这个是用来给值是数字的列做求和的函数
select sum(hadoop) 二班hadoop总分 from student where classes 二班;
-- 2求一班mysql的平均成绩,平均数是avg(字段名),这个是用来给值是数字的列做求平均数的函数
select AVG(mysql) from student where classes 一班;
-- 3查询所有的学生中最大的年龄是多少
select max(age) from student;
-- 4查询id最小的值是多少
select min(id) from student;
-- 5查询一班有多少个学生使用count(),括号里面可以直接用*或者某字段或者常量
select count(*) from student where classes 一班;
select count(id) from student where classes 一班;
select count(1) from student where classes 一班;-- 排序查询
-- 1正序查询是order by 字段 或者order by字段 asc
select * from student order by age;
select * from student order by age asc;-- 2有班级的学生按照年龄倒序排列,倒序排序使用orderby 字段 desc
select * from student where classes is not null order by age desc;
-- 3可以排序多个字段并且正序倒序可以混合使用
-- 根据年龄正序排序如果年龄相同则根据id正序排序
select * from student order by age,id;
select * from student order by age asc,id asc;
-- 根据年龄正序排序如果年龄相同则根据班级倒序排序如果班级也相同则根据id正序排序
select * from student order by age,classes desc,id;
-- 5如果where条件和order by同时使用order by放在where条件的后面
select * from student where classes is not null order by age;-- 分页查询
-- 分页查询学生表从第1行开始查询3条数据
select * from student limit 0,3;
select * from student limit 3;
-- 分页查询学生表从第3行开始查询4条数据
select * from student limit 2,4;
-- 如果我们现在有个查询包含条件where、分页limit和排序先where然后order by然后是limit
select * from student where classes is not null order by age limit 1,3;-- 分组查询
-- 1查询表中一班和二班都是多少人就是根据班级分组查询
select classes,count( classes) from student group by classes;
-- 考虑到班级可能存在null值的情况
select classes,count( classes) from student where classes is not null group by classes;
-- 4在做完分组之后可以在分组上做聚合查询聚合查询结果是每个分组的自己的结果
select classes,count(classes) 学生数,max(hadoop) 班级hadoop最高分 from student where classes is not null group by classes;
-- alter table student add column sex varchar(10);
-- 5可以根据多个字段来分组
-- 统计每个班的男女生都是多少人
select classes,count(classes) 班级中某个性别数,sex,count(sex),max(hadoop) from student where classes is not null group by classes,sex;
-- 6对分组查询的聚合函数结果加筛选条件
-- 示例1查询班级人数大于1个人的班级
select classes,count(classes) from student where classes is not null group by classes having count(classes) 1;
-- 示例2查询hadoop的最高分大于90分的班级有哪些
select classes,max(hadoop)
from student
where classes is not null
group by classes
having max(hadoop) 90;-- 7.7 sql中完成if判断
-- 数据准备
-- 新建一张user表
-- sex0-男1-女3-未知
-- level1-超级VIP客户2-VIP客户3-普通客户
create table user(id int(10) not null,name varchar(100),sex int(10),age int(2),level int(10),primary key(id)
);
-- 批量插入数据
insert into user values (1,张三,0,12,1),(2,李四,3,11,2),(3,王五,1,14,3);
SELECT * FROM user;
-- 7.7.1 case流程控制函数
-- 查询user表性别用中文0-男1-女3-未知表示
SELECT name,(
CASE sex
WHEN 0 THEN 男
WHEN 1 THEN 女
ELSE 未知
END
) 性别
FROM user;
-- 写法二
SELECT name,(
CASE
WHEN sex0 THEN 男
WHEN sex1 THEN 女
ELSE 未知
END
) 性别
FROM user;
-- 7.7.2 IF()函数
-- 查询user表性别sex值为3的显示为“未知性别”其他显示为“正常性别”
select name,sex,if(sex 3,正常性别,未知性别) from user;
-- 特殊地if函数的简化版专门用来判断null值
SELECT IFNULL(abc,bcd),IFNULL(null,bcd);
-- 7.7.3 字符串的集合操作ELT()
-- 查询user表把level的值转化为中文1-超级VIP客户2-VIP客户3-普通客户
SELECT name,ELT(
level,
超级VIP,
VIP,
普通
) 客户类型
FROM user;