[SQL] USING USING 두 개의 테이블이 내부 조인으로 조인 될 때 조인하고자 하는 두 테이블의 컬럼명이 같을 경우 조인 조건을 길게 적지 않고 간단하게 적을 수 있다. 일반적인 JOIN 조건이 다음과 같을 때, SELECT * FROM dept d JOIN employees e ON d.dept_num = e.dept_num; USING을 사용하면 다음과 같이 표현 할 수 있다. SELECT * FROM dept d JOIN employees e USING(dept_num); 추가로 ON을 사용하면 컬럼명이 다르더라도 JOIN 조건을 사용할 수 있다.
[MySQL] With 문SQL을 사용하여 대량의 데이터를 다루는 경우, 임의의 결과를 정의하고 사용하는 경우임시 테이블을 만들어 해당 테이블에 값을 저장할 수 있다. WITHwith절은 동일한 SQL이 반복되어서 사용될 때 성능을 높이기 위해 사용된다.실제로는 temp라는 임시테이블에 저장되는 가상의 테이블이다.with as ( )with절은 임시테이블을 사용하여 저장해놓은 데이터를 액세스하기 때문에, 메모리를 차지한다.여러 개의 with절을 동시에 돌리면 임시테이블에 부하가 발생해 다같이 느려진다. with절은 다음과 같은 두가지 방식이 이용된다. 1) materialize기본 with절 사용 시 적용되는 것으로 temp를 사용한다. 2) inlinetemp 테이블을 생성하지 않고 inli..
[MySQL] ROUND(), TRUNCATE() 숫자 데이터를 다룰 때, 소수점 자리를 처리해야하는 경우가 있다. MySQL에서 반올림과 버림 기능을 사용하기 위해 각각 ROUND()와 TRUNCATE() 함수를 사용할 수 있다. 반올림 ROUND ROUND() 함수를 사용하면 반올림을 사용할 수 있다. ROUND(소수, 나타내고 싶은 자리 수) 만약 소수점 3번째 자리에서 반올림을 하고싶다하면 다음과 같이 나타낼 수 있다. SELECT ROUND(123.4567, 2) -- 123.46 음수도 사용이 가능하다. SELECT ROUND(123.456, -1) -- 120 버림 TRUNCATE TRUNCATE() 함수를 이용하면 특정 자리 수 이하를 버릴 수 있다. TRUNCATE(숫자, 나타내고 싶은 ..
[MySQL] 계정 생성 및 권한 부여 DB를 처음 생성할 때 root 계정이 생성된다. 관리자 계정은 데이터베이스에 대한 모든 권한을 가지고 있다. 관리자 계정 이외의 사용자들은 용도에 맞는 권한을 부여받아 이용하는 것이 일반적이다. 그럼 일반 사용자 계정을 생성하고 그에 맞는 권한을 부여하는 방법은 무엇일까? user 확인 먼저 다음과 같이 MySQL에 접속해준다. mysql -h -u -p 다음과 같이 현재 user를 확인 할 수 있다. use mysql; select host, user, plugin, authentication_string from user; 계정 생성 -- 내부ip(localhost) 접속 가능 계정 CREATE USER '계정아이디'@'localhost' IDENTIFIED ..
[Airflow] 조건에 따라 Task 실행 조건에 따라 task가 실행되도록 구성을 하고 싶어, airflow에서 사용할 수 있는 operator를 찾아보니 활용할 수 있는 두가지 방업이 있었다. BranchPythonOperator task_id를 output으로하는 python callable을 통해 다음에 이어지는 작업 요소를 결정한다. 보통 선행 작업의 상황에 따라 다른 작업으로 이어져야 하는 경우에 사용한다. https://heywantodo.tistory.com/57 [Airflow] 조건에 따라 분기 (Branch) [Airflow] 조건에 따라 분기 (Branch) BranchPythonOperator 분기를 위한 워크플로가 필요하거나, 임의의 조건에 따라 분기를 할 때 사용 반환된 ta..
[Airflow] Airflow Configuration Airflow를 사용하면서 튜닝이 가능한 여러 설정이 있는데, 그 설정들에 대해 정리 해보고자 한다. Airflow 레벨 airflow 환경을 조정하는 것이므로 모든 dag에 영향을 준다. core config 명 설명 parallelism 단일 Airflow 환경 내에서 동시에 실행 할 수 있는 최대 task 수 max_activate_tasks_per_dag DAG당 한 번에 스케줄링되는 최대 task 수를 결정 max_activate_runs_per_dag 1개의 DAG안에서 최대 활성화되는 DAG의 수를 제어 dag_file_processor_timeout DAG 파일을 처리하는 DagFileProcessor가 시간 초과되기 전에 실행할 수..
[MySQL] DATE_FORMAT MySQL의 DATE_FORMAT 함수는 날짜를 지정한 형식으로 출력한다. DATE_FORMAT DATE_FORMAT(날짜, 형식) 주어진 date를 format에 맞춰 문자열로 변환한다. 구분 기호는 다음과 같다. 기호 역할 기호 역할 %Y 4자리 년도 %m 숫자 월(두자리) %y 2자리 년도 %c 숫자 월(한자리) %M 긴 월(영문) %d 일자(두자리) %b 짧은 월(영문) %e 일자(한자리) %W 긴 요일 이름(영문) %l 시간(12시간) %a 짧은 요일 이름(영문) %H 시간(24시간) %i 분 %r hh:mm:ss AM, PM %T hh:mm:SS %S 초 Example SELECT DATE_FORMAT(now(), '%Y-%m-%d'); -- 2023-11-..
[MySQL] 문자열 함수 MySQL 문자열 함수의 종류 함수 설명 CONCAT(문자열, 문자열) 문자열을 합쳐준다. LEFT(문자열, 길이) OR RIGHT(문자열, 길이) 왼쪽 또는 오른쪽에서 길이만큼 문자열을 끊어준다. SUBSTRING(문자열, 시작, 끝) 문자열을 기준에 따라 나눠준다. REPLACE(문자열, target, replace) 문자열 중의 target에 해당하는 부분을 replace로 바꾼다 REVERSE(문자열) 문자열을 거꾸로 뒤집는다. CHAR_LENGTH(문자열) 문자열의 길이를 반환한다. (공백 포함) UPPER(문자열) 문자열을 대문자로 전부 변환하여 반환한다. LOWER(문자열) 문자열을 소문자로 전부 변환하여 반환한다. CONCAT(문자열, 문자열) 문자열을 합쳐준다...
[SQL] COUNT() 함수의 최대값 혹은 최대값을 가지는 값 찾기 count()의 최대값 찾기 SELECT COUNT(COLUMN1) AS MAX FROM TEST GROUP BY COLUMN1 ORDER BY MAX DESC LIMIT 1; desc로 내림차순 정렬한 후, 반환 결과를 limit1으로 제한하여 가장 상단에 있는 값을 출력한다. count()의 최대값을 가지는 값 찾기 SELECT COLUMN2 FROM TEST GROUP BY COLUMN1 ORDER BY COUNT(COLUMN1) DESC LIMIT 1; order by절에서만 사용하고 출력 결과만 select하여 출력한다. limit 1로 제한하였으므로 최대값을 지니는 값이 두 개여도 하나만 출력되는 단점이 있는데 Having ..
[MySQL] REGEXP LIKE와 IN을 같이 사용한 것과 동일한 결과를 출력하는 방법이 없을까하고 찾아보니, REGEXP라는 정규식을 사용하면 like와 in을 동시에 사용한 것과 같이 사용이 가능하다고 한다. 사용법은 다음과 같다. TEST 테이블의 TEST1 컬럼에 감자, 튀김, 햄버거 중 하나라도 포함이 된 row는 출력을 한다. SELECT * FROM TEST WHERE TEST1 REGEXP '감자|튀김|햄버거' 다음은 예시 사용법이다. SELECT CAR_TYPE, COUNT(*) AS CARS FROM CAR_RENTAL_COMPANY_CAR WHERE OPTIONS REGEXP '통풍시트|열선시트|가죽시트' GROUP BY CAR_TYPE ORDER BY CAR_TYPE 참고 htt..
[MySQL] 재귀 쿼리(Recursive) 🤔재귀함수? 함수 안에 자신의 함수를 다시 호출하는 함수를 의미한다. 자신의 로직을 내부적으로 반복하다가, 일정한 조건이 만족되면 함수를 이탈하여 결과를 도출한다. MySQL에서도 재귀 쿼리 기법이 존재하는데, 사용법은 다음과 같다. WITH RECURSIVE 쿼리문을 작성하고, UNION을 통해 재귀를 구성한다. WITH RECURSIVE cte AS( SELECT 1 AS a --재귀 초깃값 UNION ALL SELECT a + 1 --재귀 FROM cte WHERE h < 5 --재귀 정지 조건 ) SELECT * FROM cte a 1 2 3 4 5 예를 들어, 0시부터 23시까지의 시간값이 필요할 때, 다음과 같이 재귀쿼리를 사용할 수있다. ANIMA..
[MySQL] NULL 처리 DB데이터를 조회할 때, Null 값을 처리해야 할 경우가 있다. MySQL에서 컬럼의 값이 Null 인 경우를 처리해주는 함수에 대해서 알아보자 IFNULL 해당 컬럼의 값이 Null을 반환할 때, 다른 값으로 출력할 수 있다. SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명; CASE 조건식을 통해 True, False를 판단하여 조건에 맞게 변환할 수 있다. CASE WHEN 조건식1 THEN 식1 WHEN 조건식2 THEN 식2 ... ELSE 조건에 맞는경우가 없는 경우 실행할 식 END SELECT CASE WHEN NAME IS NULL THEN "No name" ELSE NAME END as NAME FROM ANIMAL..