MySQL表的增删改查(进阶)
https://img-blog.csdnimg.cn/direct/5888afb9755a4f8eb8be5f1c8580b3c1.jpeg博主主页: 码农派大星.
数据库专栏:MySQL数据库
关注博主带你了解更多MySQL数据库知识
1. 新增
create table student (id int, name varchar(20));
create table student2 (id int, name varchar(20));
insert into student values(1,'张三'),(2,'李四'),(3,'王五'),(100,'赵六');
insert into student2 select *from student where id<50; https://img-blog.csdnimg.cn/direct/94b2b00025ee49e1aad633a798d3d78a.png
2. 查询
1 聚合查询
1.1 聚合函数
https://img-blog.csdnimg.cn/direct/515856c9f3714a66b46b8de7146c7989.png
https://img-blog.csdnimg.cn/direct/fd0c734d59d6495fa838da21ccb0cc2f.png
count:
select count(*) from exam; https://img-blog.csdnimg.cn/direct/85dd54730b024468ad00e79caa17df21.pnghttps://img-blog.csdnimg.cn/direct/875dfd7e8b7a4bcf9fd98211881649e9.png
插入一行空值,查询也会算一行,以是查询为8
https://img-blog.csdnimg.cn/direct/5c47282366f1409a9bdb3f903f572da2.png
如果查询实在的属性 ,null则不算一行.
https://img-blog.csdnimg.cn/direct/b9f053e412ed4d4cbc4670bb1c0c185a.png
尚有以下操作,各人可以看看:
https://img-blog.csdnimg.cn/direct/f2a03c96636440b0bbd411c0c1a7eee7.pnghttps://img-blog.csdnimg.cn/direct/aed3c540fa244c0b99a92bd6252d2789.png
sum:
SELECT SUM(列名) FROM exam; 必须确保求和的每一列为数字.
https://img-blog.csdnimg.cn/direct/97180a08a9724d5dab1889da31afd56a.png
求和不为数字时为0,并陈诉有告诫:
https://img-blog.csdnimg.cn/direct/0eee0bc200ba483ca4afdeb9802cddc0.png
而且在sum求和中,遇见null会直接跳过.
sum也会逐个列相加求总和:
https://img-blog.csdnimg.cn/direct/36143626c3ac463994bd9950cbb90dcc.png
avg:
SELECT avg(列名) FROM exam; https://img-blog.csdnimg.cn/direct/e940d2e0ab44462cabd562c43f214904.png
max和min也是如此操作.
2 GROUP BY子句
SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出如今SELECT 中则必须包含在聚合函数中。
https://img-blog.csdnimg.cn/direct/70a653471d74481b9bca76a103a7bafe.png
统计员工范例与人数:
https://img-blog.csdnimg.cn/direct/4d5b1e1bcac74e2d8261ad168fe2c458.png
求各个岗位匀称薪资;
https://img-blog.csdnimg.cn/direct/8837bafa03c549148900ddf9f5ffaabb.png 求各个岗位匀称,最高,最低工资:
https://img-blog.csdnimg.cn/direct/69fc5e422dfa4ff6b3568f84495f16b2.png 求各个岗位匀称工资并按降序排序:
https://img-blog.csdnimg.cn/direct/3a276b24c66a491db4ddaca26fe9bcaf.png
搭配条件来使用:
分组之前的条件查询:
撤除张三后的匀称工资查询:
https://img-blog.csdnimg.cn/direct/9caa8deac03b492f80659d8f7f309a5c.png
3.HAVING
GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用 HAVING
分组之后的条件查询:
查询匀称薪资,清除超过5w的记录:
https://img-blog.csdnimg.cn/direct/05542912e20746dd84a2ddc20f311e01.png
一个查询,可以同时包含分组之前,分组之后的条件
统计匀称薪资,撤除张三也清除超过5w的:
https://img-blog.csdnimg.cn/direct/68cb26f272ae43968230f9618288751a.png
3.联合查询
实际开发中往往数据来自不同的表,以是需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:
https://img-blog.csdnimg.cn/direct/8e8f02b6cae049a7bf6e27551c0aa999.png
https://img-blog.csdnimg.cn/direct/12ac52fb204641509923c66de72a1e7b.png
https://img-blog.csdnimg.cn/direct/c88da4168be5441fb188f0803d668805.png
https://img-blog.csdnimg.cn/direct/584764cc4d4b42f194d5474dc36fd909.png https://img-blog.csdnimg.cn/direct/f2539ef7362943b1a3cb64641855959f.png
https://img-blog.csdnimg.cn/direct/98c58d8c92d645a7b41bc54e91c213b0.png
1.内连接
select 字段 from 表1 别名1 join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件; https://img-blog.csdnimg.cn/direct/f92c4e4666b44239b308db2ae32b8a3e.png
(1)查询“许仙”同砚的 结果
判断完,进行笛卡尔积:
https://img-blog.csdnimg.cn/direct/63364d581f5d4727a9b614f392ee6953.png
指定条件,筛选无用信息:
https://img-blog.csdnimg.cn/direct/9ca2c52d25164de78ead812d3c26f672.png
进一步指定条件,再筛选:
https://img-blog.csdnimg.cn/direct/9c146745056044ad8a1822ff51a4aa72.png 针对查询的列,精简:https://img-blog.csdnimg.cn/direct/dafdcc165d9747a6bb62f49ea6275ebd.png
另一个写法(join):
https://img-blog.csdnimg.cn/direct/b07a232dd4b64d419c5ffc7c37a89a76.png
https://img-blog.csdnimg.cn/direct/2b40d1a8de934c3cb03159e9ca2d2a4b.png
https://img-blog.csdnimg.cn/direct/37cb89ff8a704e72b134764bdee90313.png
https://img-blog.csdnimg.cn/direct/3f0f3230a55240ff85ed81e5cd6021fa.png
(2)查询所有同砚的总结果,及同砚的个人信息:
先明确信息来自那些表?
再笛卡尔积:
https://img-blog.csdnimg.cn/direct/24a74108e5bc43609d1189ca60ea3701.png
筛选:
https://img-blog.csdnimg.cn/direct/8b2627710b474928a2455550d4eb683c.png
分组聚合:https://img-blog.csdnimg.cn/direct/e3a3df5fe73749458ec5ec1c6be81b79.png 完成:
https://img-blog.csdnimg.cn/direct/f41a4e92b572420b89d8cbf732e3eef0.png
join写法:https://img-blog.csdnimg.cn/direct/2a88bb09749e4487ba5f2b3731c9b313.png
(3)查询所有同砚的结果,及同砚的个人信息:
根据需求,查看需要查询哪些信息;
课程的名字 ,结果 和学生的姓名
再进行笛卡尔积https://img-blog.csdnimg.cn/direct/a9dfcac045164c44909a9bf0fb11e2f1.png
指定连接条件:https://img-blog.csdnimg.cn/direct/5dd1190d0151459ea5af69ffe846b868.png 进行精简:
https://img-blog.csdnimg.cn/direct/8e654b2518c946f5be7a680c9ee1ccce.png
通过join 写:
-- 左外连接,表1完全显示
select 字段名from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;
2.外连接
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完 全显示我们就说是右外连接。
-- 左外连接,表1完全显示
select 字段名from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;
https://img-blog.csdnimg.cn/direct/a5d2cbb2301241af87e4b2c8a31f1aa7.png
我们修改一下值就会发现,有一条数据已经不是内链接了.
https://img-blog.csdnimg.cn/direct/c70cc34aa628448cb42c0e3df363780d.png
外连接就是join如许的写法(不支持from多个表)
给join前面加上left/right 就是外连接了
左外连接:
https://img-blog.csdnimg.cn/direct/3e5581b99f2748188da59ecf15d0d6de.png
就是以左表为基准,确保左表中的每个数据出如今最闭幕果中
如果左表中的记录,再对应右表中没有数据,就会显示右表为NULL.
https://img-blog.csdnimg.cn/direct/22a2346075844014a477bb5481bcaea5.png
右外连接:
https://img-blog.csdnimg.cn/direct/84b53cdc3cb94c17b37dafd86f703b4f.png
就是以右表为基准,确保右表中的每个数据出如今最闭幕果中
如果右表中的记录,再对应左表中没有数据,就会显示左表为NULL.
https://img-blog.csdnimg.cn/direct/5393af714c2d4c27b6721985de3e6e6a.png
3 自连接
自连接是指在同一张表连接自身进行查询
显示所有“盘算机原理”结果比“Java”结果高的结果信息(行与行之间比力):
这里我们需查询行与行之间的关系发现会报错
https://img-blog.csdnimg.cn/direct/18d131fdeeee49bba7a915e59f314711.png
实在我们各取别名就可以了
https://img-blog.csdnimg.cn/direct/0e057a5a6b684bb0b65a38282b613974.png
然后指定连接条件,去掉无效数据
https://img-blog.csdnimg.cn/direct/33ac7f27de894b7090625ff10d36c2a8.png
如许的结果分析只有三个同砚同时具有盘算机原理和java课程.
https://img-blog.csdnimg.cn/direct/542d2dfadfe748b9846328948e00d565.png 终极我们就查出来了
https://img-blog.csdnimg.cn/direct/5a3a9bd406a34e018009ea5ab355e1b1.png
https://img-blog.csdnimg.cn/direct/38c83b76497942c984a5a09cc5062bad.png 4 子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
单行子查询:返回一行记录的子查询
查询与“不想毕业” 同砚的同班同砚:
select * from student where classes_id=(select classes_id from student where
name='不想毕业'); https://img-blog.csdnimg.cn/direct/df5e3a8f45984639a02286cc7dce5994.png
多行子查询:返回多行记录的子查询
查询“语文”或“英文”课程的结果信息
-- 使用IN
select * from score where course_id in (select id from course where
name='语文' or name='英文');
-- 使用 NOT IN
select * from score where course_id not in (select id from course where
name!= '语文' and name!='英文');
https://img-blog.csdnimg.cn/direct/4e0c1f697aa344759f444b1fb974b540.png
4 归并查询
在实际应用中,为了归并多个select的实行结果,可以使用聚集操作符 union,union all。使用UNION 和UNION ALL时,前后查询的结果会合,字段需要一致。
union
固然结果一样,但是这是在相同的表中,union也可在不同表中操作
该操作符用于取得两个结果集的并集。当使用该操作符时,会主动去掉结果会合的重复行。
https://img-blog.csdnimg.cn/direct/886a892b26da4ef2b3d39ff18f942070.png
https://img-blog.csdnimg.cn/direct/3338b6918c7a408f80dbd148f4ee4b56.png
union all
该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果会合的重复行
https://img-blog.csdnimg.cn/direct/bc626e0186a041b69b651c07abd6ba6a.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]