DQL:資料查詢語言
基礎查詢
查詢所有列
Select *from 表名;
查詢指定列
Select 列名1,列名2…… from 表名;
條件查詢where
常見運算子
關系運算子:=、!=、<>(不等于)、>=、<=
區間:between A and B ->[A,B]
And:并且,和
Or:或者
Is null:空
Not:否,非
Is not null:非空
In:在……里面
并且and 或者or
查詢性別女,并且年齡65的學生記錄
select * from stu where gender='female' and age=65;
查詢學號S_1001或者名字為xxx的記錄
select * from stu where sid='S_1001' or sname='xxx';
在什么里面in
查詢學號是S_1001,S_1002,S_1003的記錄
寫法一:
select * from stu where sid in('S_1001','S_1002','S_1003');
寫法二:
select * from stu where sid='S_1001' or sid='S_1002' or sid='S_1003';
是否為空is (not)null
查詢年齡為null的記錄
select * from stu where age is null;
查詢名字不為空的學生資訊
select * from stu where sname is not null;
區間between and
查詢年齡為20~40歲之間的
方式一:select * from stu where age >=20 and age<=40;
方式二:select * from stu where age between 20 and 40;
非!= <> not
查詢性別:非男的 學生記錄
select * from stu where gender !='male';
select * from stu where gender <>'male';
select * from stu where not gender='male';
模糊查詢
介紹
(1)當想查詢學生名字中包含字符a,就需要使用到模糊查詢,用關鍵字是like(像),
(2)通配符
_:任意一個字符
張_:張三,張三豐
張__:,張三豐張三
%:表示0或則和多個字串
張%
通配符:_
#查詢名字由5個字符組成的學生記錄
select * from stu where sname like '_____';
#查詢名字由5個字符組成的,并且第五個字符是i的學生記錄
select * from stu where sname like '____i';
通配符:%
#查詢名字是z開頭的學生記錄
select * from stu where sname like 'z%';
#查詢名字中第二個字符是i的學生記錄
select * from stu where sname like '_i%';
#查詢名字中包含a字符的學生記錄
select * from stu where sname like '%a%';
欄位控制查詢
去除重復資料(distinct去重)
查詢員工部門資訊
select distinct deptno from emp;
ifnull處理
#查詢員工薪資(工資+獎金)
select ename,sal,comm,(sal+comm) from emp;
#問題:任何資料+null=null
#ifnull(A,B):如果A是null,使用B的值,如果A不是null,就使用B的值
select ename,sal,comm,sal+ifnull(comm,0) from emp;
別名(as)
給這個列換一個新的名字
select ename,sal,comm,sal+ifnull(comm,0) as money from emp;
#as:關鍵字可以省略
select ename name,sal,comm,sal+ifnull(comm,0) as money from emp;
排序 order by
升序:asc
查詢所有學生資訊,根據年齡進行升序排序
select * from stu order by age asc;
降序:desc
查詢所有學生資訊,根據名字進行降序排序
select * from stu order by sname desc;
升序且降序
查詢所有學生資訊,根據工資進行排序,如果工資相同按照員工號升序
select * from emp order by sal desc,empno asc;
聚合函式
MySQL系統提供了很多的函式
| Count:統計個數,次數,null不統計 | |
| Max:最大值 | Min:最小值 |
| Sum:求和 | Avg:平均值 |
| Round:四舍五入 |
|
有使用聚合函式時,都會有別名
count函式
#查詢emp表中記錄數
#count(*):不會忽略null的值
select count(*) from emp;
總和sum 平均值avg 四舍五入round
總和
查詢所有員工工資總和
select sum(sal) from emp;
平均值avg
計算員工的平均工資
select avg(sal),avg(comm) from emp;
四舍五入round
平均工資,保留2位小數
select round(avg(sal),2),avg(comm) from emp;
最大值max 最小值min
#查詢員工表中,工資最高的,最低的
select max(sal) max_sal,min(sal) min_sal from emp;
分段函式case
#員工表中,根據薪資不一樣,給不一樣的評論
>4000 ---NB666
>3000 ---NB66
>2000 ---NB6
<2000 ---zz
select
ename,sal,
case
when sal >4000 then 'NB666'
when sal >3000 then 'NB66'
when sal >2000 then 'NB6'
else 'zz'
end as 'pj'
from
emp;
字串的截取
Left(A,4)從左邊開始截取A中前四個字符
Right(A,4)從右邊開始截取A中前四個字符
1987-04-19 ---》1987
#(1)獲取員工的入職年份
select left('1987-04-19',4);
#(2)獲取員工的入職工齡
select ename,hiredate,2021-left(hiredate,4) from emp;
分組查詢 group by
場景
統計各個部門的人數情況
按照性別統計人數
按照班級統計參加比賽的人數
- 分組之后的結果,和具體一條資料沒有關系
- 分組會和聚合函式一起使用
- 需求中包含:“每”,“各”這種,group by
group by 分組
1.1統計各個部門的人數情況
1.2統計各個部門的平均工資
Deptnp count avg(sal)
10 3 2916.66667
20 5 2175
30 6 1566.66667
select deptno,count(*),avg(sal) from emp group by deptno;
1.3各個部門各個崗位人數
select deptno,job,count(*) from emp group by deptno,job;
having
需求一:算出平均工資超過2000的部門
算出各個部門的平均工資
過濾,只留下超過2000的部門
select
deptno,avg(sal) as avg_sal
from
emp
group by
deptno
having
avg_sal>2000;
需求二:部門30中,平均工資超過1000的崗位
select
deptno,job,avg(sal) as avg_sal
from
emp
where
deptno=30
group by
job
having
avg_sal>1000;
where和having的區別
Where:過濾;分組之前的過濾
Having:過濾;分組之后的過濾
limit限制
limit限制查詢結果的條目數
1.1查詢前五條資料
select * from emp limit 5;
1.2從第二條開始查到第五條-------下標從0開始
select * from emp limit 2,5;
使用場景:分頁查詢
如果一個頁面顯示10條資料,獲取資料
第一次:limit 0,10
第二次:limit 10,10
第三次:limit 20,10
語法:limit , start len ; 從start開始,查len條
1.3查詢各個部門平均工資前二
(1)各個部門平均工資
(2)對平均工資進行排序
(3)取前兩位
select deptno,avg(sal) from emp group by deptno order by avg(sal) desc limit 2;
關鍵字執行順序:
from -> where -> group by ->select -> having -> order by -> limit
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/283098.html
標籤:其他
