BE/DB(19)
-
[DB] SubQuery
부속 질의 (subquery) SELECT sum(saleprice)FROM orderTableWHERE custid=(SELECT custid FROM customerTable WHERE name = '박지성')부속질의란 하나의 SQL 문 안에 다른 SQL 문이 중첩된 질의를 말함. 다른 테이블에서 가져온 데이터로 현재 테이블에 있는 정보를 찾거나 가공할 때 사용함. 보통 데이터가 대량일 때 데이터를 모두 합쳐서 연산하는 조인보다 데이터만 찾아서 공급해주는 부속질의가 성능이 더 좋음. Join과 Subquery의 성능 차이는 case by case다. 데이터베이스 최적화, 인덱스 사용 여부, 쿼리 작성 방법 등 주어진 상황에 따라 다르므로 특정 상황에서는 JOIN이 더 효율적일 수 있고, 다른 상황..
2024.06.23 -
[DB] JOIN
1. JOIN 둘 이상의 테이블에서 데이터가 필요할 때 관련 있는 속성을 기준으로 복수의 테이블을 ‘관계’ 지어주는 연산. 그래서 관계형 데이터베이스의 꽃이라 부른다. 일반적으로 각 테이블의 PK 및 FK로 구성된 조인 조건을 포함하는 WHERE 절을 작성해야 한다. 가. JOIN의 종류 조인은 크게 일반적인 조인(혹은 내부 조인)과 외부 조인으로 나눌 수 있다. INNER JOINOUTER JOINLEFT OUTER JOINRIGHT OUTER JOIN 2. INNER JOIN 두 테이블 모두에서 일치하는 값을 가진 행만 반환. select e.employee_id, e.first_name, e.salary, d.department_namefrom employees e inner join depart..
2024.06.22 -
[DB] VIEW
1. View 가. View란? 데이터베이스에 존재하는 ‘가상의 테이블’ 실제 행과 열을 가지고 있지만 데이터를 저장하고 있지 않고 SQL만 저장한다. MySQL에서는 단지 다른 테이블이나 View의 데이터를 보여주는 역할만 수행한다. 복잡한 Join이나 Subquery를 View를 사용해서 단순하게 만들 수 있다. 나. 장점SELECT CustomerName, OrderIDFROM CustomersINNER JOIN Orders ON Customers.CustomerID = Orders.CustomerIDWHERE Customers.Country = 'USA';예를 들어, 다음과 같은 복잡한 쿼리를 가지고 있다고 가정해 본다. (실제로는 더 복잡하고 반복되겠죠?) CREATE VIEW USA_Order..
2024.06.22 -
[DB] INDEX
1. Index 데이터베이스(DB)의 인덱스란 데이터 검색 속도를 높이기 위해 사용하는 기술이다. 또한 특정 항목들에 대하여 중복이 발생하지 않도록 관리하기 위해서 사용되기도 한다. 하지만, 인덱스는 별도의 공간을 차지하고, 데이터가 변경될 때마다 추가적인 연산이 발생한다. 인덱스를 사용할지 말지 신중하게 따져봐야 한다. 2. Index의 종류 인덱스는 몇 가지 조건에 따라서 생성된다. PK 존재 PK 없음 Clustered index PK Unique + NOT NULL Secondary key Unique Unique show index from table_name; 테이블의 index를 조회할 수 있다. 가. Clustered index 클러스터형 인덱스 : 데이터들을 일정 기준으로 정렬하는 인덱스..
2024.04.15 -
[DB] Transaction
1. Transaction 데이터베이스의 상태를 변화시키는 일종의 작업 단위 트랙잭션 도구 설명 START TRANSACTION 트랜잭션을 시작하는 명령어 COMMIT 수정된 내용을 데이터베이스에 반영하는 명령어 ROLLBACK 트랜잭션에서 수행된 모든 변경을 원래대로 되돌리는 명령어 SAVEPOINT 롤백을 원하는 특정 시점을 지정하는 명령어 mysql은 기본적으로 autocommit으로 설정되어 있다. autocommit이면 실행과 동시에 데이터베이스에 변화를 반영한다. 끄면 commit 전까진 메모리 상에서만 데이터를 변경하고 실제 데이터베이스에선 변화하지 않는다. -- 확인 select @@autocommit; -- 1인 경우 autocommit -- 변경 set autocommit = 1; --..
2024.04.14 -
[DB] SET Operator
1. SET Operator Operator 설명 중복 UNION 합집합 제거 UNION ALL 합집합 유지 INTERSECT 교집합 없음 MINUS 차집합 없음 mysql은 UNION, UNION ALL 연산자는 제공한다. 단, MINUS, INTERSECT 연산자는 지원하지 않는다. 그래서 동일한 기능을 다른 방식으로 구현해야 한다. 2. INTERSECT 극복 select col_1 from table_1 intersect select col_2 from table_2; 동일한 기능을 mysql에서는 inner join으로 극복해야 한다. select col_1 from table_1 t1 inner join table_2 t2 on t1.col_1 = t2.col_2; 3. MINUS 극복 sel..
2024.04.14 -
[DB] 내장함수
1. 내장함수 가. 숫자 함수 설명 ABS(x) x의 절대값을 반환 CEILING(x) x보다 크거나 같은 가장 작은 정수를 반환 (올림) FLOOR(x) x보다 작거나 같은 가장 큰 정수를 반환 (내림) ROUND(x, d) x를 d 소수점 자리에서 반올림 TRUNCATE(x, d) x를 소수점 자릿수 d 까지 버림. POW(x, y) x의 y 거듭제곱 값을 반환 MOD(x, y) x를 y로 나눈 나머지를 반환 GREATEST(x, y, z, ...) 인수 중 가장 큰 값을 반환 LEAST(x, y, z, ...) 인수 중 가장 작은 값을 반환 // 올림 : 크거나 같은 가장 작은 정수 select ceiling(12.2), ceiling(-12.2) from dual; // 13 -12 // 내림 :..
2024.04.14 -
[DB] NULL, CASE, ESCAPE
1. NULL DBMS에서 null는 "값을 알 수 없음"을 의미한다. 가. IS NULL null는 "값을 알 수 없음"을 의미한다. select * from ta where can_be_null = null; 그래서 다음과 같은 방식으로 null인 row를 찾을 수 없다. select * from ta where can_be_null is null; null 값을 찾고 싶다면 = null이 아닌 is null 을 사용할 것. select * from ta where can_be_null is not null; is not null도 가능한다. 나. IFNULL() select IFNULL(can_be_null, 0) from ta; IFNULL(can_be_null, 0) : can_be_null가 ..
2024.04.14