当前位置:网站首页>MySql——CRUD
MySql——CRUD
2022-07-05 23:59:00 【lion tow】
目錄
一、基礎查詢
1、語法:select 查詢列錶 from 錶名
2、特點:
①、查詢列錶可以是:錶中的字段、常量值、錶達式、函數
②、查詢的結果是一個虛擬的錶格
3、 查詢語句:
3.1查詢錶中的單個字段:
SELECT last_name FROM t_mysql_employees;
3.2:查詢錶中的多個字段:
SELECT last_name,salary,email FROM t_mysql_employees;
3.3:查詢錶中的所有字段:(企業多用方法一,因為效率更快)
方式一:
SELECT
`employee_id`,
`first_name`,
`last_name`,
`phone_number`,
`last_name`,
`job_id`,
`phone_number`,
`job_id`,
`salary`,
`commission_pct`,
`manager_id`,
`department_id`,
`hiredate`
FROM
t_mysql_employees ;
方式二:
SELECT * FROM t_mysql_employees;
3.4:查詢常量值:
SELECT 100;
SELECT 'john';
結果:
3.5:查詢常量值:
SELECT 100%98;
結果:
3.6:查詢函數:
SELECT VERSION();
結果:
3.7:起別名目的:
①便於理解
②如果要查詢的字段有重名的情况,使用別名可以區分開來
3.7.1:方式一:使用as:
SELECT 100%98 AS 結果;
SELECT salary AS "out put" FROM t_mysql_employees;
運行結果:
3.7.2:方式二:使用空格:
SELECT last_name 姓,first_name 名 FROM t_mysql_employees;
3.8:去重:把錶格中重複的字段去掉
SELECT DISTINCT department_id FROM t_mysql_employees;
3.9:+號的作用:與JAVA中的+作對比
java中的+號:
①運算符,兩個操作數都為數值型
②連接符,只要有一個操作數為字符串
mysql中的+號:只有唯一的功能:運算符
3.9.1+號的幾種情况:
1、兩個操作數都為數值型,則做加法運算:
select 100+90;
運行結果:
2、只要其中一方為字符型,將字符型數值轉換成數值型,如果轉換成功,則繼續做加法運算:
select '123'+90
結果:
3、如果轉換失敗,則將字符型數值轉換成0:
select 'john'+90;
結果:
4、只要其中一方為null,則結果肯定為null:
select null+10;
結果:
二、過濾和排序數據
1、按條件錶達式篩選:
SELECT * FROM t_mysql_employees WHERE salary>12000;
2、按邏輯錶達式篩選:
案例1:查詢工資z在10000到20000之間的員工名、工資以及獎金
SELECT last_name, salary, commission_pct FROM t_mysql_employees WHERE salary>=10000 AND salary<=20000;
3、模糊查詢:
3.1、like:
案例2:查詢員工名中包含字符a的員工信息
select * from employees where last_name like '%a%';
3.2、between and:
案例3:查詢員工編號在100到120之間的員工信息
SELECT * FROM t_mysql_employees WHERE employee_id <= 120 AND employee_id>=100;
對比一下:
SELECT
*
FROM
t_mysql_employees
WHERE
employee_id BETWEEN 100 AND 120;
3.3、in:含義:判斷某字段的值是否屬於in列錶中的某一項
案例4:查詢員工的工種編號是 IT_PROG、AD_VP、AD_PRES中的一個員工名和工種編號
SELECT
last_name,
job_id
FROM
t_mysql_employees
WHERE
job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES'
對比一下:
SELECT
last_name,
job_id
FROM
t_mysql_employees
WHERE
job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');
3.4、is null is not null:
案例5:查詢沒有獎金的員工名和獎金率; 查詢有將近的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
t_mysql_employees
WHERE
commission_pct IS NULL;
SELECT
last_name,
commission_pct
FROM
t_mysql_employees
WHERE
commission_pct IS NOT NULL;
3.6安全等於 <=>
案例6:查詢沒有獎金的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
t_mysql_employees
WHERE
commission_pct <=>NULL;
is null 和安全等於區別:
IS NULL:僅僅可以判斷NULL值,可讀性較高,建議使用
<=> :既可以判斷NULL值,又可以判斷普通的數值,可讀性較低
4、order by 子句:排序查詢
語法:select 查詢列錶 from 錶名【where 篩選條件】order by 排序的字段或錶達式;
特點:
1、asc代錶的是昇序,可以省略desc代錶的是降序
2、order by子句可以支持 單個字段、別名、錶達式、函數、多個字段
3、order by子句在查詢語句的最後面,除了limit子句
4.1按單個字段排序:
SELECT * FROM t_mysql_employees ORDER BY salary DESC;
4.2添加篩選條件再排序:
案例7:查詢部門編號>=90的員工信息,並按員工編號降序
SELECT * FROM t_mysql_employees WHERE department_id>=90 ORDER BY employee_id DESC;
4.3按錶達式排序:
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) FROM t_mysql_employees ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
4.4按錶達式排序:
案例8:查詢員工信息 按年薪昇序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪 FROM t_mysql_employees ORDER BY 年薪 ASC;
4.5按函數排序:
案例9:查詢員工名,並且按名字的長度降序
SELECT LENGTH(last_name),last_name FROM t_mysql_employees ORDER BY LENGTH(last_name) DESC;
4.6按函數排序:
案例10:查詢員工信息,要求先按工資降序,再按employee_id昇序
SELECT * FROM t_mysql_employees ORDER BY salary DESC,employee_id ASC;
三、分組查詢
功能:用作統計使用,又稱為聚合函數或統計函數或組函數
分類: sum 求和、avg 平均值、max 最大值 、min 最小值 、count 計算個數
特點:1、sum、avg一般用於處理數值型 max、min、count可以處理任何類型
2、以上分組函數都忽略null值
3、可以和distinct搭配實現去重的運算
4、count函數的單獨介紹一般使用count(*)用作統計行數
5、和分組函數一同查詢的字段要求是group by後的字段
1、簡單的使用:
SELECT SUM(salary) FROM t_mysql_employees;
SELECT AVG(salary) FROM t_mysql_employees;
SELECT MIN(salary) FROM t_mysql_employees;
SELECT MAX(salary) FROM t_mysql_employees;
SELECT COUNT(salary) FROM t_mysql_employees;
2、參數支持哪些類型:
SELECT SUM(last_name) ,AVG(last_name) FROM t_mysql_employees;
SELECT SUM(hiredate) ,AVG(hiredate) FROM t_mysql_employees;
SELECT MAX(last_name),MIN(last_name) FROM t_mysql_employees;
SELECT MAX(hiredate),MIN(hiredate) FROM t_mysql_employees;
SELECT COUNT(commission_pct) FROM t_mysql_employees;
SELECT COUNT(last_name) FROM t_mysql_employees;
3、是否忽略null:
SELECT SUM(commission_pct) ,AVG(commission_pct),SUM(commission_pct)/35,SUM(commission_pct)/107 FROM t_mysql_employees;
SELECT MAX(commission_pct) ,MIN(commission_pct) FROM t_mysql_employees;
SELECT COUNT(commission_pct) FROM t_mysql_employees;
SELECT commission_pct FROM t_mysql_employees;
4、和distinct搭配:
SELECT SUM(DISTINCT salary),SUM(salary) FROM t_mysql_employees;
SELECT COUNT(DISTINCT salary),COUNT(salary) FROM t_mysql_employees;
5、count函數的詳細介紹:
SELECT COUNT(salary) FROM t_mysql_employees;
SELECT COUNT(*) FROM t_mysql_employees;
SELECT COUNT(1) FROM t_mysql_employees;
6、分組函數一同查詢的字段有限制employee_id是最小的那個:
SELECT AVG(salary),employee_id FROM t_mysql_employees;
最終案例分析:
一、錶結構要求:
-- 1.學生錶-t_student
-- sid 學生編號,sname 學生姓名,sage 學生年齡,ssex 學生性別
-- 2.教師錶-t_teacher
-- tid 教師編號,tname 教師名稱
-- 3.課程錶-t_course
-- cid 課程編號,cname 課程名稱,tid 教師名稱
-- 4.成績錶-t_score
-- sid 學生編號,cid 課程編號,score 成績
-- 學生錶
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 a.*,b.score,c.score from t_student a,t_score b,t_score c where a.sid=b.sid and a.sid=c.sid and b.cid='01' and c.cid='02' and b.score > c.score
02)查詢同時存在" 01 "課程和" 02 "課程的情况
select a.*,b.cid,c.cid from t_student a,t_score b,t_score c where a.sid=b.sid and a.sid=c.sid and b.cid='01' and c.cid='02'
03)查詢存在" 01 "課程但可能不存在" 02 "課程的情况(不存在時顯示為 null )
select a.*,b.cid,c.cid from t_student a,t_score b,t_score c where a.sid=b.sid and a.sid=c.sid and b.cid='01' and c.cid not in('02')
04)查詢不存在" 01 "課程但存在" 02 "課程的情况
select a.*,b.cid,c.cid from t_student a,t_score b,t_score c where a.sid=b.sid and a.sid=c.sid and c.cid not in('01') and b.cid='02'
05)查詢平均成績大於等於 60 分的同學的學生編號和學生姓名和平均成績
select a.sid,a.sname,AVG(b.score) from t_student a,t_score b where a.sid = b.sid GROUP BY b.sid HAVING AVG(b.score)>=60
06)查詢在t_score錶存在成績的學生信息
select * from t_student where sid not in(select DISTINCT(sid) from t_score)
07)查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績(沒成績的顯示為 null )
select a.sid,a.sname,COUNT(b.cid),SUM(b.score) from t_student a,t_score b where a.sid = b.sid GROUP BY b.sid
08)查詢「李」姓老師的數量
select count(*) from t_teacher where tname like '李%'
09)查詢學過「張三」老師授課的同學的信息
select a.*,c.tname from t_student a , t_score b ,t_teacher c ,t_course d where a.sid=b.sid and b.cid = d.cid and d.tid = c.tid and b.cid='01'
10)查詢沒有學全所有課程的同學的信息
select * from t_student where sid not in(select a.sid from t_student a,t_score b,t_score c,t_score d where a.sid=b.sid and a.sid=c.sid and b.cid='01' and c.cid='02' and d.cid='03')
11)查詢沒學過"張三"老師講授的任一門課程的學生姓名
select sname from t_student where sname not in(select a.sname from t_student a , t_score b ,t_teacher c ,t_course d where a.sid=b.sid and b.cid = d.cid and d.tid = c.tid and b.cid='01')
12)查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績
select * from t_student a,t_score b where a.sid=b.sid and a.sid in(select c.sid from t_score c where c.score<60 GROUP BY c.sid HAVING COUNT(*)>1)
13)檢索" 01 "課程分數小於 60,按分數降序排列的學生信息
select a.* from t_student a,t_score b where a.sid=b.sid and b.cid='01' and b.score<60 ORDER BY b.score desc
14)按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
select a.*,AVG(b.score) from t_student a,t_score b where a.sid = b.sid GROUP BY b.sid HAVING AVG(b.score)>=0 ORDER BY AVG(b.score) desc
15)查詢各科成績最高分、最低分和平均分:
以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90
要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號昇序排列
select a.cid,cname,max(a.score)'最高分',min(a.score)'最低分',avg(a.score)'平均分',((select count(sid) from t_score where score>=60 and cid=b.cid )/(select count(sid) from t_score where cid=b.cid)) '及格率' from t_score a
inner join t_course b on a.cid = b.cid
group by b.cid;
边栏推荐
- Choose to pay tribute to the spirit behind continuous struggle -- Dialogue will values [Issue 4]
- el-cascader的使用以及报错解决
- USB Interface USB protocol
- "14th five year plan": emphasis on the promotion of electronic contracts, electronic signatures and other applications
- 开源crm客户关系统管理系统源码,免费分享
- Determinant learning notes (I)
- What are Yunna's fixed asset management systems?
- Hardware and interface learning summary
- QT QPushButton details
- 14 MySQL-视图
猜你喜欢
行列式学习笔记(一)
Biased sample variance, unbiased sample variance
What are the functions of Yunna fixed assets management system?
Initialiser votre vecteur & initialisateur avec une liste Introduction à la Liste
GD32F4xx uIP协议栈移植记录
总结了 800多个 Kubectl 别名,再也不怕记不住命令了!
Tips for using pads router
Open source CRM customer relationship system management system source code, free sharing
[noi simulation] Anaid's tree (Mobius inversion, exponential generating function, Ehrlich sieve, virtual tree)
Hardware and interface learning summary
随机推荐
Cloudcompare & PCL point cloud randomly adds noise
Huawei equipment is configured with OSPF and BFD linkage
What are the functions of Yunna fixed assets management system?
XML configuration file (DTD detailed explanation)
[day39 literature extensive reading] a Bayesian perspective on magnetic estimation
权限问题:source .bash_profile permission denied
mysql-全局锁和表锁
Tools to improve work efficiency: the idea of SQL batch generation tools
行列式学习笔记(一)
PV静态创建和动态创建
提升工作效率工具:SQL批量生成工具思想
如何让同步/刷新的图标(el-icon-refresh)旋转起来
Which side projects can be achieved? Is it difficult for we media to earn more than 10000 a month?
The use of El cascader and the solution of error reporting
20220703 周赛:知道秘密的人数-动规(题解)
Single merchant v4.4 has the same original intention and strength!
2022.7.5-----leetcode. seven hundred and twenty-nine
[noi simulation] Anaid's tree (Mobius inversion, exponential generating function, Ehrlich sieve, virtual tree)
Part III Verilog enterprise real topic of "Niuke brush Verilog"
Zhuan: in the future, such an organization can withstand the risks