MySQLとSQL言語基礎学習(二)


二SQL言語の勉強
SQL(Structure Query Language)言語は、構造化クエリ言語です.SQL言語は次のように分類できます.
  • DQL(Data Query Language):データ問合せ言語-select
  • DML(Data Manipulate Language):データ操作言語——insert,update,delete
  • DDL(Data Define Language):データ定義言語——create,alter,drop
  • TCL(Transaction Control Language):トランザクション制御言語-commit,rollback
  • (一)DQL(Data Query Language)言語の学習
  • ベースクエリーselectクエリーオブジェクト【fromテーブル名】javaで使用する:System.out.println(印刷オブジェクト);①クエリの結果は仮想的なテーブルであり、メモリに実際に存在するテーブルではない②クエリするものは定数値、式、フィールドまたは関数の例:
  • //      
    select     from   ;
    //      
    selectfrom   ;
    //      
    select * from   ;
    //    
    select    ;//  ,                 ,      
    //    
    select    (    );
    //     
    select 100/321;
    //         ,  as    
    select name as    , age as    from
    students as   ;
    //    
    select distinct     from   
    //+             
    select    +   ;//    
    select    +   ;//               ,          0    
    select null +  ;// null          0
    

    補足:
    //concat  ,      
    select concat(frist_name , last_name) as    from employees;
    
    //ifnull  ,           null, null      
    select ifnull(salary , 0) from  employees; //   0     0
    
    //isnull  ,             null,    1,    0
    select isnull(salary) from employees;
    
  • 条件クエリーselectクエリーリストfromテーブル名whereフィルタ条件フィルタ条件元のテーブルのデータをフィルタ条件に基づいてフィルタリングし、必要なデータフィルタ条件の分類をクエリーします:1条件式:salary>10000条件演算子のように:>,<,=,<=,>=,!=,<>,<=,<>,<=>,<=>,<=>,<=>②論理式:salary>1000&&salary<12000論理演算子あり:|,&,!,and,not,or 3ファジイクエリ:select name from employees where name like'%a%';like,between and,in,is null/is not null%と_ワイルドカードとして使用すると、前者は任意の複数の文字にマッチすることができ、後者は任意の単一文字にしかマッチできない注意is nullと<=>を区別する区別is nullは、ある通常タイプの値であるか否かを判断するのに使用できず、空<=>であるか否かを判断するのに使用できる通常クラス値またはnull値
  • ソートクエリーselectクエリーリストfromテーブル名order byソート条件【asc|desc】ソートリストは、単一フィールド、複数フィールド、関数、式、別名をサポートします.order by文の場所一般的にクエリ文の最後(limit文以外)の例:
  • select      from    where      order by     ;
    
  • SQL共通関数SQLの共通関数javaのメソッドと同様に、コードの再利用性を向上させ、実装の詳細を隠すことができます.呼び出し方法:select関数名(パラメータリスト)1、単行関数(1)文字関数
  • concat()//     
    select concat('ni' , ' ' , 'hao!');
    
    substr()//    
    select substr('123456789' , 6);//  SQL          1  
    
    upper()//     
    select upper('join');
    
    lower()//     
    select lower('join');
    
    trim()//               
    select trim('a' from 'aaa1234sasaa8apaa');
    
    ltrim()//      
    rtrim()//      
    
    replace()//  
    select replace('123456' , '4' , '9');//   4   9
    
    lpad()//   
    select lpad('12345' , 10 , '*');//            :*****12345
    
    rpad()//   
    
    instr()//            
    select instr('1235690' , '90');
    
    length()//      
    select length('woaibeijingtiananmen');
    

    (2)数学関数
    round()//           
    select round(87.75);//      
    select round(19.2588 , 2);//         :19.26
    
    rand()//     
    select round();//  0-1       
    
    floor()//         
    select floor(16.9330);
    
    ceil()//         
    select ceil(15.1);
    
    mod()//  
    select mod(15,2);//   select 15%2;
    
    truncate()//  
    select truncate(15.666666,3);//   15.666,    ,         
    

    (3)日付関数
    now()//       +   
    select now();
    select year(now()); 
    select month(now());
    
    curdate()//      
    select curdate();
    
    curtime()//      
    select curtime();
    
    str_to_date//              
    select str_to_date('9-13-1999' , '%m-%d-%Y');
    
    date_format//         
    select date_format(curdate(),'%Y %m %d ');//              
    

    (4)フロー制御関数
    if  //     
    case  //     
    

    (5)その他の関数
    version()//      
    database()//       
    user()//        
    

    二、グループ関数
    sum()
    select sum(salary) from employees;
    
    max()
    select max(salary) from employees;
    
    min()
    avg()
    count()
    select count(employee_id) from employees;
    select count(*) from employees;
    

    特徴:1以上の5つのパケット関数はcount()を除いてnull値をすべて無視する.2 sumとavgは一般的に処理数値型、max、min、countで任意のデータ型を処理することができる.③いずれもdistinctと組み合わせて使用することができ、重量除去後の結果を統計するために使用される.④countのパラメータはフィールド、定数値(1)をサポートできますが、count(*)を使用することをお勧めします.
  • パケットクエリselectパケット関数、パケット後のフィールドfromテーブル【whereフィルタ条件】groupbyパケットフィールド【havingパケット後のフィルタ】【order byソートリスト】
  • select count(*) , e.department_id
    from employees e
    where e.salary > 12000
    group by e.department_id
    having e.employee_id > 100
    

    特徴:1単一フィールドでグループ化できる;②グループ関数とともに検索するのは、グループ化後のフィールドが望ましい.③グループ化前にフィルタリングし、元のテーブルに対してwhereキーワードを使用する.グループ化後にフィルタリングし、グループ化後の結果セットに対してhavingキーワードを使用する.④複数のフィールドでグループ化でき、フィールド間はカンマで区切られる.⑤ソートをサポートする;⑥havingとgroupbyの後に別名を使うことができます
  • 接続クエリークエリークエリー複数のテーブルのフィールドがクエリーに含まれている場合、複数のテーブルをクエリーしても有効な接続条件が追加されていない場合、複数のテーブルのすべての行が完全に接続されます.すなわち、デカルト積接続(1)sql 92接続が発生します.②非等値接続③自己接続④一部の外部接続selectクエリーリストfrom表1別名、表2別名where接続条件【andフィルタ条件】【group byパケットフィールド】【havingパケット後フィルタ条件】【order byソート条件】特徴:一般的には表から別名とすることができ、複数の表の順序の間で置き換えることができ、n表の接続には少なくともn-1個の接続条件が必要である.等値接続の結果、マルチテーブルの交差部分(2)sql 99【推奨使用】:1内接続:等値、非等値、自己接続;②外部接続:左外部、右外部、全外部接続(MySQLはサポートしていません)①内部接続selectクエリーリストfromテーブル1別名【inner】joinテーブル2別名on接続条件【inner】joinテーブル3別名on接続条件…whereフィルタ条件group byパケットリストhavingパケット後フィルタ条件order byソート条件limit文例:
  • //   
    select bo.name as     , b.name as     
    from boys as bo 
    join beauty as b on b. boyfriend_id = bo.id
    where bo.id > 10; 
    
    //   
    select e.last_name , m.last_name
    from employees e 
    join employee m
    on e.employees_id = m.manager_id;
    

    特徴:内部接続中の表の順序は変えることができて、内部接続の結果=多表の交差、n表接続は少なくともn-1個の接続条件が必要です②外部接続selectクエリーリストfrom表1別名left|right|full【outer】join表2別名on接続条件whereフィルタ条件group byパケット条件havingパケット後のフィルタ条件order byソートリスト
    select b.name , bo.name
    from beauty b 
    left join boys bo
    on bo.id = b.boyfriend_id
    where b.id > 10;
    

    特徴:クエリーの結果はメインテーブルのすべてのローで、テーブルの一致と一致する精から一致するローが表示され、テーブルから一致するデータがない場合nullが表示されます.left joinの左側のテーブルはメインテーブルで、逆も同様です.外部ジョイン・クエリーは、一般的に、交差部分以外の一致しない行をクエリーするために使用されます.
    ③クロスコネクションselectクエリーリストfromテーブル1別名cross joinテーブル2別名デカルト積に類似
  • サブクエリが他の文にネストするselect文をサブクエリまたは内部クエリ外部の文と呼ぶのはinsert、update、delete、selectなどであるが、一般的にselectが外部文としてよく見られる外部文がselectである場合、外部クエリーまたはメインクエリー・スケール量子クエリー(単行サブクエリー):結果セットは1行1列のサブクエリー(複数行サブクエリー):結果セットは1列の複数行サブクエリ:結果セットは1行の複数リストサブクエリ:結果セットは複数列の複数行①select後のサブクエリは、スケール量子クエリのみをサポート②from後のサブクエリサポートテーブルサブクエリインスタンス
  • select name 
    from (select * from employees
    where salary > 12000) as ag
    where id > 100;
    

    ③whereまたはhavingの後には、標量子クエリー、行サブクエリー、列サブクエリーの例がサポートされています.
    select * from employees
    where name in (
    select name from employees 
    where salary > 1000
    )
    
    SELECT COUNT(*) , department_id
    FROM employees 
    WHERE department_id != 10
    GROUP BY department_id
    HAVING department_id IN (SELECT e.department_id FROM employees e
    WHERE salary > 10000)
    
  • ページングクエリクエリクエリクエリ結果エントリ数が多すぎて、1ページの表示が不完全でページング表示が必要な場合
  • select     
    from  
    limit offset , size;
    //offset         ,   0  ,size        
    
    select * from employees
    limit 0 , 10 ;
    

    表示するページ数をpageとし、各ページのエントリ数をsize selectクエリーリストfromテーブルlimit size*(page-1)、size
  • 連合クエリーは、複数回のクエリー結果を1つの印刷
  • にマージします.
    select     |  |from  】 【whereunionallselect     |  |from  】 【whereunionallselect     |  |from  】 【whereunionall......
    
    select last_name from employees union all
    select first_name from employees union all
    select department_id from departments 
    

    複数のクエリー文クエリーのカラムタイプは一致する必要があります.複数のクエリ文のカラム数が一致する必要があります.unionは再表示を表し、union allは再表示しないことを表します.統合クエリーを使用すると、複雑なクエリー文を複数のクエリー文に分割できます.複数のテーブルのほぼ同じカラムをクエリーする場合に使用します.
    したがってDQL言語の要素は以下のように集約される.
    select      from     
         join  2    on     
    where     
    group by     
    having        
    order by     
    limit       ,    ;