1. 정규화 - 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며, 데이터를 분해하는 과정 - 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법 - 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다. - 정규화를 수행하면 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화 할 수 있다. - 정규화는 제 1정규화 부터 제 5정규화 까지 있지만 실질적으로는 제 3 정규화까지만 수행한다. - 테이블을 분해하기 때문에 join을 수행하여 하나의 합집합으로 만들 수 있다. - 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다. - *이상현상이 발생하는 문제를 해결할 수 있다. * 이상현상(Anoomaly)..
어떤 컬럼의 값들을 대상으로 원하는 특징값을 구해주는 함수를 Aggregate Function, 우리말로는 집계 함수라고 한다. 1. SUM() 함수 - 합계 2. STD() 함수 - 표준편차 그런데 SQL에는 집계 함수 말고도, 단순한 산술 연산을 해주는 Mathematical Function들도 있다. 우리 말로 '산술 함수'라고 할 수 있는데. ABS() 함수 - 절대값을 구하는 함수 SQRT() 함수 - 제곱근을 구하는 함수 CEIL() 함수 - 올림 함수 이런 함수들이 있다. 3. FLOOR() 함수 - 내림 함수 4. ROUND() 함수 - 반올림 함수 이것 말고도 또 다양한 산술 함수들이 있는데, 더 많은 산술 함수는 SQL 매뉴얼을 참고하면된다. 집계 함수와 산술 함수의 차이점은 집계 함수..
1. IS NULL 과 = NULL은 다르다. select * from table where column is null이라고 쓰면 컬럼 값이 null인 것을 고를 수 있다. 하지만 =null이라고 쓴다면 결과는 다르게나온다. =null이라고 쓰면 아무런 row도 출력되지 않는다. NULL은 어떤 값이 아니기 때문에 애초에 등호(=)를 사용해서 어떤 값과 비교할 수 있는 대상이 아니다. 그래서 = NULL은 절대 TRUE일 수가 없다. 그래서 IN NULL이라고 쓰는 것이다. 앞으로 NULL인지를 확인할 때는 = NULL을 쓰면 안 되고, 반드시 IS NULL을 써야한다 당연히 != NULL, NULL 같은 것도 쓸 수 없다. 이는 IS NOT NULL이라고 써야한다. 2. NULL에는 어떤 연산을 해도 ..
대소문자 구분 문제 예를들어 소문자 g가 포함된 값들을 찾는다고 할 때, 조건식에 소문자 g를 썼는데 대문자 G가 포함되어 있는 row도 함께 조회가 되어버린다. 이것은 mySQL의 기본 설정 때문이다. 테이블에 적용된 기본 설정을 보는 방법은. 위 그림의 i 표시를 클릭하면된다. 여러 항목들 중에서 Table collation 항목을 보면된다. 이 항목은 문자열이 서로 동일한지를 비교할 때 적용되는 설정이다. 그 뒤에 utf8mb4_0900_ai_ci 라는 값이 써있습니다. 여기서 ci는 case-insensitive의 약자로 문자열이 동일한지 확인할 때, 대소문자를 구별하지 않겠다는 뜻이다. 바로 이 설정 때문에 아까 대소문자가 달라도 알파벳만 같으면 같다고 판단하는 것이다. 만약 이 설정을 다른 걸..
Workbench UI 1) 쿼리 창 생성 아이콘 1번 아이콘을 클릭하면 3번과 같이 SQL 문을 쓸 수 있는 SQL 에디터탭을 새로 열 수 있다. 그때마다 2번 영역에서 탭의 개수가 늘어난다. 2) 쿼리 창 탭 쿼리 창 생성 아이콘을 누를 때마다 이 영역에 존재하는 탭의 개수가 늘어난다. 3) 쿼리 창 SQL 문을 입력할 수 있는 공간. 4) SQL 문 실행 아이콘 쿼리창에 입력한 SQL 문을 실행한다. 단축키는 '시프트 + 커맨드(윈도우는 컨트롤) + 엔터' 5) 새로고침 아이콘 데이터베이스를 새로 생성하거나, 데이터베이스에 테이블을 새로 추가했을 때 새로고침으로 확인 6) 테이블 조회 아이콘 6번 영역의 2개의 아이콘 왼쪽의 스패너 모양 - 해당 테이블의 컬럼과 각 컬럼의 데이터 타입 등을 볼 수 ..
데이터 정렬은 order by ~를 통해 asc(오름차순), desc(내림차순)으로 정렬한다. 데이터를 정렬할 때 숫자형(INT 등)인 경우와, 문자열형(TEXT 등)인지에 따라 정렬 결과가 달라진다. 아래 그림을 보면 ordering_test라는 테이블에서 data 컬럼을 기준으로 오름차순 정렬을 하고있다. 크기가 큰 순서대로 정렬되어 있다(오름차순) data의 데이터 타입을 INT-> TEXT로 바꾼 뒤, Apply 버튼을 눌러서 적용, 다시 정렬을 실행시켜보면, 이전과 다른 결과가 나온다. 그건 INT 타입과 TEXT 타입의 정렬 방식이 다르기 때문이다. INT 타입의 값은 숫자의 대소(크고 작음)를 기준으로 정렬이 수행되지만, TEXT 타입의 값은 숫자의 대소가 아니라 한 문자, 한 문자씩 그 문..