본문 바로가기
데이터베이스 계층 구조 인스턴스 - 데이터베이스 - 스키마 - 테이블, 인덱스 .프로시저. 뷰 등등 표준 관계형 데이터베이스에선 4계층 구조를 가진다. MySQL에선 데이트베이스 = 스키마로 보는 3계층으로 이루어져있다. Oracle에선 4계층 구조를 지닌 듯 보이지만 인스턴스 아래 하나의 데이터베이스만 만들 수 있다. 그래서 인스턴스 바로 아래 스키마 층이 있는 것처럼 여겨지기도 한다. 2021. 12. 4.
IN / EXISTS / 상관 서브쿼리 IN 열명 IN (집합) 스칼라 값은 = 연산자로 비교가 가능하다. 하지만 비교대상이 집합인 경우에는 = 연산자를 사용할 수가 없기 때문에 IN 키워드를 사용하여 집합 내에 해당 값이 존재하는지 비교할 수 있다. 집합 내에 해당 값이 존재하면 참이다. 여러 OR 조건문을 하나의 식으로 쓴 것이다. IN 왼쪽에는 하나의 열만 지정되기 때문에 집합은 집합 패턴 1, 2의 경우만 가능하다. 예) table1 no name 1 aa 2 bb 3 cc 4 dd 5 NULL table2 no name 1 가가 2 나나 3 다다 SELECT * FROM table1 WHERE table1.no IN (SELECT table2.no FROM table2); 결과) no name 1 aa 2 bb 3 cc 먼저 tabl.. 2021. 12. 4.
서브쿼리 SQL 명령문 안에 지정하는, 하부 SELECT 명령으로 괄호로 묶어서 지정한다! 일반적인 4가지 패턴 1. 햐나의 값 반환 MIN(a) 10 이 경우 '스칼라 값을 반환한다.'고 한다. 만일 = 연산자를 사용하여 비교할 경우에는 스칼라 서브쿼리여야 한다. 2. 하나의 열, 여러개의 행 a 1 2 3 3. 하나의 행, 여러개의 열 MIN(a) MAX(b) COUNT(c) AVG(d) 12 40 70 8 4. 여러 행, 열 no a b 1 45 5 2 78 25 WHERE 구에서 주로 사용하고 SELECT 구, FROM 구, INSERT 구 등 다양한 곳에서 쓰일 수 있다. INSERT 명령과 서브쿼리 INSERT 명령에서는 1. VALUES 구의 일부로 서브쿼리를 사용하는 경우와 2. VALUES 구 대.. 2021. 12. 3.
그룹화 - GROUP BY GROUP BY 구에 열을 지정하여 그룹화하면 지정된 열의 값이 같은 행끼리 하나의 그룹으로 묶인다. 마치 DISTINCT와 같이 중복을 제거하는 효과가 있다. SELECT name, COUNT(name), SUM(quantity) FROM table GROUP BY name; name열 값을 기준으로 그룹화가 된다,. HAVING WHERE 구 조건식으로 행을 검색하는 처리가 GROUP BY로 그룹화하는 처리보다 먼저 일어난다. 따라서 WHERE 구에서, 그룹화가 필요한 집계함수를 사용할 수 없다. 집계 함수 결과값에 의해 조건식을 작성하기 위해 HAVING 구를 쓴다! GROUP BY 뒤에 작성하여 WHERE 구와 똑같이 조건식을 쓸 수 있다. WHERE로 행 검색 -> 검색 후 GROUP BY로 그.. 2021. 12. 3.
집계함수 - COUNT / SUM / AVG / MIN / MAX 집계함수 대표적인 집계함수로 COUNT(집합) SUM(집합) AVG(집힙) MIN(집합) MAX(집합) 집계함수는 인수로 집합을 지정한다. 또, 여러 값(집합)에서 하나의 값을 계산해내는 함수다. 따라서 SELECT 구에 쓰면 WHERE 구와 관계없이 하나의 행으로 결과값이 반환된다. 집계함수는 집합 안에 NULL 값이 있으면 무시한다. COUNT SELECT COUNT(*) FROM table WHERE 조건식; COUNT(*) 5 COUNT(집합) 집계함수로 조건식에 맞는 행 개수를 구할 수 있다. WHERE 구 먼저 처리 후, SELECT 구가 처리되기 때문에 WHERE 구 조건식에 맞는 행의 개수가 반환된다. * DISTINCT로 중복값 제거 SELECT ALL name FROM table; /*.. 2021. 12. 3.
데이터 추가, 갱신, 삭제 - INSERT / UPDATE / DELETE 추가 - INSERT INSERT INTO 테이블명 VALUES(값1, 값2, ...); 열을 지정하여 INSERT INSERT INTO 테이블명(열1, 열2, ...) VALUES(값1, 값2, ...) INSERT INTO 테이블명(열1, 열2, ...) VALUES(값1, default, ...) 지정하지 않은 열에는 테이블 생성 시 설정한 default값이 저장된다. 혹은 default 키워드를 직접 사용하여 default값을 열에 저장할 수 있다. 만일 NOT NULL 제약이 걸려 있는 열은 NULL값이 허용되지 않는다. 갱신 - UPDATE UPDATE 테이블명 SET 열1=값1, 열2=값2, .... WHERE 조건식 DELETE와 달리 테이블의 셀 값을 갱신하는 명령이다. SET 구에 갱신.. 2021. 12. 3.
ASCII 코드 / 유니코드 / 인코딩, 디코딩 / UTF-8, EUC-KR ASCII 코드 알파벳 대소문자 - 52문자 숫자 0~9 - 10문자 특수문자 - 66문자 총 위 128개의 문자와 예비문자 128개를 정수(0~255)와 1:1로 매칭한 것이 ASCII 코드이다. 256개 = 2^8 -> 즉, 8bit = 1byte면 서로 다른 알파벳, 숫자, 특수문자 (+예비문자)까지 저장하여 사용할 수 있었다. 유니코드 하지만 ASCII코드만으로는 다른 나라의 언어를 표현할 수 없었다. 1byte로는 부족하니 여러 byte를 사용하여 하나의 문자를 표현하고자 했다. 이와 같은 이유로 전 세계 언어를 모두 매칭, 정의할 수 있는 국제 표준 코드인 유니코드가 등장했다. 인코딩 / 디코딩 인코딩 : 사람이 인지할 수 있는 형태의 데이터를 규칙에 의해 컴퓨터가 사용하는 0, 1로 변환하는.. 2021. 12. 3.
CASE문 CASE WHEN 조건식1 THEN 식1 [ WHEN 조건식2 THEN 식2 ] [ ELSE 식3 ] END ELSE는 생략 가능하며 생략했을 시 'ELSE NULL'로 간주한다. 예) a열의 값이 NULL값일 때 이를 0으로 변환하고 싶을 때 SELECT a, CASE WHEN a IS NULL THEN 0 END "a(null=0)" FROM table; 결과) a a(null=0) 1 1 2 2 NULL 0 NULL값을 변환할 때는 COALESCE 함수 사용 가능하다. SELECT a, COALESCE(a, 0) FROM table; NULL이 아니면 첫 번째 인수의 값을 반환(a열 값) NULL인 경우 두 번째 인수의 값을 반환(0) 서로 다른 형식의 CASE문 SELECT a "코드", CASE.. 2021. 12. 3.
연산 수치연산 SELECT 구, WHERE 구, ORDER BY 구 등 여러 구에서 연산을 할 수 있다. SELECT에서 열끼리 연산한 값에 예약어 AS를 사용해 별명을 정해줄 수 있다.(생략 가능) 한글과 같이 ASCII 문자(알파벳, 숫자 등)가 아닌 것으로 별명을 정해줄 땐 " "(더블쿼트)로 둘러싸준다. SELECT 구에서 지정해준 별명은 WHERE 구에서 사용할 수 없다, 이는 DB 서버 내부에서 처리 순서가 WHERE 구 -> SELECT 구이기 때문이다. WHERE 구로 행이 조건에 맞는지 조사한 후에 SELECT 구에 지정된 열을 선택해 결과를 반환하는 식이다. (ORDER BY 구는 가장 나중에 처리되므로 SELECT 구에서 지정한 별명을 사용할 수 있다.) 다른 구를 포함한 자세한 처리 순서.. 2021. 12. 3.
결과 행 제한(LIMIT OFFSET) LIMIT구로 반환될 행수를 제한할 수 있다. SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수 ORDER BY 구 뒤에 LIMIT 구가 온다. WHERE 구로 행을 검색한 후 ORDER BY로 정렬한 뒤 최종적으로 LIMIT 구를 처리한다. OFFSET LIMIT 구 뒤에 위치하고, 처음 출력할 데이터 행의 인덱스 위치를 뒤에 적으면 된다. SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수 OFFSET 시작행위치(인덱스) ** LIMIT 시작행위치(인덱스), 행 갯수 -> LIMIT 구에 숫자를 2개 쓰는 경우가 있다. 이는 OFFSET을 사용했을 때처럼 시작행위치의 인덱스와 행 갯수를 나타내는 표현이다. 2021. 12. 3.