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
シーン
各部門の人数を集計する
性別別人数
クラス別に試合に参加する人数を集計する
  • パケット後の結果は、特定のデータとは関係ない
  • パケットは、集約関数とともに
  • を使用します.
  • 需要には、「毎」、「各」というgroupby
  • が含まれています.
    グループ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