当前位置:网站首页>MySQL之CRUD
MySQL之CRUD
2022-07-05 14:45:00 【安离九歌】
目录
前言
上次分享了MySQL的账户管理,这次我们要分享的内容是CRUD,不管怎么样CRUD总要会点吧。
一、基本查询
#1.查询表中的单个字段
SELECT department_id FROM t_mysql_employees
#2.查询表中的多个字段
SELECT department_id,employee_id FROM t_mysql_employees
#3.查询表中的所有字段
SELECT * FROM t_mysql_employees
#4.查询常量值
SELECT 100;
SELECT 'john';
#5.查询表达式
SELECT 100%98;
#6.查询函数
SELECT VERSION();
#7.起别名
SELECT department_id 部门编号 FROM t_mysql_employees
#8.去重
SELECT DISTINCT department_id FROM t_mysql_employees
#案例:查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM t_mysql_employees
#9.+号的作用
SELECT 'join'+1
SELECT '100'+1
运行结果:
#1.查询表中的单个字段
#2.查询表中的多个字段
#3.查询表中的所有字段
#4.查询常量值
SELECT 100;
SELECT 'john';
#5.查询表达式
SELECT 100%98;
#6.查询函数
SELECT VERSION();
#7.起别名
#8.去重
#9.+号的作用
二、过滤查询
#一、按条件表达式筛选
#案例1:查询工资>12000的员工信息
SELECT * FROM t_mysql_employees WHERE salary > 12000
#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT first_name,department_id FROM t_mysql_employees WHERE NOT(department_id=90)
#二、按逻辑表达式筛选
#案例1:查询工资z在10000到20000之间的员工名、工资以及奖金
SELECT first_name,salary,commission_pct FROM t_mysql_employees WHERE salary BETWEEN 10000 AND 20000
#案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT * FROM t_mysql_employees WHERE NOT(department_id BETWEEN 90 AND 110) or salary > 12000
#三、模糊查询
#1.like
#案例1:查询员工名中包含字符a的员工信息
SELECT * FROM t_mysql_employees WHERE first_name LIKE '%a%'
#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT * FROM t_mysql_employees WHERE first_name LIKE '__e_a%'
#案例3:查询员工名中第二个字符为_的员工性
SELECT * FROM t_mysql_employees WHERE last_name LIKE
#2.between and
#案例1:查询员工编号在100到120之间的员工信息
SELECT * FROM t_mysql_employees WHERE employee_id BETWEEN 100 AND 120
#3.in
#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT first_name,job_id FROM t_mysql_employees WHERE job_id IN ('IT_PROG','AD_VP','AD_PRES')
#4、is null
#案例1:查询没有奖金的员工名和奖金率
SELECT first_name,commission_pct FROM t_mysql_employees WHERE commission_pct is null
#案例2:查询有奖金的员工名和奖金率
SELECT first_name,commission_pct FROM t_mysql_employees WHERE not commission_pct is null
#安全等于 <=>
#案例1:查询没有奖金的员工名和奖金率
SELECT first_name,commission_pct FROM t_mysql_employees WHERE commission_pct <=> null
#案例2:查询工资为12000的员工信息
SELECT * FROM t_mysql_employees WHERE salary <=>12000
#is null pk <=>
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
一、按条件表达式筛选
#案例1:查询工资>12000的员工信息
#案例2:查询部门编号不等于90号的员工名和部门编号
#二、按逻辑表达式筛选
#案例1:查询工资z在10000到20000之间的员工名、工资以及奖金
#案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
#三、模糊查询
#1.like
#案例1:查询员工名中包含字符a的员工信息
#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
#2.between and
#案例1:查询员工编号在100到120之间的员工信息
#3.in
#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
![]()
#4、is null
#案例1:查询没有奖金的员工名和奖金率
#案例2:查询有奖金的员工名和奖金率
#安全等于 <=>
#案例1:查询没有奖金的员工名和奖金率
#案例2:查询工资为12000的员工信息
#is null pk <=>
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
三、排序
order by 子句
#1、按单个字段排序
#案例:按员工表薪资排序
SELECT * FROM t_mysql_employees ORDER BY salary
#2、添加筛选条件再排序
#案例:查询部门编号>=90的员工信息,并按员工编号降序
SELECT * FROM t_mysql_employees WHERE department_id>=90 ORDER BY employee_id DESC
#3、按表达式排序
#案例:查询员工信息 按年薪降序
SELECT em.salary*12*(1+IFNULL(commission_pct,0)),em.* FROM t_mysql_employees em ORDER BY em.salary*12*(1+IFNULL(commission_pct,0)) DESC
#4、按别名排序
#案例:查询员工信息 按年薪升序
SELECT em.salary*12*(1+IFNULL(commission_pct,0)),em.* FROM t_mysql_employees em ORDER BY em.salary*12*(1+IFNULL(commission_pct,0)) ASC
#5、按函数排序
#案例:查询员工名,并且按名字的长度降序
SELECT first_name FROM t_mysql_employees ORDER BY LENGTH(first_name) DESC
#6、按多个字段排序
#案例:查询员工信息,要求先按工资降序,再按employee_id升序
SELECT * FROM t_mysql_employees ORDER BY salary DESC,employee_id ASC
#1.查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
SELECT em.first_name,em.department_id,em.salary*12*(1+IFNULL(commission_pct,0)) FROM t_mysql_employees em ORDER BY em.salary*12(1+IFNULL(commission_pct,0)) DESC,first_name asc
#2.选择工资不在8000到17000的员工的姓名和工资,按工资降序
SELECT first_name,salary FROM t_mysql_employees WHERE NOT(salary BETWEEN 8000 AND 17000) ORDER BY salary desc
#3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT * FROM t_mysql_employees WHERE email LIKE '%e%' ORDER BY LENGTH(email)DESC,department_id ASC
order by 子句
#1、按单个字段排序
#案例:按员工表薪资排序
#2、添加筛选条件再排序
#案例:查询部门编号>=90的员工信息,并按员工编号降序
#3、按表达式排序
#案例:查询员工信息 按年薪降序
#4、按别名排序
#案例:查询员工信息 按年薪升序
#5、按函数排序
#案例:查询员工名,并且按名字的长度降序
#6、按多个字段排序
#案例:查询员工信息,要求先按工资降序,再按employee_id升序
#1.查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
#2.选择工资不在8000到17000的员工的姓名和工资,按工资降序
#3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
四、案例
·insert into t_student values('01' , '赵雷' , '1990-01-01' , '男');
insert into t_student values('02' , '钱电' , '1990-12-21' , '男');
insert into t_student values('03' , '孙风' , '1990-12-20' , '男');
insert into t_student values('04' , '李云' , '1990-12-06' , '男');
insert into t_student values('05' , '周梅' , '1991-12-01' , '女');
insert into t_student values('06' , '吴兰' , '1992-01-01' , '女');
insert into t_student values('07' , '郑竹' , '1989-01-01' , '女');
insert into t_student values('09' , '张三' , '2017-12-20' , '女');
insert into t_student values('10' , '李四' , '2017-12-25' , '女');
insert into t_student values('11' , '李四' , '2012-06-06' , '女');
insert into t_student values('12' , '赵六' , '2013-06-13' , '女');
insert into t_student values('13' , '孙七' , '2014-06-01' , '女');
-- 教师表
insert into t_teacher values('01' , '张三');
insert into t_teacher values('02' , '李四');
insert into t_teacher values('03' , '王五');
-- 课程表
insert into t_course values('01' , '语文' , '02');
insert into t_course values('02' , '数学' , '01');
insert into t_course values('03' , '英语' , '03');
-- 成绩表
insert into t_score values('01' , '01' , 80);
insert into t_score values('01' , '02' , 90);
insert into t_score values('01' , '03' , 99);
insert into t_score values('02' , '01' , 70);
insert into t_score values('02' , '02' , 60);
insert into t_score values('02' , '03' , 80);
insert into t_score values('03' , '01' , 80);
insert into t_score values('03' , '02' , 80);
insert into t_score values('03' , '03' , 80);
insert into t_score values('04' , '01' , 50);
insert into t_score values('04' , '02' , 30);
insert into t_score values('04' , '03' , 20);
insert into t_score values('05' , '01' , 76);
insert into t_score values('05' , '02' , 87);
insert into t_score values('06' , '01' , 31);
insert into t_score values('06' , '03' , 34);
insert into t_score values('07' , '02' , 89);
insert into t_score values('07' , '03' , 98);
#01)查询" 01 "课程比" 02"课程成绩高的学生的信息及课程分数
SELECT st.*,sc.score AS '01',sc2.score AS '02' FROM t_student st
LEFT JOIN t_score sc ON sc.sid=st.sid AND sc.cid='01'
LEFT JOIN t_score sc2 ON sc2.sid=st.sid AND sc2.cid='02'
WHERE sc.score>sc2.score
#02)查询同时存在" 01 "课程和" 02 "课程的情况
SELECT st.* FROM t_student st INNER JOIN t_score sc ON sc.sid=st.sid AND sc.cid='01'
WHERE st.sid IN (
SELECT st2.sid FROM t_student st2 INNER JOIN t_score sc2 ON sc2.sid=st2.sid AND sc2.cid='02'
)
#03)查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
SELECT st.* FROM t_student st INNER JOIN t_score sc ON sc.sid=st.sid AND sc.cid='01'
WHERE st.sid NOT IN (
SELECT st2.sid FROM t_student st2 INNER JOIN t_score sc2 ON sc2.sid=st2.sid AND sc2.cid='02'
)
#04)查询不存在" 01 "课程但存在" 02 "课程的情况
SELECT * FROM t_student st INNER JOIN t_score sc ON sc.sid=st.sid AND sc.cid='02'
WHERE st.sid NOT IN (
SELECT st2.sid FROM t_student st2 INNER JOIN t_score sc2 ON sc2.sid=st2.sid AND sc2.cid='01'
)
#05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
SELECT st.sid,st.sname,ROUND(AVG(sc.score),2) 平均分
FROM t_student st
LEFT JOIN t_score sc ON st.sid=sc.sid
GROUP BY st.sid HAVING AVG(sc.score)>=60;
#06)查询在t_score表存在成绩的学生信息
SELECT st.* FROM t_student st WHERE sid IN(
SELECT sc.sid FROM t_score sc
)
#07)查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
SELECT st.sid,st.sname,COUNT(sc.cid),ROUND(SUM(sc.score),2) AS '总成绩' FROM t_student st
LEFT JOIN t_score sc ON sc.sid=st.sid GROUP BY st.sid
#08)查询「李」姓老师的数量
SELECT COUNT(*) FROM t_teacher WHERE tname LIKE '李%'
#09)查询学过「张三」老师授课的同学的信息
SELECT st.* FROM t_student st WHERE sid IN(
SELECT sid FROM t_score WHERE cid = (
SELECT cid FROM t_course WHERE tid = (
SELECT tid FROM t_teacher WHERE tname = '张三'
)
)
)
#10)查询没有学全所有课程的同学的信息
SELECT st.*FROM t_student st WHERE sid NOT IN(
SELECT sid FROM t_score GROUP BY sid HAVING COUNT(cid)>=(SELECT COUNT(cid) FROM t_course)
)
#11)查询没学过"张三"老师讲授的任一门课程的学生姓名
SELECT st.sname FROM t_student st WHERE st.sid NOT IN (
SELECT sc.sid FROM t_score sc
INNER JOIN t_course c ON c.cid=sc.cid
INNER JOIN t_teacher t ON t.tid=c.tid AND t.tname="张三"
)
#12)查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
SELECT st.sid,st.sname,AVG(sc.score) FROM t_student st
LEFT JOIN t_score sc ON sc.sid=st.sid WHERE sc.sid IN(
SELECT sc.sid FROM t_score sc WHERE sc.score<60 OR sc.score IS NULL GROUP BY sc.sid HAVING COUNT(1)>=2
)
GROUP BY st.sid
#13)检索" 01 "课程分数小于 60,按分数降序排列的学生信息
SELECT st.*,sc.score FROM t_student st LEFT JOIN t_score sc ON sc.sid=st.sid WHERE sc.cid='01' AND sc.score<60 ORDER BY sc.score DESC ;
#14)按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
SELECT st.sid,st.sname,
(IFNULL((sc4.score),0)) "平均分",
(IFNULL((sc.score),0)) "语文",
(IFNULL((sc2.score),0)) "数学",
(IFNULL((sc3.score),0))"英语"
FROM t_student st
LEFT JOIN t_score sc ON sc.sid=st.sid AND sc.cid="01"
LEFT JOIN t_score sc2 ON sc2.sid=st.sid AND sc2.cid="02"
LEFT JOIN t_score sc3 ON sc3.sid=st.sid AND sc3.cid="03"
LEFT JOIN t_score sc4 ON sc4.sid=st.sid
GROUP BY st.sid
ORDER BY AVG(sc4.score) DESC
#15)查询各科成绩最高分、最低分和平均分:
#以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
#要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
SELECT c.cid,c.cname,MAX(sc.score) "最高分",MIN(sc.score) "最低分",AVG(sc.score) "平均分"
,((SELECT COUNT(sid) FROM t_score WHERE score>=60 AND cid=c.cid )/(SELECT COUNT(sid) FROM t_score WHERE cid=c.cid)) "及格率"
,((SELECT COUNT(sid) FROM t_score WHERE score>=70 AND score<80 AND cid=c.cid )/(SELECT COUNT(sid) FROM t_score WHERE cid=c.cid)) "中等率"
,((SELECT COUNT(sid) FROM t_score WHERE score>=80 AND score<90 AND cid=c.cid )/(SELECT COUNT(sid) FROM t_score WHERE cid=c.cid)) "优良率"
,((SELECT COUNT(sid) FROM t_score WHERE score>=90 AND cid=c.cid )/(SELECT COUNT(sid) FROM t_score WHERE cid=c.cid)) "优秀率"
FROM t_course c
LEFT JOIN t_score sc ON sc.cid=c.cid
GROUP BY c.cid
1、
2、
3、
4、
5、
6、
7、
8、
9、
10、
边栏推荐
- Interpretation of Apache linkage parameters in computing middleware
- 注意!软件供应链安全挑战持续升级
- 开挖财上的证券账户可以吗?安全吗?
- Topology可视化绘图引擎
- SaaS multi tenant solution for FMCG industry to build digital marketing competitiveness of the whole industry chain
- 【NVMe2.0b 14-9】NVMe SR-IOV
- 有一个强大又好看的,赛过Typora,阿里开发的语雀编辑器
- NBA赛事直播超清画质背后:阿里云视频云「窄带高清2.0」技术深度解读
- 漫画:优秀的程序员具备哪些属性?
- 黑马程序员-软件测试-10阶段2-linux和数据库-44-57为什么学习数据库,数据库分类关系型数据库的说明Navicat操作数据的说明,Navicat操作数据库连接说明,Navicat的基本使用,
猜你喜欢
Photoshop plug-in action related concepts actionlist actiondescriptor actionlist action execution load call delete PS plug-in development
freesurfer运行完recon-all怎么快速查看有没有报错?——核心命令tail重定向
Opengauss database source code analysis series articles -- detailed explanation of dense equivalent query technology (Part 2)
leetcode:881. lifeboat
Online electronic component purchasing Mall: break the problem of information asymmetry in the purchasing process, and enable enterprises to effectively coordinate management
NBA赛事直播超清画质背后:阿里云视频云「窄带高清2.0」技术深度解读
FR练习题目---简单题
Thymeleaf th:classappend属性追加 th:styleappend样式追加 th:data-自定义属性
【NVMe2.0b 14-9】NVMe SR-IOV
World Environment Day | Chow Tai Fook serves wholeheartedly to promote carbon reduction and environmental protection
随机推荐
Online electronic component purchasing Mall: break the problem of information asymmetry in the purchasing process, and enable enterprises to effectively coordinate management
How to solve the problem of garbled code when installing dependency through NPM or yarn
Principle and performance analysis of lepton lossless compression
SaaS multi tenant solution for FMCG industry to build digital marketing competitiveness of the whole industry chain
【leetcode周赛总结】LeetCode第 81 场双周赛(6.25)
Thymeleaf th:with局部变量的使用
CyCa children's physical etiquette Ningbo training results assessment came to a successful conclusion
【招聘岗位】基础设施软件开发人员
Isn't it right to put money into the external market? How can we ensure safety?
开挖财上的证券账户可以吗?安全吗?
如何将电脑复制的内容粘贴进MobaXterm?如何复制粘贴
leetcode:881. 救生艇
Fonctions communes de thymeleaf
easyOCR 字符識別
快消品行业SaaS多租户解决方案,构建全产业链数字化营销竞争力
[learning notes] connectivity and circuit of graph
Thymeleaf th:classappend attribute append th:styleappend style append th:data- custom attribute
Type declaration of all DOM elements in TS
Penetration testing methodology
我想咨询一下,mysql一个事务对于多张表的更新,怎么保证数据一致性的?