当前位置:网站首页>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 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、
边栏推荐
- How to choose the appropriate certificate brand when applying for code signing certificate?
- Handwriting promise and async await
- [learning notes] stage test 1
- Structure - C language
- SaaS multi tenant solution for FMCG industry to build digital marketing competitiveness of the whole industry chain
- PMP考试20天能通过吗?
- Two Bi development, more than 3000 reports? How to do it?
- Photoshop插件-动作相关概念-ActionList-ActionDescriptor-ActionList-动作执行加载调用删除-PS插件开发
- easyOCR 字符識別
- 想问下大家伙,有无是从腾讯云MYSQL同步到其他地方的呀?腾讯云MySQL存到COS上的binlog
猜你喜欢
【华为机试真题详解】字符统计及重排
【jvm】运算指令
计算中间件 Apache Linkis参数解读
[summary of leetcode weekly competition] the 81st fortnight competition of leetcode (6.25)
CPU design related notes
CyCa children's physical etiquette Ningbo training results assessment came to a successful conclusion
安装配置Jenkins
【数组和进阶指针经典笔试题12道】这些题,满足你对数组和指针的所有幻想,come on !
一键更改多个文件名字
Differences between IPv6 and IPv4 three departments including the office of network information technology promote IPv6 scale deployment
随机推荐
Topology visual drawing engine
手写promise与async await
Reconnaissance des caractères easycr
How does redis implement multiple zones?
可视化任务编排&拖拉拽 | Scaleph 基于 Apache SeaTunnel的数据集成
Longest common subsequence dynamic programming
Chow Tai Fook fulfills the "centenary commitment" and sincerely serves to promote green environmental protection
Structure - C language
FR练习题目---简单题
CPU设计实战-第四章实践任务二用阻塞技术解决相关引发的冲突
webRTC SDP mslabel lable
CyCa children's physical etiquette Ningbo training results assessment came to a successful conclusion
计算中间件 Apache Linkis参数解读
mysql8.0JSON_CONTAINS的使用说明
Share 20 strange JS expressions and see how many correct answers you can get
Explain Vue's plan to clean up keepalive cache in time
Super wow fast row, you are worth learning!
详解Vue适时清理keepalive缓存方案
Photoshop插件-动作相关概念-非加载执行动作文件中动作-PS插件开发
[detailed explanation of Huawei machine test] character statistics and rearrangement