MySQL数据库(二)

一、筛选条件

数据准备
在这里插入图片描述

比较运算符
1.等于: = ( 注意!不是 == )
2.不等于: != 或 <>
3.大于等于: >=
4.小于等于: <=
5.小于: <
6.大于: >
7.IS NULL
8.IS NOT NULL

逻辑运算符
1.与 AND (两个条件都要满足)
2.或 OR (满足一个条件即可)
3.非 NOT (把不满足条件的挑出来)

其他操作
1.排序(order by) # 按ASCII码表
SELECT columns FROM tb_name ORDER BY col [asc/desc] ;
如 SELECT FROM student ORDER BY age; 正序:ASC(默认)
SELECT FROM student ORDER BY age DESC; 倒叙:DESC
正序:asc(默认)
倒序:desc
2.限制(limit)
SELECT columns FROM tb_name LIMIT start, count ;
LIMIT count;
LIMIT start, count;
如 SELECT
FROM student LIMIT 3; 返回前三条数据
SELECT
FROM student LIMIT 3,4; 从第3条开始返回(从0开始 ,0,1,2,3),返回4条数据
3.去重(distinct)
SELECT DISTINCT field FROM tb_name; 指定字段 (field是字段名)
SELECT DISTINCT FROM tb_name
4.模糊查询 like ‘%’
①任意多个字符: %
如 SELECT
FROM student WHERE name LIKE ‘space%’;
②2. 任意一个字符: _
如 SELECTFROM student WHERE name LIKE ‘space_’;
5.范围查询
①连续范围: BETWEEN a AND b
a <= value <= b
如 SELECT
FROM student WHERE age BETWEEN12AND18; (年龄在12和18之间)
SELECT*FROM student WHERE id>=2 AND id<=6 ;(id在2和6之间)
②间隔返回: IN
a in (10, 20, 30 […])
如 SELECT *FROM student WHERE age IN (12,18); (只有12和18两个)

总结
在这里插入图片描述

二、聚合与分组(重点和难点)

常用聚合函数
1.统计个数:COUNT(column)
2.最大值:MAX(column)
3.最小值:MIN(column)
4.求和:SUM(column)
5.平均值:AVG(column)
6.列出字段全部值:GROUP_CONCAT(column)
如 SELECT COUNT (*) FROM student;
SELECT MAX(age) FROM student;
SELECT MIN(age) FROM student;
SELECT SUM(age) FROM student;
SELECT AVG(age) FROM student;
SELECT GROUP_CONCAT(age) FROM student;

分组查询(group by)
SELECT group_column, aggregations
FROM tb_name
BY group_column;
在分组的情况下,只能够出现分组字段和聚合字段
其他的字段没有意义,会报错!
如 SELECT class FROM student GROUP BY class;
SELECT * FROM student GROUP BY class;(报错)
SELECT class ,GROUP_CONCAT(name) FROM student GROUP BY class;(列出每个班的人是谁)
SELECT age,COUNT(age) FROM student GROUP BY age; (列出每个年龄都有多少人)
SELECT class,AVG(age) FROM student GROUP BY class; (列出每个班级的平均年龄)
分组的时候不能查询未分组字段,使用聚合的时候可以使用为分组的字段

聚合筛选(having)
SELECT group_column, aggregations
FROM tb_name
GROUP BY group_column
HAVING conditions;
加having条件表达式,可以对输出的结果做出限制
如 SELECT class,AVG(age) FROM student GROUP BY class HAVING class<=2; (列出班级小于或等于2的班的平均年龄)

假如说
一个查询语句中同时包含了别名(as),聚合函数, where, having
那么他们的执行顺序是
①先是执行:where
②然后执行:聚合函数和别名
③最后执行:having
如 SELECT class,AVG(age) FROM student WHERE id<=4 GROUP BY class having class=2; (先查找id<=4的,再查找班级等于2的)
SELECT class,AVG(age)as aa FROM student WHERE id<=4 GROUP BY class ; (这里的AVG(age)别名为aa)

聚合与分组总结在这里插入图片描述

三、子查询

将一个查询的结果留下来用于下一次查询 ( select 中嵌套 select )
要求:
①嵌套在查询内部
②必须始终出现在圆括号内
#求出学生的平均年龄
select avg(age) from student;
#查找出大于平均年龄的数据
select*from student where age > 18.25;
#将求出的平均年龄的SQL语句用于查找大于平均年龄的语句中
select * from student where age > (select avg(age) from student);

四、连接查询

1.内连接(inner join)
无条件内连接:
无条件内连接,又名交叉连接/笛卡尔连接
第一张表种的每一项会和另一张表的每一项依次组合
Mysql> select * from tb1 [inner] join tb2;

有条件内连接:
在无条件内链接的基础上,加上一个on子句
当连接的时候,筛选出那些有实际意义的记录来进行组合
Mysql> select * from tb1 inner join tb2
-> on tb1_id = tb2_id;

2.外连接( {left | right} join )
左外连接: (以左表为基准)
两张表做连接的时候,在连接条件不匹配的时候
留下左表中的数据,而右表中的数据以NULL填充
mysql> select * from t1 left join t2
-> on t1_id= t2_name;

右外连接: (以右表为基准)
对两张表做连接的时候,在连接条件不匹配的时候
留下右表中的数据,而左表中的数据以NULL填充
mysql> select * from t1 right join t2
-> on t1_id= t2_name;

如果条件为真,正常显示
mysql> select * from t1 right join t2
-> on t1_id= t2_id;

总结
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值