Linux——MySQL数据查询(day18)

目录

一、条件查询

1.1 比较运算符

1.2 逻辑运算符

1.3 模糊查询

1.4 in

1.5 between

1.6 null值判断

1.7 排序

二、聚合函数(统计函数)

2.1 count、max、min

2.2 数学函数

2.3 avg、round

2.4 时间函数

2.5 字符串函数

2.5.1 substr、left、right

2.5.2 length

2.5.3 upper、lower 

2.5.4 concat

三、分组与分页

3.1 分组

3.1.1 分组查询

3.1.2 as 取别名

3.1.3 分组后条件筛选(having)

3.2 limit分页

四、连接查询

4.1 基本连接查询

4.2 mysql三种连接查询

4.2.1 内连接查询

4.2.2  右连接查询

4.2.3 左连接查询

4.2.4 案例

4.3 子查询

4.3.1 标量子查询 

4.3.2 列级子查询

4.3.3 行级子查询

4.3.4 表级子查询

五、保存查询结果

六、小结

​6.1 sql子查询

6.2 mysql数据查询

七、练习


一、条件查询

Linux——MySQL数据查询(day18)_第1张图片

1.1 比较运算符

Linux——MySQL数据查询(day18)_第2张图片

Linux——MySQL数据查询(day18)_第3张图片

 Linux——MySQL数据查询(day18)_第4张图片

1.2 逻辑运算符

Linux——MySQL数据查询(day18)_第5张图片

Linux——MySQL数据查询(day18)_第6张图片

Linux——MySQL数据查询(day18)_第7张图片

Linux——MySQL数据查询(day18)_第8张图片

1.3 模糊查询

Linux——MySQL数据查询(day18)_第9张图片

Linux——MySQL数据查询(day18)_第10张图片

1.4 in

Linux——MySQL数据查询(day18)_第11张图片

1.5 between

Linux——MySQL数据查询(day18)_第12张图片

Linux——MySQL数据查询(day18)_第13张图片

1.6 null值判断

Linux——MySQL数据查询(day18)_第14张图片

1.7 排序

Linux——MySQL数据查询(day18)_第15张图片

 Linux——MySQL数据查询(day18)_第16张图片

 因为这里id不重复,所以直接按id降序了,hometown升序没用到

二、聚合函数(统计函数)

Linux——MySQL数据查询(day18)_第17张图片

2.1 count、max、min

Linux——MySQL数据查询(day18)_第18张图片

 count返回有13组数据

Linux——MySQL数据查询(day18)_第19张图片

 Linux——MySQL数据查询(day18)_第20张图片

2.2 数学函数

Linux——MySQL数据查询(day18)_第21张图片

2.3 avg、round

Linux——MySQL数据查询(day18)_第22张图片

2.4 时间函数

Linux——MySQL数据查询(day18)_第23张图片

2.5 字符串函数

2.5.1 substr、left、right

Linux——MySQL数据查询(day18)_第24张图片

(1)substr

Linux——MySQL数据查询(day18)_第25张图片

2.5.2 length

返回的是字节的个数,一个汉字为3个字节

 Linux——MySQL数据查询(day18)_第26张图片

2.5.3 upper、lower 

Linux——MySQL数据查询(day18)_第27张图片

2.5.4 concat

Linux——MySQL数据查询(day18)_第28张图片

三、分组与分页

3.1 分组

3.1.1 分组查询

 Linux——MySQL数据查询(day18)_第29张图片

 Linux——MySQL数据查询(day18)_第30张图片

3.1.2 as 取别名

 Linux——MySQL数据查询(day18)_第31张图片

 Linux——MySQL数据查询(day18)_第32张图片

3.1.3 分组后条件筛选(having)

Linux——MySQL数据查询(day18)_第33张图片

3.2 limit分页

Linux——MySQL数据查询(day18)_第34张图片

 Linux——MySQL数据查询(day18)_第35张图片

四、连接查询

4.1 基本连接查询

Linux——MySQL数据查询(day18)_第36张图片

Linux——MySQL数据查询(day18)_第37张图片

 Linux——MySQL数据查询(day18)_第38张图片

4.2 mysql三种连接查询

4.2.1 内连接查询

Linux——MySQL数据查询(day18)_第39张图片

Linux——MySQL数据查询(day18)_第40张图片

Linux——MySQL数据查询(day18)_第41张图片

Linux——MySQL数据查询(day18)_第42张图片

4.2.2  右连接查询

Linux——MySQL数据查询(day18)_第43张图片

 Linux——MySQL数据查询(day18)_第44张图片

4.2.3 左连接查询

Linux——MySQL数据查询(day18)_第45张图片

Linux——MySQL数据查询(day18)_第46张图片

4.2.4 案例

Linux——MySQL数据查询(day18)_第47张图片

4.3 子查询

Linux——MySQL数据查询(day18)_第48张图片

4.3.1 标量子查询 

Linux——MySQL数据查询(day18)_第49张图片

 相当于返回一个值的

Linux——MySQL数据查询(day18)_第50张图片

4.3.2 列级子查询

Linux——MySQL数据查询(day18)_第51张图片

Linux——MySQL数据查询(day18)_第52张图片

Linux——MySQL数据查询(day18)_第53张图片

 Linux——MySQL数据查询(day18)_第54张图片

Linux——MySQL数据查询(day18)_第55张图片

 2班级年纪大于1班级任意一个同学就出来

4.3.3 行级子查询

Linux——MySQL数据查询(day18)_第56张图片

Linux——MySQL数据查询(day18)_第57张图片

最上面的错误是因为max()已经进行了分组

4.3.4 表级子查询

Linux——MySQL数据查询(day18)_第58张图片

Linux——MySQL数据查询(day18)_第59张图片

五、保存查询结果

(1)

Linux——MySQL数据查询(day18)_第60张图片

Linux——MySQL数据查询(day18)_第61张图片

Linux——MySQL数据查询(day18)_第62张图片 Linux——MySQL数据查询(day18)_第63张图片

(2)合并查询 

Linux——MySQL数据查询(day18)_第64张图片

六、小结

Linux——MySQL数据查询(day18)_第65张图片6.1 sql子查询

sql语句中any、some、all的使用

都是用在子查询里面 用作比较运算

any 表示任意一个  有一个满足了结果就为true  和some是一样的效果
all 全部满足了 结果才为True

场景:
查询出在学生表当中  2班级的学生年龄 都大于1班级的所有同学、

select * from students where class_id=2 and age>all(select age from students where class_id=1)

select * from students where class_id=2 and age>(select max(age) from students where class_id=1)

查询出在学生表当中  2班级的学生年龄 任意一个大于1班级的所有同学、

select * from students where class_id=2 and age>any(select age from students where class_id=1)

select * from students where class_id=2 and age>(select min(age) from students where class_id=1)


表级查询

select t1.xs,t1.banji from (select b1.name as xs ,b2.name banji from students as b1 inner join class as b2 on b1.class_id=b2.id) as t1

6.2 mysql数据查询

条件查询:

比较条件 跟在 where后面  > < =  !=   <>
in 查询 指定一个数据容器
between  表示一个区间   1 and 10    还可以表示一个时间范围

null值的判断 如果是一个空值对象 is去判断

若是 空字符串的话 则可以使用 = 去判断

order by 字段1、字段2  排序【asc、desc】

聚合函数:
count函数  max函数 min函数 length函数 
数学函数:

avg函数  round函数 时间函数 

字符函数:
substr(对象,start,lenght)

left right

分组和分页
group by 字段

起别名 as 

分组条件的筛选 where having区别:都是用来限定条件的

where是跟在from之后

having区别 用在group by之后

limit分页  select * from student limit start【读取的位置】,count【读取的数量】

连接查询:
mysql有三种连接查询:
内连接 inner join  两种表共同的数据项
外连接:left join  参考左边的表为基准查询表,右边的表用null填充
right join 参考右边的表为基准查询表,左边的表用null填充

子查询:
1:标量子查询 一行一列 单个值
2:列级子查询  一行多列 多个值
3:行级子查询  多行一列、
4:表级子查询  多行多列 【用来做数据源了】

保存查询结果:

insert into 表 select 查询来充当数据源

union 去重的效果

union all 将多次查询的结果合并输出

七、练习

Linux——MySQL数据查询(day18)_第66张图片

-- 查询所有80后学生的姓名、性别和出生日期(筛选)
-- select sname as 姓名, if(gender,'男','女') as 性别,birth as 出生日期 from tb_student where birth BETWEEN '1980-1-1' and '1989-12-31'; 
-- select sname as 姓名,  CASE gender when 1 then '男' else '女' END as 性别,birth as 出生日期 from tb_student where birth BETWEEN '1980-1-1' and '1989-12-31'; 
-- 查询名字由4个中文字符的学生学号和姓名(运算+函数)
-- SELECT sname as 姓名,stuid as 学号 from tb_student where LENGTH(sname)/3=4  LENGTH 返回的是字节长度  一个中文3个字节 
-- 查询名字中有”不“字或“嫣”字的学生的姓名(模糊)
-- SELECT sname as 姓名,stuid as 学号 from tb_student where sname LIKE '%不%' or sname LIKE '%嫣%'
-- 查询学生选课的所有日期(去重)
-- SELECT DISTINCT seldate as 选课日期 from tb_score   DISTINCT 可以实现去重

Linux——MySQL数据查询(day18)_第67张图片 Linux——MySQL数据查询(day18)_第68张图片

Linux——MySQL数据查询(day18)_第69张图片

Linux——MySQL数据查询(day18)_第70张图片

Linux——MySQL数据查询(day18)_第71张图片

-- 查询男学生的姓名和生日按年龄从大到小排列(排序)
-- SELECT sname as 姓名,birth as 生日 from tb_student where gender=1 ORDER By birth desc;
-- 查询每个学生的学号和平均成绩(分组和聚合函数)
-- SELECT sid as 学号,avg(mark) as 平均成绩 from tb_score group by sid;

-- 查询选了两门以上的课程的学生姓名(子查询/分组条件/集合运算)
-- SELECT sname as 姓名 from tb_student where stuid in (SELECT sid as 学号 from tb_score GROUP BY sid HAVING count(sid)>2);
-- 查询选课学生的姓名和平均成绩(子查询和连接查询)
-- SELECT sname as 姓名, avgMark  as 平均分 from tb_student t1 INNER JOIN (SELECT sid ,avg(mark) as avgMark from tb_score GROUP BY sid) as t2 on t1.stuid=t2.sid;
-- 查询每个学生的姓名和选课数量(左外连接和子查询)
SELECT sname as 姓名, IFNULL(total,0) as 选课数量 from tb_student  t1 LEFT JOIN (SELECT sid,count(sid) as total from tb_score GROUP BY sid) t2 on t1.stuid=t2.sid;

Linux——MySQL数据查询(day18)_第72张图片

Linux——MySQL数据查询(day18)_第73张图片

Linux——MySQL数据查询(day18)_第74张图片

Linux——MySQL数据查询(day18)_第75张图片

Linux——MySQL数据查询(day18)_第76张图片

Linux——MySQL数据查询(day18)_第77张图片

你可能感兴趣的:(MySQL,Python,Linux,大数据,mysql,数据库,人工智能,sql)