SQL 기초 - 데이터 조작 언어(DML) 사용법 📊
데이터 조작 언어(DML)는 SQL에서 테이블 내 데이터를 삽입, 수정, 삭제 및 조회하는 데 사용.
1. 테이블에 데이터 삽입 💾
1.1. 모든 컬럼에 모든 데이터 삽입
데이터를 삽입할 때 입력하는 컬럼의 수와 테이블의 컬럼 수가 동일하고, 데이터 순서가 테이블의 컬럼 순서와 일치하는 경우 모든 데이터를 삽입할 수 있음.
- 테이블 구조 확인:(먼저)
테이블 구조를 파악하려면 desc 테이블명;을 입력함. (테이블 구조를 파악하여 컬럼의 수와 컬럼의 순서를 미리 파악해놓아야 에러가 없음) - 삽입:
- insert into kh_mem values (0, 'insert', 'qwer1234', '테스터', 25, now());
insert into 테이블명 values (입력데이터,입력데이터,입력데이터);
insert into kh_mem values (0, 'insert', 'qwer1234', '테스터', 25, now());
1.2. 특정 컬럼에 데이터 삽입- 지정한 컬럼의 수와 순서에 맞춰 데이터를 입력
특정 컬럼만 선택해서 데이터를 삽입하려면, 원하는 컬럼명과 데이터를 지정하여 삽입할 수 있음. 이 경우, 컬럼 순서와 관계없이 데이터를 입력할 수 있음.
- 삽입 예시:
- insert into kh_mem (id, pass, name, reg_date) values ('test2', 'qwer1234', '테스터2', now());
insert into 테이블명 (컬럼명,컬럼명,컬럼명) values (입력데이터,입력데이터,입력데이터);
insert into kh_mem (reg_date,name,id,pass) values (now(),'테스터2','test2','1234qwer');
1.3. SET 구문을 사용한 삽입
SET 구문을 사용하면 데이터 입력 시 컬럼명과 값을 =로 연결하여 삽입할 수 있음.
insert into values와 set의 차이점은 위에는 한번에 컬럼명 다 쓰고 입력데이터를 다 쓰는 방식이라면 set은 하나씩 1:1로 지정이 가능하다는 것.
insert into 테이블명 set 컬럼명=입력데이터, 컬럼명=입력데이터, 컬럼명=입력데이터, 컬럼명=입력데이터;
- 삽입 예시:
insert into kh_mem set id='test3', pass='P@ssw0rd', name='테스터3', age=30, reg_date=now();
2. 데이터 조회 🔍
데이터를 조회할 때는 SELECT 문을 사용함. 기본적인 조회부터 조건을 사용한 조회까지 다양한 방식이 가능함.
2.1. 모든 컬럼 조회
테이블의 모든 컬럼을 조회하려면 *를 사용함.
- 모든 컬럼 조회 예시:
- select * from 테이블명;
2.2. 특정 컬럼 조회
특정 컬럼만 조회하고 싶을 때는 컬럼명을 지정함.
- 특정 컬럼 조회 예시:
- select no, pass from kh_mem;
2.3. 조건을 지정하여 데이터 조회
WHERE 절을 사용하여 조건을 지정할 수 있음. 조건에 맞는 데이터만 조회됨.
select 컬럼명 from 테이블명 where 조건;
- 조건 예시:
select * from kh_mem where no > 1;
select * from kh_mem where id='test3';
조건을 입력하는 방법(조건의 기본 구조) | 컬럼명 연산자 인자값(조건값) |
= | 같다 |
> | 왼쪽 값(컬럼명(해당 컬럼 안에 저장된 데이터))이 오른쪽 값(인자값)보다 큰 경우 |
< | 왼쪽 값보다 오른쪽 값이 큰 경우 |
>= | 왼쪽 값이 오른쪽 값보다 크거나 같은 경우 |
<= | 왼쪽 값보다 오른쪽 값이 크거나 같은 경우 |
2.4. 여러 조건을 사용할 때
여러 조건을 결합할 때는 AND와 OR을 사용함.
- AND: 여러 조건을 모두 만족해야 출력됨.
- select * from kh_mem where no = 1 and age = 25;
- OR: 하나의 조건만 만족해도 출력됨.
- select * from kh_mem where no = 1 or no = 2;
- 우선순위: AND가 OR보다 우선 적용되므로, OR을 먼저 적용하고 싶다면 괄호로 묶어줘야 함.
- 1. and만 여러개
no=1 and no=2 and no=3
순서대로 조건 만족 여부를 판단
2. or 만 여러개
no=1 or no=2 or no=3
순서대로 조건 만족 여부를 판단
3. and,or가 섞여있는 경우
no=1 and no=2 or no=3
no=1 or no=2 and no=3
and가 우선(순서와 상관없이)
or 연산을 먼저 우선하고 싶은 경우 (괄호 입력)
no=1 and (no=2 or no=3) - select * from kh_mem where no = 1 and (no = 2 or no = 3);
0, 1로 구성된 데이터를 연산하기 위한 연산자 -> bit 연산자
0 = 거짓, 1 = 참
and 연산
0 and 0 = 0 -> 거짓 and 거짓 = 거짓
1 and 0 = 0 -> 참 and 거짓 = 거짓
0 and 1 = 0 -> 거짓 and 참 = 거짓
1 and 1 = 1 -> 참 and 참 = 참
and 묶인 두개의 조건이 전부 참인 경우에만 조회가 가능
or 연산
0 or 0 = 0 -> 거짓 or 거짓 = 거짓
0 or 1 = 1 -> 거짓 or 참 = 참
1 or 0 = 1 -> 참 or 거짓 = 참
1 or 1 = 1 -> 참 or 참 = 참
or 묶인 두개의 조건 중 하나라도 참이면 조회가 가능
2.5 검색을 위한 like 연산자
= 같은 경우는 컬럼의 데이터와 인자값이 완전히 동일해야만 조건을 만족
일정 부분만 같거나 비슷한 경우에도 조건을 만족시키고 싶은 경우 사용하는 연산자가 like 연산자
like 연산자 사용시 사용하는 기호 2개
1. _ -> 한자리의 모든 문자
2. % -> 여러자리(없는 것도 포함)의 모든 문자
id like 'test_'
id like 'test%'
3. 데이터 수정 ✏️
기존 데이터를 수정할 때는 UPDATE 구문을 사용함.
3.1. 전체 데이터 수정
특정 테이블의 모든 데이터를 수정할 때는 조건 없이 UPDATE 구문을 사용함.
update 테이블명 set 컬럼명=수정데이터;
- 전체 데이터 수정 예시:
update kh_mem set age=40;
update kh_mem set pass='hello', age=40;
3.2. 조건을 지정하여 데이터 수정
조건을 지정하여 특정 데이터만 수정할 수 있음.
update 테이블명 set 컬럼명=수정데이터 where 조건;
- 조건 예시:
- update kh_mem set pass = 'hello', age = 40 where no = 1;
update kh_mem set pass = 'hello', age = 40 where no = 1;
4. 데이터 삭제 🗑️
DELETE 구문을 사용하여 테이블에서 데이터를 삭제할 수 있음.
4.1. 전체 데이터 삭제
조건 없이 데이터를 모두 삭제할 수 있음.
delete from 테이블명;
- 전체 데이터 삭제 예시:
delete from kh_mem;
4.2. 조건을 지정하여 데이터 삭제
특정 조건에 맞는 데이터만 삭제할 수 있음.
delete from 테이블명 where 조건;
- 조건 예시:
delete from kh_mem where no = 1;
5. 데이터 조회 및 조건 추가 🔎
5.1. 특정 범위의 데이터 조회
BETWEEN을 사용하면 특정 범위에 해당하는 데이터를 조회할 수 있음.
- BETWEEN 예시:
- select name, address, age from member where age between 20 and 29;
5.2. IN 연산자
IN 연산자를 사용하면 여러 조건을 하나로 묶을 수 있음.
- IN 예시:
- select * from member where no in (1, 2);
6. 데이터 자르기 (LIMIT) ✂️
특정 범위의 데이터를 출력할 때는 LIMIT을 사용할 수 있음.
6.1. 첫 번째 위치부터 자르기
- 예시:
- select * from member limit 3;
- -- 첫 3개 출력
6.2. 특정 위치부터 자르기
OFFSET을 사용하면 특정 위치부터 데이터를 출력할 수 있음.
- 예시:
- select * from member limit 3 offset 2;
- -- 3번째 줄부터 3개 출력
10번째 위치부터 3개의 데이터를 출력
select * from member limit 3 offset 9;
select * from member limit 9,3;
select * from member limit 9,3;
7. 데이터 정렬 🔢
데이터를 정렬하려면 ORDER BY 절을 사용함.
7.1. 오름차순 및 내림차순 정렬
- 오름차순 정렬 예시:
- select * from member order by age asc;
- 내림차순 정렬 예시:
- select * from member order by age desc;
7.2. 중복 제거
DISTINCT를 사용하면 중복 데이터를 제거할 수 있음.
중복이 많거나 특정 데이터만 저장하는 컬럼에서 중복을 제거하고 출력하고 싶은 경우 사용
+출력할 컬럼의 제약조건에 unique가 있는 경우에는 의미가 없다.
- 중복 제거 예시:
- select distinct sex from member;
8. 그룹화 및 집계 함수 📊
데이터를 그룹화하여 집계 함수로 분석할 수 있음.
특정 컬럼 안에 데이터를 기준으로 종류를 나눠서 따로 조건을 부여하고 싶은 경우
그룹핑 + 집계함수
8.1. 그룹화
GROUP BY 절을 사용하면 데이터를 특정 기준으로 그룹화할 수 있음.
- 그룹화 예시:
- 집계 -> 평균, 개수, 최대 값, 최소 값, 합계 등등
select count(*) from member group by sex;
- 성별을 기준으로 그룹을 나눠 각 그룹당 카운트를 출력하겠다.
select * from member group by sex;
- 성별을 기준으로 그룹을 나눠 출력하겠다.
8.2. 집계 함수
- count(): 개수 -> count(*)
- avg(): 평균
- sum(): 합계
- max(): 최대값
- min(): 최소값
- 집계 함수 예시:
select count(*), avg(age), sum(age), max(age), min(age) from member;
select count(*), avg(age), sum(age), max(age), min(age) from member;
8.3. 그룹화 후 조건 적용
HAVING을 사용하면 그룹화 후 조건을 추가할 수 있음.
- HAVING 예시:
select sex, count(*), avg(age), sum(age), max(age), min(age) from member group by sex having count(*) > 9;
- 개수가 9 초과 인 데이터만 출력
select sex, count(*), avg(age), sum(age), max(age), min(age) from member group by sex having sex='M';(o)
- 테이블 안에 데이터를 성별로 그룹화 한 후 성별이 남성인 데이터만 출력
'DB' 카테고리의 다른 글
database engine / 데이터베이스 엔진 (0) | 2025.05.11 |
---|---|
연습문제 풀이 SQL (DDL,DML,DCL,Join,Union,서브쿼리) (0) | 2025.05.10 |
DCL 데이터 제어어 Data Control Language (계정정보, 계정생성, 비밀번호 변경, status, 다른 db정보 검색) (0) | 2025.05.08 |
Maria SQL - DDL 명령어 / 데이터베이스 목록 조회, 전체 목록 확인/ 테이블 생성, 추가,수정,삭제, 초기화 (0) | 2025.05.03 |
DBMS, 데이터 베이스 이해, SQL 정의, 구조 -maria db설치 후 초기 설정(한글) (0) | 2025.05.02 |