GROUP BY SQL에서 GROUP BY는 특정 컬럼을 기준으로 행을 그룹화하고 그룹별로 집계 함수(COUNT, SUM, AVG, MIN, MAX 등)를 적용하기 위해 사용합니다. 예시 1) 예시를 위해 아래와 같이 sales라는 테이블을 생성했습니다. 이때 product_id(제품 아이디)와 quantity(판매수량)을 그룹화해서 조회하는 구문은 아래와 같습니다. SELECT product_id, quantity FROM sales GROUP BY product_id, quantity 예시 2) product_id 별로 quantity 합계를 구하기 group by는 집계함수와 함께 자주 사용됩니다. 예를 들어, sales 테이블에서는 동일한 product_id에 대해 판매된 수량이 여러 행으로 나누..
ORDER BY SQL에서 ORDER BY는 데이터베이스에서 조회된 결과를 특정 컬럼의 값에 따라 정렬할 때 사용합니다. SELECT와 함께 사용하며, 오름차순(ASC) 또는 내림차순(DESC) 순서로 정렬할 수 있습니다. 기본 구문은 아래와 같습니다. SELECT column1, column2, ... FROM table_name ORDER BY column_name [ASC | DESC], column_name2 [ASC | DESC], ...; 예시 1) 한 개의 컬럼에 적용하는 경우 employees_라는 테이블에는 직원의 id, first_name(이름), last_name(성), salary(급여) 컬럼이 존재합니다. 이때 직원의 이름과 급여를 조회하되, 급여를 기준으로 내림차순 정렬하려면 아..
관계형 데이터베이스 관리 시스템(RDBMS)에서 키(key)는 테이블에서 행을 고유하게 식별하거나 관계를 정의하는 데 사용됩니다. 그중에서도 가장 활용도가 높은 것이 기본키(primary key)와 외래키(foreign key)입니다. 기본키와 외래키가 무엇인지, 왜 필요한지 알아보겠습니다. KEY 1. 기본키(Primary Key) 기본키는 각 행을 고유하게 식별하는 데 사용되는 하나 이상의 컬럼으로 구성됩니다. 기본키는 아래와 같은 특징을 가지고 있습니다. 고유성(Unique) : 기본 키의 값은 테이블 내에서 중복되지 않아야 합니다. 무결성(Not Null) : 기본 키의 값은 null이 될 수 없습니다. 간단한 예로, 학생 정보가 담긴 테이블에선 학번을 기본키로 사용할 수 있습니다. 모든 학생의 ..
SQL에서 WHERE 절 뒤에 사용할 수 있는 연산자 및 조건으로는 비교 연산자, 논리 연산자, NULL 처리, 패턴 매칭 등이 있습니다. 일반적으로 자주 사용되는 연산자와 조건을 정리해 보겠습니다. WHERE 절 연산자 1. 비교 연산자 != : 두 값이 다를 때 : 왼쪽 값이 오른쪽 값보다 클 때 = : 왼쪽 값이 오른쪽 값보다 크거나 같을 때 예시) SELECT * FROM employees WHERE salary > 50000; 2. 논리 연산자 AND : 두 조건이 모두 참일 때 OR : 두 조건 중 하나 이상이 참일 때 NOT : 조건이 참이 아닐 때 예시) SELECT * FROM employees WHERE salary > 50000 AND department = 'IT'; 3. NULL ..
특정 데이터베이스의 구성을 보고 싶을 때 select * from tablename 형태로 조회를 하곤 합니다. 그런데 이 구문을 함부로 써서는 안 되는 경우가 있습니다. 조회하는 테이블에 데이터가 너무 많은 경우입니다. 현업에선 하나의 테이블에 10만행이 쌓여있는 건 예사고 100만행, 1000만행, 1억행 이상까지 쌓여있는 것도 종종 봅니다. 이렇게 많은 데이터를 와일드카드(*)로 한번에 조회하면 부하가 심해져 전체 시스템에 악영향을 줄 수 있습니다. 이럴 때 유용하게 사용할 수 있는 것이 limit입니다. limit 사용법 SQL에서 limit은 쿼리 결과로 반환되는 행의 수를 제한합니다. 원하는 행만큼만 출력할 수 있습니다. 아래와 같이 사용합니다. SELECT column_name FROM ta..
DISTINCT는 SQL에서 중복을 제거한 값을 얻고 싶을 때 SELECT문과 함께 사용합니다. DISTINCT 예시 1) distinct를 사용하는 이유 예를 들어, 회사 직원 정보를 담은 employees 테이블에 아래와 같은 데이터가 있습니다. 이때 회사의 직책(position)별로 인원을 파악하고 싶으면 distinct를 사용해 중복되지 않은 직책만 조회할 수 있습니다. SELECT DISTINCT position FROM employees; 만약 distinct를 사용하지 않으면 중복된 직책이 결과에 포함됩니다. 이처럼 중복된 값을 제거한 결과를 얻고 싶을 때 사용할 수 있습니다. SELECT position FROM employees; 예시 2) 여러 컬럼에 distinct 사용 여러 컬럼에 ..
리눅스 쉘 스크립트로 DBMS에 접근해서 특정 테이블을 삭제하는 방법을 알아보겠습니다. 주기적으로 DB 삭제가 필요한 경우 스케줄러에 등록해 놓고 삭제 작업을 자동화할 수도 있습니다. 리눅스 DB 삭제 스크립트 만들기 예시로 테스트를 진행하기 위해 LOGDB라는 DB에 test_log라는 테이블을 생성하고 날짜 정보를 포함하는 샘플 데이터를 insert하겠습니다. DBMS는 MYSQL 기준입니다. # test_log 테이블 생성 CREATE TABLE test_log ( id INT AUTO_INCREMENT PRIMARY KEY, date DATE NOT NULL, content VARCHAR(255) NOT NULL ); # test_log 테이블에 샘플 데이터 생성 INSERT INTO test_l..
MYSQL에서 Client does not support authentication protocol requested by server; consider upgrading MySQL client 오류가 발생하는 이유는 클라이언트가 서버에서 요청한 인증 프로토콜을 지원하지 않기 때문입니다. 이 문제의 해결 방법을 알아보겠습니다. 해결 방법 먼저 현재 사용 중인 서버의 인증 플러그인을 확인하기 위해 mysql에서 아래의 쿼리를 실행합니다. USE mysql; SELECT Host,User,plugin FROM user; 아마 plugin 컬럼 값이 caching_sha2_password일 것입니다. 이 플러그인을 클라이언트에서 처리해주지 못해서 에러가 발생하는 것입니다. 1. 클라이언트 업그레이드 최신 버전..
MYSQL에서 계정에 권한을 부여하려면 GRANT 명령어를 사용합니다. GRANT 명령어는 MYSQL 5.x 버전과 MYSQL 8.x 버전에 약간의 차이가 있습니다. 작성된 내용은 8버전 기준이며, 5버전과의 차이도 알아보겠습니다. GRANT 기본 구문 GRANT privilege_type ON database_name.table_name TO 'username'@'host'; 이 명령은 각 위치 별로 어떤 걸 의미하는지 이해하고 써야 합니다. 그래야 권한을 과도하게 주는 것을 경계할 수 있습니다. privilege_type : 사용자에게 부여하려는 권한의 유형입니다. 이 자리에는 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALL 등이 올 수 있습니다. databa..
INSERT INTO는 테이블 컬럼에 값을 넣는 SQL 구문입니다. 값은 테이블 전체 컬럼에 넣을 수도 있고, 일부 컬럼에만 넣을 수도 있습니다. INSERT INTO 1. 전체 컬럼에 INSERT 전체 컬럼에 insert하는 경우 아래와 같은 구문을 사용합니다. INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); 예시) INSERT INTO employees (employee_id, first_name, last_name, age, department) VALUES (1, 'John', 'Doe', 30, 'IT'); 참고로 전체 컬럼에 값을 넣을 땐 굳이 컬럼명을 모두 명시하지 않아도 ..