SQL

11702 단어
SQL 항목에 대한 빠른 입력/개정 가이드여야 합니다.
Tis는 Oracle SQL용입니다(일부 기본 사항).

목차



기초
  • Oracle DUAL table
  • constant
  • concat

  • 고르다
  • Even Number / remainder
  • Distinct / no duplicates
  • Count
  • Top / first X rows
  • Pattern matching
  • SubString
  • Order by
  • If else
  • group
  • null

  • 골재
  • sum
  • average
  • round
  • floor
  • ceil
  • max

  • min
    시장 조작
  • replace

  • 조인
  • types of joins
  • select from join

  • 오라클 듀얼 테이블



    식을 평가하거나 함수를 호출하는 데 사용되는 모든 사용자가 액세스할 수 있는 특수 테이블입니다.

    예시:

    SELECT
      (10 + 5)/2
    FROM
      dual;
    


    source에서 가져옴

    끊임없는



    문자열/멋진 결과를 출력하려면 문자열을 선택하십시오.

    SELECT 'There are ' || COUNT(ID) || ' participants'
    FROM PARTICIPANTS
    


    사슬 같이 잇다



    Oracle SQL에서 문자열을 연결합니다.
    중첩|| 함수 대신 CONCAT 연산자를 사용할 수 있습니다.

    'Tech on' || ' the Net'
    Result: 'Tech on the Net'
    


    reference

    우수



    mod(<>,2) = 0



    예시:

    SELECT DISTINCT(CITY)
    FROM STATION
    WHERE MOD(ID,2) =0;
    


    중복 없음



    SELECT DISTINCT(COLUMN)



    SELECT DISTINCT(CITY)
    FROM STATION
    WHERE MOD(ID,2) =0;
    


    세다



    COUNT(ROW)



    개별 행을 계산하려면 다음을 수행하십시오.

    COUNT(DISTINCT(ROWS))



    처음 X 행



    Oracle 12c(here 참조)

    Fetch First X Rows only



    select   *
    from     the_table
    order by object_id
    fetch first 10 rows only;
    


    그렇지 않으면,

    ROWNUM <= X



    SELECT *
      FROM (SELECT * FROM MyTbl ORDER BY Fname )
     WHERE ROWNUM = 1;
    


    참조 here

    패턴매칭 / LIKE


  • LIKE/NOT LIKE - 패턴 매칭
  • REGEXP_LIKE/NOT REGEXP_LIKE - 정규 표현식을 사용한 패턴 일치

  • 와일드 카드 문자는 다음과 같습니다.
  • % : 임의 개수의 문자
  • _ : 1자

  • 예시:

    # ending with er
    SELECT
        first_name,
        last_name,
        phone
    FROM
        contacts
    WHERE
        last_name LIKE '%er'
    
    # Je 1 character and then i
    # eg. Jeni/ Jedi
    SELECT
        first_name,
        last_name,
        email,
        phone
    FROM
        contacts
    WHERE
        first_name LIKE 'Je_i'
    


    좋아하지 않는
    일치하는 패턴이 없는 문자열을 찾고 싶지 않으세요?

    SELECT
      first_name, last_name, phone
    FROM
      contacts
    WHERE
      phone NOT LIKE '+1%'
    


    reference

    REGEXP_LIKE

    REGEXP_LIKE(source_string, search_pattern [, match_parameter]);



    /* starts with m or n */
    SELECT
      first_name
    FROM
      employees
    WHERE
      REGEXP_LIKE(first_name,'^m|^n','i')
    
    /* does not end with vowel */
    SELECT DISTINCT(CITY)
    FROM STATION
    WHERE NOT REGEXP_LIKE(CITY,'(a|e|i|o|u)$');
    


    reference

    하위 문자열



    문자열에서 하위 문자열을 추출합니다.

    SUBSTR( str, start_position [, substring_length, [, occurrence ]] );


  • 시작 위치
    +ve/0 -> 문자열의 처음부터 카운트
    0은 첫 번째 문자입니다.
    1은 첫 번째 문자일 수도 있습니다.
    start_position은 음수일 수 있습니다. 하위 문자열의 첫 번째 문자를 찾기 위해 str의 끝에서 거꾸로 계산합니다
  • .
  • 부분 문자열 길이
    생략하면 start_position에서 문자열 끝까지 문자열을 가져옵니다
  • .

    예시:

    /*get last 3 characters*/
    SUBSTR(NAME, -3)
    
    SUBSTR( 'Oracle Substring', - 16, 6 ) 
    SUBSTR( 'Oracle Substring', 1, 6 ) /*result is Oracle*/
    


    reference

    주문 기준 / 주문



    결과 정렬

    ORDER BY
        column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
        column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
    


    여러 열을 정렬하려면 다른 인수를 추가하기만 하면 됩니다. SQL은 첫 번째 조건을 먼저 정렬한 다음 두 번째 조건을 기준으로 정렬합니다.

    다른 경우라면


    CASE & WHEN SQL 쿼리에서 if else 논리 사용

    CASE [ expression ]
       WHEN condition_1 THEN result_1
       WHEN condition_2 THEN result_2
       ...
       WHEN condition_n THEN result_n
    
       ELSE result
    END
    


    상수 값을 반환하는 식을 생략할 수 있습니다(예: hackerrank 이진 트리 질문).

    SELECT 
        CASE 
          WHEN P IS NULL THEN N || ' Root'
          WHEN N IN(SELECT DISTINCT(P) FROM BST) THEN N || ' Inner'
          ELSE N || ' Leaf'
        END 
    FROM BST
    ORDER BY N;
    



    SELECT
      product_name,
      list_price,
      CASE category_id
        WHEN 1
        THEN ROUND(list_price * 0.05,2) 
        WHEN 2
        THEN ROUND(List_price * 0.1,2) 
        ELSE ROUND(list_price * 0.08,2)
      END discount
    FROM
      products
    ORDER BY
      product_name
    


    그룹화 기준



    행을 그룹으로 그룹화

    기본 예SELECT status FROM orders GROUP BY status;이는 SELECT DISTINCT status FROM orders;와 동일합니다.

    함수를 집계합니다. 동일한 customer_id에 대한 order_id 수 찾기

    SELECT
        customer_id,
        COUNT( order_id )
    FROM
        orders
    GROUP BY
        customer_id
    ORDER BY
        customer_id;
    




    열 값이 null인지 null이 아닌지 확인하려면
    SELECT * FROM 주문
    여기서 salesman_id는 NULL입니다.
    ORDER BY order_date DESC;
    reference

    합집합



    sum of all or distinct values



    SELECT
        product_id,
        SUM( quantity )
    FROM
        order_items
    
    SELECT
        order_id,
        SUM( quantity * unit_price ) order_total
    FROM
        order_items
    


    평균



    calculate average of a group



    SELECT AVG( list_price ) avg_list_price
    FROM products;
    


    둥근



    round off number to decimal place
    ROUND(n, integer)
    if integer not given it is 0.



    SELECT ROUND(15.193,1) "Round" FROM DUAL;
    
         Round
    ----------
          15.2
    
    ## round to left of decimal place
    SELECT ROUND(15.193,-1) "Round" FROM DUAL;
    
         Round
    ----------
            20 
    


    https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions135.htm

    바닥



    Returns the largest integer value that is equal to or less than a number.



    FLOOR(5.9)
    Result: 5
    
    FLOOR(34.29)
    Result: 34
    
    


    https://www.techonthenet.com/oracle/functions/floor.php

    최대



    return maximum value of expression



    ### maximum salary per department
    SELECT department, MAX(salary) AS "Highest salary"
    FROM employees
    GROUP BY department;
    
    ### find top earnings (salary * months) & number of employees with top earnings
    SELECT MAX(salary*months), COUNT(*) FROM EMPLOYEE 
    WHERE salary * months = (SELECT MAX(salary*months) FROM EMPLOYEE);
    


    https://www.techonthenet.com/oracle/functions/max.php

    조인 유형





    왼쪽 또는 오른쪽 테이블의 항목을 제외하려면(왼쪽과 일치하지 않는 오른쪽 항목 가져오기) WHERE .id IS NULL을 시도하십시오.

    SELECT
        a.id id_a,
        a.color color_a,
        b.id id_b,
        b.color color_b
    FROM
        palette_a a
    RIGHT JOIN palette_b b ON a.color = b.color
    WHERE a.id IS NULL;
    


    https://www.oracletutorial.com/oracle-basics/oracle-joins/

    조인에서 선택




    SELECT SUM(CITY.population)
    FROM CITY
    FULL OUTER JOIN COUNTRY
    ON CITY.CountryCode = COUNTRY.Code
    WHERE COUNTRY.Continent = 'Asia';
    

    좋은 웹페이지 즐겨찾기