전체 글
-
MySQL CTE 요약공부하기/데이터베이스 2023. 2. 10. 15:58
CTE: MySql 8.0 버전부터 도입된 새로운 기능 서브쿼리로 쓰이는 파생 테이블과 비슷한 개념이다. 파생된 테이블과 마찬가지로 CTE는 객체로 저장되지 않으며 쿼리 실행 중에만 지속된다. 문법 WITH cte_name (column_list) AS ( query ) SELECT * FROM cte_name; -> 정리 cte_name CTE의 이름 column_list는 옵셔널 넣지 않으면 반환되는 결과의 모든 컬럼 CTE의 쿼리문으로 걸러진 결과값으로 SELECT 하기 때문에 성능적으로 우수 CTE에 조건 쿼리, 아래 SELECT문으로 원하는 결과 쿼리를 사용하여 가독성이 좋은것으로 추정 예제 WITH CTE테이블 AS ( SELECT lastname, firstname FROM users WHE..
-
MySQL EXISTS 요약공부하기/데이터베이스 2023. 2. 10. 15:13
EXISTS : 결과 행이 1개 이상 존재하면 true 그렇지 않으면 false를 반환하는 부울 연산자이다. 종종 하위 쿼리에서 반환된 행의 존재 여부를 테스트하는데 사용한다. 일치하는 행을 찾는 즉시 추가 수행을 종료하므로 쿼리의 성능을 향상 시킬 수 있고 IN 연산자보다 빠르다. 반환되는 서브쿼리의 행이 크기가 클수록 EXISTS가 빠르고 작다면 IN이 빠르다. 문법 SELECT select_list FROM a_table WHERE [NOT] EXISTS(subquery); 예제 [CASE_1] SELECT customerNumber, customerName FROM customers WHERE EXISTS( SELECT 1 FROM orders WHERE orders.customernumber =..
-
MySQL GROUP BY 요약공부하기/데이터베이스 2023. 2. 9. 16:38
GROUP BY : 특정 컬럼을 기준으로 결과 집합을 데이터를 그룹화한다.. 결과 집합의 행 수가 줄어든다. HAVING 절을 사용하여 그룹화의 조건을 걸 수 있다. 중복을 제거할 때도 사용 가능하다. 자동으로 ORDER BY가 적용되지만 명시적으로 ORDER BY를 적어주는 것이 좋다. 집계 함수와 함께 자주 사용된다. ( SUM, AVG, MIN, COUNT ) [SELECT ~ GROUP BY] 쿼리 , [SELECT DISTINCT ~ ] 쿼리 비교 요약 DISTINCT는 정렬 없이 그룹화한 결과를 리턴한다. GROUP BY는 그룹화 + 정렬 결과를 리턴한다. 정렬 작업이 추가되었기 때문에 GROUP BY보다 DISTINCT가 더 빠르다. 주로 단순 중복을 제거하는 용도로 DISTINCT, 집계함..
-
MySQL Join 요약공부하기/데이터베이스 2023. 2. 9. 13:37
join은 뭐야? 왜 사용하는 거야? 관계형 데이터베이스는 여러 관계 테이블이 같은 컬럼을 linking하여 이뤄져있고 보통 이 컬럼을 외래키(foreign key)라고 한다. 주문과 주문 상세 테이블이 존재한다고 가정하고 완료된 주문을 찾고 싶다면 주문, 주문상세 테이블에 각 한번씩 쿼리를 날려야한다. 이렇게 불필요하게 쿼리를 2번 날리지 않기 위해서 필요한게 join이다. join은 테이블간의 공통 컬럼값을 기반으로 하나 이상의 테이블간의 데이터를 연결하는 방법이다. 포스팅 기준 테이블 및 데이터 CREATE TABLE user ( user_id INT AUTO_INCREMENT, name VARCHAR(100), PRIMARY KEY (user_id) ); CREATE TABLE user_info ..
-
MySQL IS NULL 요약카테고리 없음 2023. 2. 9. 11:53
IS NULL : value IS NULL value가 null 이면 1을 null이 아니면 0을 리턴한다. DATE와 NULL 예제 어떤 테이블의 start_date, end_date 컬럼의 선언이 NOT NULL 이고 start_date = 2023-01-01 end_date = 0000-00-00 값으로 데이터를 insert한 경우 -> select 문의 조건으로 where end_date IS NULL 을 통해 end_date의 값이 0000-00-00인 컬럼들을 조회할 수 있다. 예제 [CASE_1] WHERE salesrepemployeenumber IS NULL ORDER BY customerName; --> salesrepemployeenumber 가 NULL인 customerName을 기..
-
MySQL LIMIT 요약공부하기/데이터베이스 2023. 2. 9. 11:38
LIMIT: SELECT 쿼리의 반환되는 행의 갯수를 제한한다. offset은 건너뛰는 행의 갯수를 의미한다. row_count는 반환되는 행의 갯수를 의미한다. 반환되는 행의 값을 예측할 수 없으므로 order by 절과 함께 사용해야한다. 문법 [CASE_1] SELECT select_list FROM table_name LIMIT offset, row_count; [CASE_2] SELECT select_list FROM table_name LIMIT row_count OFFSET offset; 예제 [CASE_1] ... FROM customers ORDER BY creditLimit DESC LIMIT 5; ->> creditLimit값을 내림차순으로 정렬해서 가장 높은 creditLimit을 ..
-
MySQL LIKE 요약공부하기/데이터베이스 2023. 2. 9. 11:01
LIKE: 지정된 문자열을 포함하는지 포함하지 않는지를 테스트하는 논리연산자 expression이 pattern에 포함되면 1을, 그렇지 않으면 0을 리턴한다. 문법: expression LIKE pattern ESCAPE escape_character 패턴을 구성하기 위한 두개의 와일드카드 % : 조건에 맞는 문자열을 매칭 _ : 조건에 맞는 문자를 매칭 매치조건이 아닌 '_' 또는 '%' 문자를 검색하고 싶은 경우 ( 이스케이프 ) '/' 문자를 _ 또는 % 앞에 붙여주면 mysql은 _ 또는 %를 조건이 아닌 문자열로 인식하고 매칭한다. '/' 문자가 아닌 다른 문자열로 이스케이프 처리를 하고 싶은 경우 매칭 조건 뒤에 ESCAPE '원하는_문자'를 붙여준다. 예제 [CASE_1] WHERE fir..