[쿼리] Maria DB

Welcome to Seoyun Dev Log·2023년 9월 12일
0

[WORK] 학습내용

목록 보기
24/25

UNION ALL / UNION

  • UNION ALL / UNION (중복 제거 합집합 결과 여부)
    : 여러 개의 select문 결과를 합치기 위해서 사용하며, UNION의 경우 중복 제거 결과 반환, UNION ALL은 중복 제거하지 않고 합쳐진 결과 반환

JOIN

  • INNER JOIN: NULL 제거, NULL 이 없는 데이터만 출력
  • OUTER JOIN: NULL 허용하여 1개의 테이블에 데이터가 있어도 결과 출력
  • CROSS JOIN: 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능
  • SELF JOIN: 자신의 테이블을 자신이 조인하는 의미로 1개의 테이블을 사용

exists

-- exists1

SELECT * FROM orders o
WHERE EXISTS (SELECT c.customer_id FROM customers c);

exists 구문에서는 in 구문과 다르게 메인 쿼리에 먼저 접근하여 row를 하나 가져오고
exists의 서브쿼리를 실행시켜 결과가 존재하는지를 판단합니다.

서브쿼리의 결과가 true 인지 false 인지 체크하기 때문에 exists에서는 결과가 존재할 경우(= true)
메인 쿼리의 결과를 출력하고
not exists에서는 서브쿼리 내의 결과가 존재하지 않을 경우(= false)
메인 쿼리의 결과를 출력하게 됩니다.

statementType="PREPARED"

: 이 속성은 SQL 문의 유형을 지정합니다. "PREPARED"는 일반적으로 이 문이 준비된 문(prepared statement)임을 나타냅니다. 준비된 문은 미리 컴파일된 SQL 문으로, 다른 매개변수 값과 함께 여러 번 실행할 수 있어 성능 및 보안을 향상시킬 수 있습니다.

TB_KEY_INFO

TB_KEY_INFO라는 테이블에 대한 정보는
일반적으로 MariaDB의 시스템 카탈로그(system catalog)에서 관리됩니다.

시스템 카탈로그는 데이터베이스 서버의 메타데이터를 저장하고 관리하는 시스템 데이터베이스의 일부입니다.
따라서 TB_KEY_INFO라는 테이블은 일반적으로 사용자가 직접 쿼리하여 접근하거나 조작하지 않는 것이 좋습니다.

TB_KEY_INFO 테이블은 MariaDB 내부에서 테이블 및 인덱스의 키(key)와 관련된 정보를 저장하는 데 사용됩니다. 이러한 정보는 데이터베이스의 최적화 및 쿼리 실행 계획을 구성하는 데 도움이 됩니다. 이 테이블은 데이터베이스 엔진과 관련된 내부 세부 정보를 담고 있으므로 일반적인 데이터베이스 작업을 수행하는 데 필요하지 않습니다.

보다 구체적인 정보를 얻고 싶다면 MariaDB의 시스템 카탈로그를 사용하여 데이터베이스 스키마, 테이블, 인덱스 등과 관련된 정보를 조회할 수 있습니다. 이러한 정보는 다양한 정보 스키마(system schema)와 정보 테이블(system table)을 통해 액세스할 수 있습니다. MariaDB 시스템 카탈로그의 구조는 MariaDB 버전에 따라 다를 수 있으므로 사용하는 MariaDB 버전의 문서를 참조하여 관련 정보를 얻을 수 있습니다.

WHERE 1=1

"WHERE 1=1"은 SQL 쿼리에서 자주 볼 수 있는 패턴 중 하나입니다. 이 패턴은 SQL 쿼리를 동적으로 생성하거나 유지보수하기 쉽게 만드는 데 사용됩니다.

실제 데이터베이스 쿼리에 조건을 추가할 때 "WHERE 1=1"을 사용하면 다음과 같은 이점이 있습니다:

동적 쿼리 생성: 다양한 조건을 포함한 SQL 쿼리를 동적으로 생성할 때 유용합니다. 조건을 추가하려면 "AND" 또는 "OR" 연산자를 사용하여 "1=1" 뒤에 추가적인 조건을 붙일 수 있습니다. 이렇게 하면 조건을 추가하거나 제거하기가 간편해집니다.

가독성: 쿼리를 읽을 때 "WHERE 1=1"이 포함되어 있으면 조건 부분이 시작되는 곳을 더 쉽게 식별할 수 있습니다. 쿼리가 길고 복잡한 경우 이 패턴은 가독성을 향상시킬 수 있습니다.

예를 들어, 다음과 같은 쿼리를 생각해보겠습니다:

SELECT *
FROM Customers
WHERE 1=1
AND FirstName = 'John'
AND LastName = 'Doe'
AND Age > 30;

위 쿼리에서 "WHERE 1=1"은 초기 조건을 설정합니다. 그런 다음 필요한 경우 추가 조건을 "AND" 연산자와 함께 이어서 추가할 수 있습니다. 이것은 쿼리를 동적으로 생성하거나 여러 조건을 포함하는 데 도움이 됩니다.

또한 "WHERE 1=1"은 개발자가 쿼리를 디버그하거나 변경할 때 조건을 추가하거나 제거하기 쉽게 만듭니다.

IS_IPV4()

: 주어진 IP주소가 IPV4인지 확인하는 함수
참이면 True 1 아니면 0 반환

INET_ATON()

: IPV4 주소를 숫자로 변환하는데 사용
IPV4 주소 (X.X.X.X)...

예를 들어, "192.168.1.1"이라는 IPv4 주소를 INET_ATON() 함수를 사용하여 숫자로 변환하면 다음과 같이 됩니다:

SELECT INET_ATON('192.168.1.1'); -- 결과: 3232235777

반대로, 숫자를 IPv4 주소로 변환하는 함수인 INET_NTOA()도 MySQL에서 사용할 수 있습니다. 예를 들어, 숫자 3232235777을 IPv4 주소로 변환하면 다음과 같이 됩니다:

SELECT INET_NTOA(3232235777); -- 결과: '192.168.1.1'

INET_ATON() 및 INET_NTOA() 함수는 주로 IPv4 주소를 데이터베이스에서 저장하거나 검색할 때 사용되며, IP 주소를 정수로 저장하고 비교하는 데 편리합니다

UPPER()

: 풀스캔을 하기 때문에 성능 문제 고려해야한다.

profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

0개의 댓글