当前位置:网站首页>MySQL之CRUD
MySQL之CRUD
2022-07-05 14:49: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 ASCorder 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、
边栏推荐
- Microframe technology won the "cloud tripod Award" at the global Cloud Computing Conference!
- 在Pytorch中使用Tensorboard可视化训练过程
- CyCa children's physical etiquette Ningbo training results assessment came to a successful conclusion
- 机器学习笔记 - 灰狼优化
- Principle and performance analysis of lepton lossless compression
- World Environment Day | Chow Tai Fook serves wholeheartedly to promote carbon reduction and environmental protection
- 美国费城发生“安全事故” 2名警察遭枪杀
- Does maxcompute have SQL that can query the current storage capacity (KB) of the table?
- Behind the ultra clear image quality of NBA Live Broadcast: an in-depth interpretation of Alibaba cloud video cloud "narrowband HD 2.0" technology
- Interview shock 62: what are the precautions for group by?
猜你喜欢

There is a powerful and good-looking language bird editor, which is better than typora and developed by Alibaba

leetcode:881. 救生艇

IPv6与IPv4的区别 网信办等三部推进IPv6规模部署

基于TI DRV10970驱动直流无刷电机

【NVMe2.0b 14-9】NVMe SR-IOV

两个BI开发,3000多张报表?如何做的到?

Interview shock 62: what are the precautions for group by?

CPU design related notes

FR练习题目---综合题

如何将电脑复制的内容粘贴进MobaXterm?如何复制粘贴
随机推荐
启牛学堂班主任给的证券账户安全吗?能开户吗?
Differences between IPv6 and IPv4 three departments including the office of network information technology promote IPv6 scale deployment
Does maxcompute have SQL that can query the current storage capacity (KB) of the table?
面试突击62:group by 有哪些注意事项?
通过npm 或者 yarn安装依赖时 报错 出现乱码解决方式
Stm32+bh1750 photosensitive sensor obtains light intensity
Loop invariant
easyOCR 字符識別
Photoshop plug-in action related concepts actionlist actiondescriptor actionlist action execution load call delete PS plug-in development
实现一个博客系统----使用模板引擎技术
Thymeleaf 常用函數
Fonctions communes de thymeleaf
FR练习题目---综合题
Handwriting promise and async await
[detailed explanation of Huawei machine test] happy weekend
CPU设计相关笔记
外盘入金都不是对公转吗,那怎么保障安全?
我想咨询一下,mysql一个事务对于多张表的更新,怎么保证数据一致性的?
World Environment Day | Chow Tai Fook serves wholeheartedly to promote carbon reduction and environmental protection
Section - left closed right open
































3、






