너는 SQL로 할 수 있다. 더 이상 그것을 위해 추가 코드를 쓰지 마라

7108 단어 sqlwebdevproductivity
"SQL, Lisp, Haskell은 내가 본 유일한 타자가 아닌 프로그래밍 언어이다."필립 그린스판
SQL(구조화된 쿼리 언어)을 입력하는 것만은 아니더라도 소프트웨어 엔지니어는 데이터만 추출하는 방식으로 사용합니다.

We usually don’t leverage SQL’s power of data manipulation and do the needed changes in code.


이것은 웹 응용 프로그램에 종사하는 소프트웨어 엔지니어들 사이에서 매우 보편적이다.우리가 빠뜨린 또 다른 것은 SQL에서 직접 조작을 한다면, 모든 프로그래밍 언어에서 추출된 데이터는 같은 형식이 될 것이다.이 글의 목적은 SQL의 강력한 기능을 이해하게 하는 것이다. 너는 알 수 있지만 보통 사용하지 않는다.
의 차등 이미지

픽스만 TLDR;


Use SQL to do math like sum, average etc. Utilize it for grouping one to many relational values like getting categories of product. Leverage SQL for string manipulation like using CONCAT_WS for concating first name and last name. Exploit SQL to sort by a custom priority formula. Examples below…


이 예


SQL의 강력한 기능을 하나의 예로 설명하는 것이 더 쉽다.다음은 MYSQL에서 환불 마이크로서비스를 제공하는 두 가지 표의 기본 모델입니다.

예를 들어 환불 2건과 관련 지불 7건이 있다.

데이터 몇몇 가설


환불 마이크로서비스 예제 모델 및 애플리케이션에 대해 다음과 같이 가정합니다.
  • 환불 마이크로 서비스와 데이터 구조 저장 fk 프로젝트(주문/납품 프로젝트의 id)는 하드 키가 아닙니다.
  • 이 상품은 현금 또는 신용카드로 지불한 금액을 환불할 수 있다.
  • 잔액이 매번 현금과 신용카드의 환불 금액을 지불할 수 있다면 물품은 여러 번 환불할 수 있다.예를 들어 물품은 현금으로 50파운드를 지불하고 신용으로 50파운드를 지불한다.2 20현금과 20신용을 환불할 수 있습니다.따라서 이들 거래 이후 이 항목의 잔액은 10현금과 10신용(50-20)이 된다.
  • 매번 환불할 때마다 여러 항목으로 지불할 수 있습니다.모든 지불은 현금이나 신용카드로 할 수 있다.
  • 모든 금액은 센트 단위로 저장되기 때문에 모두 정수이다.
  • 이제 몇 가지 SQL 기능을 사용하겠습니다. 에서 관련 조회의 예시를 찾을 수 있습니다.

    SQL 바이올린 SQL로 계산


    소프트웨어 엔지니어로서 우리가 어떤 프로젝트에서 환불할 총 현금과 신용 한도를 찾아야 한다고 가정하면 우리는 어떻게 할 것인가?다음과 같은 작업을 수행합니다.
    SELECT fk_item, fk_refund, amount, is_cash 
    FROM payment WHERE fk_item=2001;
    
    현재 데이터에 따라 다음과 같은 세 줄이 제공됩니다.

    이 세 줄이 있으면 우리는 그것들을 한 바퀴 돌 수 있다.현금이라면 현금 잔액 변수에 누적하고, 그렇지 않으면 CreditBalance 변수에 누적한다.이와 달리 SQL에서는 다음을 더 쉽고 빠르게 수행할 수 있습니다.
    SELECT fk_item, SUM(amount) AS total_paid, IF(is_cash = 1, 'cash', 'credit') as type 
    FROM payment WHERE fk_item = 2001 GROUP BY fk_item, is_cash;
    
    결과:

    만약 당신이 지금 이 상품의 전액 환불이 필요하다면 결과는 매우 간단하다. GROUP BY를 fk 상품으로 바꾸기만 하면 된다.2·3번 음반에는 별 의미가 없다.만약 이 상품이 20회 환불된다면, 첫 번째 순환 해결 방안은 더 많은 코드를 작성해서 아무런 수익이 없다는 것이다.sum과 마찬가지로 다른 SQL 함수도 사용할 수 있습니다.간단한 수학 연산, 예를 들어 , 곱셈sum 등은 SQL에서 쉽게 실현할 수 있다.이것은 더 이상 순환이 없다는 것을 의미한다.

    보통이었어 GROUP CONCAT를 사용하여 관련 1:m 관계식 값 가져오기


    는 SQL 데이터베이스 중의 건장한 조작이다.한 쌍의 관계에서 데이터를 얻어야 할 때, 그것은 매우 유용하다.예를 들어 블로그 글의 모든 탭을 가져오거나 제품의 모든 종류를 가져오려고 합니다.이 환불 예시에 관해서는 한 물품을 여러 번 환불할 수 있다.따라서 우리는 상품 id와 관련된 모든 환불을 받을 것입니다. 이러한 환불을 얻으려면 조회 하나만 실행하고 코드에 어떠한 순환도 없습니다. 아래와 같습니다.
    SELECT fk_item, GROUP_CONCAT(DISTINCT fk_refund) refund_ids 
    FROM payment WHERE fk_item = 2001;
    
    이로 인해 다음과 같은 결과가 발생합니다.
    Group concat
    지금 우리는 2001년 상품이 이미 두 번이나 반품되었는데 모두 두 번 반품되었다는 것을 안다.따라서 환불 ID가 쉽게 폭발하고 관련 작업이 계속됩니다.

    문자열 작업


    하위 문자열, 연결, 대소문자 변경, 문자열 비교 등 많은 작업을 SQL에서 수행할 수 있습니다.이 예에서는 CONCAT WS 사용법을 보여 드리겠습니다.이것은 구분자가 있는 조개껍질의 일종이다.first name 및 last name 등의 공백을 선택할 수도 있습니다.

    In case of having an optional middle name COALESCE can be used with CONCAT_WS. That is something for you to explore :).


    이 예에서는 환불 및 관련 이유를 선택합니다.
    SELECT CONCAT_WS("-", refund_nr, reason) AS refund_nr_with_reason 
    FROM refund;
    
    결과:
    string manipulation
    예를 들어, 대출 기록서 문서에 표시해야 한다면, 이 값을 다시 연결할 추가 코드가 필요하지 않다.SQL은 한 단계 더 간단해졌습니다.

    사용자 정의 방정식 정렬 사용


    모든 소프트웨어 엔지니어들은 네가 일렬에 따라 정렬할 수 있다는 것을 안다.그러나 사용자 정의 우선순위 공식을 정렬해 주면 어떻게 할 거예요?코드와 순환에 대한 정렬을 다시 요청할 수 있습니다.따라서 위의 예제에 대해 우선순위 공식 규칙을 설정합니다.
  • 프리미엄 고객 환불 시 최고 우선 순위 획득(999999999 우선 순위로 해결)
  • 양질의 고객을 제외하고 현금 환불의 우선순위는 금액*25이고 신용카드의 우선순위는 금액*20이다.
  • 상술한 규칙에 따라 50000(센트 기준)을 넘는 양질의 고객과 우선권을 우선적으로 처리하기로 결정했다.그리고 기타 환불은 취소됩니다.다음과 같은 우선 환불을 받을 수 있습니다.
    SELECT r.refund_nr, r.reason, p.fk_item, p.amount, p.is_cash,
    IF(p.premium_customer = 1, 9999999999, p.amount * (IF(is_cash = 1, 25, 20))) AS priority 
    FROM refund AS r INNER JOIN payment AS p ON r.id = p.fk_refund 
    HAVING priority > 50000 
    ORDER BY priority DESC
    
    결과는 다음과 같습니다.

    SQL에서 IF를 올바르게 사용하면 코드에서 순환을 사용하는 것보다 우선순위 공식을 사용자 정의하여 정렬하는 것이 훨씬 쉽다.7.5(750센트)와 9.0(900센트) 등 더 작은 금액도 가장 우선적으로 고려해야 한다. 왜냐하면 이런 환불 지불 금액은 양질의 고객과 관련이 있기 때문이다.

    Use the superpowers of SQL to make your life easier as a software engineer.


    이 예시를 사용해서 에서 조회를 실행할 수 있습니다.

    SQL 바이올린 결론


    소프트웨어 엔지니어로서 SQL은 당신을 도울 수 있는 또 다른 기교가 있습니다.예를 들어, 키 업데이트가 반복될 때 INSERT를 사용하여 업데이트합니다.데이터베이스에서 추출한 데이터를 순환 코드로 조작하고 싶을 때마다 심사숙고하십시오.이 이야기의 주요 내용은 다음과 같다.

    Exploit the power of SQL to write less code because “the best code is the code that was never written”. If it is not written there is no need to maintain it.


    최초 발표 .

    좋은 웹페이지 즐겨찾기