[プログラマー]SQL高得点Kit整理

9028 ワード

プログラマーSQLのハイスコアKitを解くときに知らなかった部分を整理した内容です

1. IFNULL


カラムの値がNULLを返すと、別の値として出力されます.
SELECT IFNULL(컬럼명, "Null일 경우 대체 값") FROM 테이블명

2. CASE


条件式によってカラムの値を決定し、条件に基づいてカラムの値を変換します.
CASE 
    WHEN 조건식1 THEN1
    WHEN 조건식2 THEN2
    ...
    ELSE 조건에 맞는경우가 없는 경우 실행할 식
END
CASE 컬럼명
    WHEN 비교값 THEN1
    WHEN 비교값 THEN2
    ...
    ELSE 조건에 맞는경우가 없는 경우 실행할 식
END

3. HAVING


GROUP BYセクションとともに使用される条件セクション
SELECT  컬럼, 그룹 함수(컬럼)
FROM 테이블명
GROUP BY Group대상
HAVING 그룹 함수 포함 조건

4. DATE_FORMAT


日付を指定した形式で出力
SELECT DATE_FORMAT(날짜시간값, 원하는포맷) FROM 테이블명

5. UNION


2つ以上のテーブルをグループ化するには、次の手順に従います.
SELECT name FROM my_table1
UNION
SELECT name FROM my_table2
UNION
SELECT name FROM my_table3;

ルール#ルール#

  • ORDER BYは1つしか使用できません.
  • 各SELECTの列数、式は同じでなければならない.
  • SELECTゲート間の順序は関係ありません.
  • Unionの結果が重複すると1つしか現れません.(DEFAULT)
  • カラムのタイプは同じか、戻ることができます.
  • 重複値を表示する場合は、UNIOALL
  • を使用します.

    UNION (DISTINCT) vs UNION ALL

  • UNION重複ROWを消去する.
  • UNIOALLで重複ROWは解消されません.
  • 従ってユニオンALLの速度はユニオンよりも速い.
  • 6. WITH


    仮想テーブルの作成(データベースに格納されているテーブルではありません)
    WITH 가상테이블명 (컬럼명1, 컬럼명2) AS
        SELECT 쿼리

    7. WITH RECURSIVE


    サブクエリで参照自体を作成する仮想テーブル
    WITH RECURSIVE 가상테이블명 (n) AS
    (
        SELECT 1 - 최초 행 반환
        UNION ALL
        SELECT n + 1 FROM 가상테이블명 WHERE n < 5 - 추가 행 반환
    )
    SELECT * FROM 가상테이블명;
  • 2番目のSELECT文では仮想テーブル名が参照されているため、再帰的に参照できます
  • ユニオンALLを使用して2つのSELECT文をマージします.
  • 8. CAST & CONVERT


    せいけいかん
    CAST(변환하고싶은 데이터 AS 데이터형식[(길이)])
    CONVERT(변환하고싶은 데이터, 데이터형식[(길이)])
    
    ex.
    SELECT CAST(20211014 AS DATE);
    > 2021-10-14
    
    SELECT CONVERT(20211014, DATE);
    > 2021-10-14

    9. INNER JOIN vs INTERSECT


    INNER JOIN


    内部結合
    SELECT 컬럼명
    FROM 테이블명1
    INNER JOIN 테이블명2
    ON 조인 조건
    WHERE 검색조건
  • INNER JOINは、あるテーブルのカラムが重複している場合に重複する値を返します.
  • したがって、JOINは2つ以上のテーブルをマージするので、マージされたテーブルに同じカラムがある場合は「テーブル名」となります.テーブル名は「列名」形式で指定する必要があります.
  • INNERJOINはNULLを返さない.
  • は、通常、有限列セットで一致し、2つのテーブルの1つ以上の行を返す演算子です.
  • INTERSECT


    交差
    SELECT 컬럼명 FROM 테이블명1
    INTERSECT
    SELECT 컬럼명 FROM 테이블명2
  • INTERSECT重複除外
  • INTERSECTはNULLを返します.
  • 集合の演算子に基づいて、2つの集合の間の完全な行を比較するために使用され、2つ以上の集合のうちの小さな集合の行を返すことはできません.
  • 参考資料
  • DATE_FORMAT
    https://wakestand.tistory.com/555
  • UNION
    https://iamzombie.tistory.com/35
    https://futurists.tistory.com/18
    https://jmkim.tistory.com/50
  • CAST & CONVERT
    https://hajoung56.tistory.com/19
  • INNER JOIN vs INTERSECT
    https://stackoverflow.com/questions/51775718/is-there-a-fundamental-difference-between-intersect-and-inner-join