SQL 8

[혼공SQL] 인덱스 사용 SQL

인덱스를 생성하고 삭제하는 과정에서 사용하는 SQL과 인덱스를 활용한 여러가지를 알아보자. 인덱스 생성 문법 인덱스를 생성하기 위해 사용하는 주 문법은 아래와 같다. 공식 문서의 문법은 아니지만 아래와 같은 형태를 주로 사용하니 참고하자. CREATE [UNIQUE] INDEX 인덱스_이름 ON 테이블_이름 (열_이름) [ASC | DESC]; UNIQUE는 아래의 두 가지 상황을 충족할 때 사용할 것을 권장한다. 현재 해당 열에 있는 데이터가 중복되지 않았을 때 추후 입력되는 데이터에서 해당 열의 중복 가능성이 없을 때 ASC, DESC는 인덱스를 오름차순으로 만들 것인지 내림 차순으로 만들 것인지를 결정하는 것인데 기본값이 ASC이며 DESC는 자주 사용하지 않는다. 또한 인덱스는 이름 앞에 idx_..

CS/DB 2024.02.01

[혼공SQL] 인덱스 내부 작동

인덱스는 내부적으로 균형 트리 형태로 만들어집니다. 균형트리는 자료구조 중 하나로써 범용적으로 많이 쓰이는 구조이니 알아두시면 좋습니다. 균형 트리의 개념 인덱스를 구현하는 데 사용되는 자료구조는 균형 트리입니다. 인덱스로써 쓰이는 균형 트리에 대해 조금 더 자세히 알아봅시다. 균형 트리 구조에서 데이터가 저장되는 공간을 노드라고 합니다. 아래의 그림은 노드 4개가 연결된 상태를 보여줍니다. 이러한 노드라는 용어를 MySQL에서는 페이지라고 부릅니다. 보통 페이지는 가장 작은 저장단위로도 쓰이는데 16Kbyte 정도의 크기를 갖습니다. 전체 테이블 검색 만약 균형 트리 구조를 사용하지 않는다면, 데이터를 검색하는데 어떠한 방식을 사용할까요? 아마도 전체 데이터를 검색하는 방식을 이용할 것 같습니다. 만약..

CS/DB 2024.02.01

[혼공SQL] 제약 조건

제약 조건이란 데이터의 무결성(데이터에 결함이 없음)을 지키기 위해 제한하는 조건을 의미합니다. 이러한 제약 조건에는 PK 제약조건, FK 제약조건, UNIQUE 제약조건, CHECK 제약 조건, DEFAULT 제약 조건, NULL값 허용이 있습니다. 오늘은 이들의 제약조건에 대해서 알아보겠습니다. PK 제약조건 테이블의 열에 PK 제약조건을 추가할 수 있다. PK(Primary Key)는 데이터를 구분할 수 있는 식별자를 의미하며 이는 중복될 수 없고 NULL이 될 수 없다 는 특징이 있다. 이렇게 기본키로 생성한 데이터는 자동으로 클러스터형 인덱스가 생성된다고 한다. 클러스터형 인덱스에 관해서는 나중에 다룬다. 또한 테이블에서는 기본 키를 하나만 가질 수 있다. 테이블의 특성을 가장 잘 반영하는 열을..

CS/DB 2024.01.29

[혼공SQL] 데이터의 형 변환

데이터의 형변환 데이터베이스의 데이터 타입 중 문자형을 정수형으로 바꾸거나 정수형을 문자형으로 바꾸는 것처럼 데이터의 형을 변경하는 행위를 형 변환이라고 합니다. 형 변환에는 함수를 사용해 직접 데이터의 타입을 변경하는 명시적 형 변환과 별도의 작업 없이 자연스럽게 변환되는 암시적 형 변환이 있습니다. 이 두 가지에 대해서 알아봅시다. 명시적 형 변환 명시적 형 변환에서는 CAST()와 CONVERT() 함수를 사용하여 데이터의 형 변환을 수행할 수 있습니다. 두 함수는 아래와 같이 사용할 수 있습니다. CAST(값 AS 데이터 형식[(길이)]) CONVERT(값, 데이터 형식[(길이)]) 실제 사용되는 경우를 확인해봅시다. SELECT AVC(price) AS '평균 가격' FROM buy; -- 수행..

CS/DB 2024.01.15

[혼공SQL] 변수의 종류와 사용

오늘은 MySQL에서 변수를 사용하는 방법에 대해서 알아봅니다. 사용자 정의 변수 변수의 선언 및 초기화 SQL 문에서 변수는 아래와 같이 선언 및 초기화를 진행할 수 있습니다. SET @변수이름 = 대입값; SELECT @변수이름 := 대입값; SQL에서는 SET을 제외한 나머지에서 등호(=)는 비교연산자로 취급됩니다. 따라서 SELECT에서는 콜론과 등호를 합쳐(:=) 사용하여 변수에 값을 대입해줄 수 있습니다. 변수 호출 SELECT @변수이름; -- 변수 호출 이렇게 변수에 어떤 값이 대입되었는지 출력 결과를 통해서 확인할 수도 있습니다. 변수의 사용 SET @txt = '가수 이름 ==> '; SET @height : 166; SELECT @txt, mem_name FROM member WHER..

CS/DB 2024.01.15

[혼공SQL] 데이터 변경 SQL

이번에는 데이터베이스에 값을 변경하기 위한 INSERT, UPDATE, DELETE를 알아본다. 데이터 입력 INSERT CREATE TABLE hongong (toy_id INT, toy_name CHAR(4), age INT); INSERT INTO hongong VALUES (1, '우디', 25); 1열에서는 테이블을 생성하였고, 해당 테이블에 대한 값을 2열에서 INSERT한 모습이다. 해당 SQL 문에서는 모든 열에 해당하는 값을 넣어주었기 때문에 생략된 부분이 존재한다. 아래를 보자. INSERT INTO hongong (toy_id, toy_name) VALUES (2, '버즈'); 이렇게 원하는 열에만 데이터를 넣을 수도 있다. 자동으로 증가하는 AUTO_INCREMENT AUTO_INC..

CS/DB 2024.01.11

[혼공SQL] SQL 기본 문법 SELECT

3-1에서 다룬 SELECT문의 키워드는 WHERE였다. 이제 더욱 다양한 작업을 위해 사용되는 GROUP BY, HAVING, ORDER BY, LIMIT에 대해서 알아보자. ORDER BY 절 ORDER BY는 결과의 값이나 개수에 대해서는 영향을 미치지 않지만 결과가 보여지는 순서에 영향을 준다. SELECT mem_id, mem_name, debut_date FROM member ORDER BY debut_date; 이렇게 되면 member 테이블에서 mem_id, mem_name, debut_date를 뽑아오는데, debut_date가 가장 빠른 순서대로 출력된다. 기본적으로 ORDER BY에서는 ASC와 DESC 키워드로 오름차순, 내림차순을 조절할 수 있다. 기본값은 ASC이며 DESC 즉,..

CS/DB 2024.01.10

[혼공SQL] SQL 기본 문법과 SELECT

SQL 기본 문법에 대해서 알아보자. 데이터베이스 만들기 DROP DATABASE IF EXISTS market_db; CREATE DATABASE market_db; 이 두 쿼리문으로 데이터베이스가 생성된다. 1. DROP DATABASE IF EXISTS market_db; 사실 테이블을 가장 먼저 생성하는 경우라면 이 쿼리문은 필요 없다. 만약 기존에 테이블이 존재한다면 해당 테이블을 지우고 다시 시작해야하므로 실행해주는 쿼리문이다. 2. CREATE DATABASE market_db; 데이터베이스를 drop 했으니 새로 DB를 생성해야 한다. CREATE 문으로 데이터베이스를 생성하는데 해당 데이터베이스의 이름을 market_db라고 지정한다. 테이블 만들기 USE market_db; CREATE..

CS/DB 2024.01.10