본문 바로가기

Study/DB12

DB - UNION과 UNION ALL UNION(UNION == UNION DISTINCT) : 여러 테이블에 존재하는 같은 성격의 값을 한번의 쿼리로 추출 할 수 있도록 돕는 명령어, 중복을 제거한 값을 출력한다. SELECT '1' AS COL1 , 'A' AS COL2 FROM DUAL UNION SELECT '2' AS COL1 , 'B' AS COL2 FROM DUAL UNION SELECT '3' AS COL1 , 'C' AS COL2 FROM DUAL UNION SELECT '1' AS COL1 , 'A' AS COL2 FROM DUAL 결과 : 1과 A가 중복이기 때문에 마지막 1, A의 값은 출력되지 않는다. UNION ALL : UNION과 동일한 기능을 실행하지만, 중복값을 제거하지 않고 전부 출력하는 명령어 SELECT.. 2021. 1. 15.
DB - EXISTS 와 IN A테이블 B테이블 EXISTS : 값이 존재하는지 확인 후 TRUE, FALSE를 반환 (서브쿼리를 사용해야 함, 서브쿼리 내에서 JOIN을 활용한다. JOIN과 유사하지만 값의 유무를 확인할경우 사용) IN : 값이 존재하는지 확인 후 해당 값을 반환 (특정 값을 입력해도 됨) EXISTS 활용방법 SELECT * FROM A WHERE EXISTS (SELECT 1 FROM B WHERE A.COL1 = B.COL1) 결과 : EXISTS는 비교하는 대상없이 서브쿼리의 비교 값 유무만을 확인한다. 서브쿼리절의 B테이블 COL1과 A테이블 COL1의 비교 조건을 통해 값이 존재할 경우 A테이블에서 존재하는 값을 출력한다. ---------------------------------------------.. 2021. 1. 15.
DB - SELECT 시 순위 출력 Mysql과 Mariadb에서 실험 ROW_NUMBER() : 설정에 따른 순서 반환(중복 상관 X) DENSE_RANK() : 설정에 따른 순서 반환(중복 순위 존재 상관없이 다음값 반환) RANK() : 설정에 따른 순서 반환(중복 순위 존재 시 해당 단계 건너띄고 다음값 반환) 옵션) OVER([PARTITION BY {그룹핑할 컬럼}] [ORDER BY {정렬할 컬럼}]) (PARTITION BY 없이 ORDER BY 단독 사용 가능) 예) SELECT T.NUM , ROW_NUMBER() OVER (ORDER BY T.NUM) AS ROW_NUMBER , DENSE_RANK() OVER (ORDER BY T.NUM) AS DENSE_RANK , RANK() OVER (ORDER BY T.NUM).. 2021. 1. 15.
MYSQL - LIKE와 IN을 함께 사용하기 MYSQL에선 LIKE와 IN을 함께 사용할 수 없음 정규식을 활용해 문제를 해결할 수 있음 사용법 WHERE {컬럼} REGEXP '문자열1|문자열2|문자열3|...' 사용 예) WHERE TEXT REGEXP '이런|문자열도|있고|저런|문자열도|있음' 위와 같은 사용법을 풀어쓰면 아래와 같음 WHERE TEXT LIKE CONCAT('%', '이런', '%') OR TEXT LIKE CONCAT('%', '문자열도', '%') OR TEXT LIKE CONCAT('%', '있고', '%') OR TEXT LIKE CONCAT('%', '저런', '%') OR TEXT LIKE CONCAT('%', '문자열도', '%') OR TEXT LIKE CONCAT('%', '있음', '%') 참조 : http.. 2021. 1. 15.
MYSQL - 비밀번호가 다르다고 할 경우 해결방법 잘 사용하던 DB의 비밀번호가 어느날 갑자기 다르다고 할 경우 아래의 방법들을 확인해보자. DB 서버가 종료 됨 서비스 창에서 DB가 실행되고 있는지 확인 비밀번호가 바뀜 APMSetup 같은 프로그램 설치로 인해 비밀번호가 바뀔 수 있으니 최근에 설치한 프로그램을 확인 (APMSetup 설치 시 비밀번호 : apmsetup) DB 접속 유저 권한이 바뀜 외부 접속 혹은 기타 사유로 인해 권한이 바뀌어서 접속이 안될 수 있음 DB Connect Port가 변경됨 혹은 사용중 사용하는 DB의 포트가 중복되거나 제대로 사용되고 있는지 확인 커맨드 창에서 netstat -a 명령어로 확인 비밀번호를 잘못 침 Capslock 및 여러가지 확인 2021. 1. 15.
MYSQL - my.ini 위치 Mysql 설정을 변경하기 위해 my.cnf 혹은 my.ini을 변경하라고 많이들 써있음, 하지만 이건 유닉스나 리눅스 환경에서 해당하는 이야기... my.cnf는 윈도우에 없음, my.ini을 찾아야 하는데 여기서 또 헤맴 대부분은 ProgramFiles/MySQL/MySQL Server 5.~/ 에 존재한다고 하는데 해당 폴더에 가보면 my.ini이 아닌 my-default.ini이 우릴 반겨줌 열심히 구글링을 해보았지만 딱히 답이없음 그래서 파일 이름찾기로 찾아봄 ProgramFiles가 아닌 ProgramData에 존재... C:\ProgramData\MySQL\MySQL Server 5.~\ 2021. 1. 15.
MYSQL - 주석 단일 주석(사용 DB마다 다를 수 있음) -- 주석 (슬래시 두개와 띄어쓰기 후 입력) # 주석 (샾과 띄어쓰기 후 입력) 다중 주석 /* 주석 */ 2021. 1. 15.
MYSQL - 재귀쿼리(WITH) 같은 결과를 반복하는 명령어들을 한번 실행 후 기억함으로써 불필요한 작업을 줄여준다. WITH CTE AS( SELECT ~ ) SELECT x FROM CTE MYSQL 8.0, MARIADB 10 버전부터 지원 보통 WITH의 결과를 CTE에 담는데 이름은 달라져도 상관없다. MYSQL에서는 WITH RECURSIVE CTE AS 와 같이 'RECURSIVE' 명령어가 들어가야 사용 가능하다. WITH RECURSIVE CTE(A, B, C) AS() 와 같이 결과물에 나타 낼 컬럼을 설정 할 수 있다(설정을 안 할 경우 전체값). WITH절의 SELECT가 JOIN등 테이블 사이의 관계를 통해 동일한 컬럼이 있을경우 제대로 출력이 되지 않으니 컬럼명을 일일히 기입해주는것이 좋다. 2021. 1. 15.
MYSQL - LPAD(RPAD) 정해진 문자를 정해진 길이가 될 때까지 문자열의 왼쪽에 붙게 해주는 명령어 LPAD({문자열},{조합 결과 문자열의 길이},{문자열 왼쪽에 붙을 문자}) 예1) SELECT LPAD('hi',4,'?'); > ??hi 예2) SELECT LPAD('hi',1,'?'); > 'h' ※ RPAD는 LPAD와 반대로 생각하면 된다(왼쪽 > 오른쪽) 참조 : http://blog.naver.com/PostView.nhn?blogId=pstormage&logNo=130121479405&parentCategoryNo=&categoryNo=11&viewDate=&isShowPopularPosts=true&from=search 2021. 1. 15.