MySQLデータベース基本操作(二)
5549 ワード
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';
何の中にいるの
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%';
フィールド制御クエリー
重複除外
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;
四捨五入
, 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
シーン
各部門の人数を集計する
性別別人数
クラス別に試合に参加する人数を集計する
グループ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最初の5つのデータを照会する
select * from emp limit 5;
1.2第二条から第五条まで調べる------下付きは0から始める
select * from emp limit 2,5;
シーンを使用シヨウ:ページングクエリーページングクエリー
1ページに10個のデータが表示されたら、データを取得します.
初回:limit 0,10
2回目:limit 10,10
3回目:limit 20,10
構文:limit,start len;startから、lenバーを調べます
1.3各部門の平均給与の上位2位を調べる
(1)各部門の平均賃金
(2)平均賃金の順位付け
(3)上位2位を取る
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