DB 명령어 정리

알파카파카·2025년 5월 30일
post-thumbnail

데이터베이스 ( DB )란?

일정한 체계 속에서 추출되어 저장된 데이터의 집합
데이터는 테이블 ( 표 )안에 저장된다.
테이블의 집합을 데이터베이스라고 이야기 한다.


데이터베이스를 어떻게 사용하나?

바로 DBMS ( 데이터베이스 관리 시스템 )
DataBase Management System
을 통하여 DB에 접근해서 사용한다.

데이터를 조회하거나 삽입, 삭제 같은 일을 할 수 있다.

데이터베이스는 MySQL, MSSQL, Oracle, MariaDB, Postgre 같은 엄청 많은 종류가 있는데

각각 조금씩 다른 명령어로 어떤 DB를 다루는지에 따라 달라진다.

따라서 알아야 할 것도 전체적인 틀은 같지만 조금씩 달라진다.

다르다고 하는 세세한 내용은 조금씩 알아가기로 하고,

우선은 기본적인 SQL( DBMS에서 사용하는 언어 )을

알아보자


이렇게 '고객'이라는 이름의 테이블이 있으면

  • 고객
고객ID이름전화번호이메일가입일
001김민수010-1234-5678minsu.kim@email.com2023-01-15
002이지영010-2345-6789jiyeong.lee@email.com2022-05-22
003박상훈010-3456-7890sanghun.park@email.com2021-08-30
004최유진010-4567-8901yujin.choi@email.com2024-03-01

행 - Row ( 하나의 개체 ( 사용자 ) 를 나타내는 데이터의 집합 )
열 - Column ( 같은 종류의 데이터 집합 )

이 정의는 잘 알아둬야 한다.

( + 참고
가끔 데이터에 NULL이 보일건데 이건 데이터가 들어가 있지 않은 것,
프로그램을 짤 때 null과 헷갈리는 0이나 ""( 빈 문자열 ) 인지에 따라서 프로그램 작동 방식이 달라진다. null과는 엄연히 다른 것 )


DML

DML은 Data Manipulation Language의 약자로 데이터를 조작하기 위해 나온 언어로

DB를 사용한다면 가장 자주 사용하는 언어이다.

데이터 조회 ( Select )

select [ 조회 할 컬럼 이름 ]
from [ 조회 할 테이블 이름 ] - DB이름.테이블이름 의 형식으로 작성해도 된다.
( 기본은 그냥 테이블 이름 + DB를 기본으로 정하기 위해서는 use DB이름;)
where [ 조건식 ] - 간단한 비교식, 포함하는 데이터 이름 같은게 들어감
( having )
order by [ 컬럼 이름을 기준으로 정렬 ]
( group by )

의 순서를 지켜야 하고,

select * from table_name;

-- 데이터 조회 예시
select * from 고객;

새로운 데이터 삽입

insert into table_name ( column_name1, column_name2, ... ) values (
	data1, 
    data2, 
    
    ...
);

-- 데이터 삽입 예시
insert into 고객 (고객ID, 이름, 전화번호, 이메일) values (
	'001', 
    '김민수', 
    '010-1234-5678', 
    'minsu.kim@email.com'
);

기존 데이터 수정

update table_name 
set column_name1 = data_1 
where condition;

-- 데이터 수정 예시
update 고객
set 전화번호 = '010-1111-2222'
where 고객ID = '001';

기존 데이터 삭제

delete from table_name 
where condition;

-- 데이터 삭제 예시
DELETE FROM 고객
WHERE 고객ID = '001';

MsSQL

1. 컬럼 관련 기능

컬럼 추가

ALTER TABLE 테이블명
ADD 컬럼명 데이터타입 [제약조건];

컬럼 수정

ALTER TABLE 테이블명
ALTER COLUMN 컬럼명 새_데이터타입 [제약조건];

컬럼 삭제

ALTER TABLE 테이블명
DROP COLUMN 컬럼명;

컬럼 이름 변경 (sp_rename 사용)

EXEC sp_rename '테이블명.기존컬럼명', '새컬럼명', 'COLUMN';

컬럼 정보 확인

SELECT 
    COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '테이블이름';

2. 제약조건 관련 기능

기본키(Primary Key) 추가

ALTER TABLE 테이블명
ADD CONSTRAINT PK_이름 PRIMARY KEY (컬럼명1, 컬럼명2);

외래키(Foreign Key) 추가

ALTER TABLE 자식테이블
ADD CONSTRAINT FK_이름 FOREIGN KEY (자식컬럼) 
REFERENCES 부모테이블(부모컬럼);

예시

ALTER TABLE childTable
ADD CONSTRAINT FK_child_parent FOREIGN KEY (aaa_id) 
REFERENCES parentTable(aaa_id);

고유키(Unique Key) 추가

ALTER TABLE 테이블명
ADD CONSTRAINT UQ_이름 UNIQUE (컬럼명);

체크 제약조건 추가

ALTER TABLE 테이블명
ADD CONSTRAINT CHK_제약조건_이름 CHECK (조건식);
기본값(Default) 제약조건 추가

Insert시 시간 넣기

ALTER table timeTable
add constraint Insert_Time_제약조건_이름 DEFAULT FORMAT(GETDATE(), 'yyyyMMddHHmmss') for 시간저장할컬럼이름;

DB 컬럼을 생성할 때는 제약조건 이름을 지어주지 않지만( 자동 생성 )
추가로 제약조건을 설정해 주려면 이름을 지어주고 'for 컬럼이름'을 하면 된다.

ALTER TABLE 테이블명

ADD CONSTRAINT DF_이름 DEFAULT 기본값 FOR 컬럼명;

제약조건 삭제

ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건이름;

3. 인덱스 관련 기능

인덱스 추가 (직접 ALTER TABLE로는 불가, CREATE INDEX 사용)

CREATE INDEX IX_이름 ON 테이블명(컬럼명);

인덱스 삭제

DROP INDEX 테이블명.인덱스이름;

Oracle

Commit 꼭 하기

Insert 한 후에는 꼭 Commit 하기..

WHERE

where 조건식

  • 기본적인 비교 연산자 ( <, >, <=, >= 등 )
  • ( NOT ) BETWEEN A AND B ( A와 B 사이 값 )
  • 날짜는 문자열로 입력해도 잘 알아들음 ( where date > '2025-01-01' )
  • YEAR( 가입일 ) - '연'만 뽑기
    • MONTH( 가입일 ) - '월'만 뽑기
    • DAYOFMONTH( 가입일 ) - '일'만 뽑기 ( DAYOFMONTH( 가입일 ) BETWEEN 1 AND 16 -- 이러면 1일부터 15일 까지)
    • DATEDIFF(날짜1, 날짜2) - 날짜 간의 차이 ( 날짜1 - 날짜2)
    • CURDATE() - 오늘 날짜
    • DATE_ADD( 가입일, INTERVAL 300 DAY) - 가입일부터 300일 후
    • DATE_SUB( 가입일, INTERVAL 300 DAY) - 가입일부터 300일 전
    • UNIX_TIMESTAMP( 가입일 ) - 1970년 1월 1일을 기준으로 몇 초가 지났는지
  • where 컬럼이름 like '_aaa%' ( 두 번째부터 aaa로 시작하는 데이터 대상 )
  • 조건을 여러개 설정하려면 조건1 and 조건2 and ... ( and가 되면 물론 or 도 가능함 )
    주의) and와 or이 만나면 and의 우선 순위가 더 높아서 먼저 실행 됨 () 괄호를 씌우면 먼저 실행됨
  • 고객ID IN (001, 002, 004) - 고객ID가 001, 002, 004인 것

ORDER BY, LIMIT

정렬

  • ORDER BY 컬럼이름; - 해당 컬럼을 기준으로 오름차순 정렬
  • ORDER BY 컬럼이름 DESC; - 해당 컬럼을 기준으로 내림차순 정렬
  • ORDER BY 컬럼이름1 DESC, 컬럼이름2 ASC;
  • LIMIT 10 - 가장 마지막에 작성하고 10까지 보여지게 한다.
  • LIMIT 3, 2 - 3번째 ROW에서 2개 까지만 보여지게 한다.
profile
타닥,,, 타다닥,,,,,,,

0개의 댓글