본문 바로가기

DATABASE

데이터베이스 / SQL 문법

* DBMS (DataBase Management System)

- 데이터베이스 관리 시스템

- 데이터베이스를 관리하기 위한 소프트웨어 패키지

- Oracle, mySQL, MS SQL...와 같은 것을 DBMS라고 함

 

* 데이터베이스

- 데이터의 관리를 위해 데이터를 모아둔 것

- 정보에 쉽게 접근 가능하게 해줌 (CRUD 가능)

 

* 테이블

- 데이터베이스에서 정보를 저장하고 관리하기 위한 곳

- ROW(행, 레코드) : 한 줄, 한 쌍의 정보들 ex) hong, 1234, 홍길동, 서울...

- COLUMN(열, 컬럼) : 정보를 구성하는 개별적인 항목의 이름 ex) 아이디, 패스워드, 이름, 주소... 


* SQL (Structured Query Language)

- 질의 언어를 활용하여 데이터베이스에 저장된 데이터를 조회, 입력, 수정, 삭제하는 작업

 

1. 테이블 생성 CREATE TABLE

create table 테이블명

(컬럼명 컬럼타입,

 컬럼명 컬럽타입, ... )

 

create table member (
	name varchar2(10),
	userid varchar2(10),
	pwd varchar2(10),
	email varchar2(20),
	phone char(13),
	admin number(1) default 0,
	primary key(userid));

 

* 컬럼 타입의 종류

- number : 수치 데이터

- char(n) : 고정된 글자 (주민번호, 우편번호)

- varchar2(n) : 가변형 글자 (주소, 이메일)

- date : 날짜 데이터

 

* Primary Key

- 데이터 무결성 제약 조건 중 하나

  -> 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 테이블을 생성할 때 각 컬럼에 지정하는 것

- 주로 id 컬럼에 지정하여 다른 정보들과 유일하게 구분이 가능하게 해줌

- 컬럼에 null 값이나 중복된 데이터를 저장하지 못하게 하여 다른 회원과 구분 가능

 

 

2. 테이블에 레코드 추가 INSERT

insert into 테이블명 [(컬럼명1, 컬럼명2, ...)] values

(DATA1, DATA2, .....)

 

insert into member values
('이소미', 'somi', '1234', 'gmd@naver.com', '010-2362-5157', 0);

// 바인딩 변수를 이용할 때 (시퀀스, Date 어떻게 넣는지 확인)
insert into member values 
(MEMBER_SEQ.nextval, ?, ?, ?, sysdate)

 

- value 값은 컬럼 순서와 동일하게 입력

- 데이터 타입이 문자(char, varchar)와 날짜(date)일 경우 ' ' (작은따옴표) 안에 기술

- 오라클에서는 데이터를 추가하면 메모리 상에만 추가됨

  따라서, 데이터를 영구적으로 저장하지 않으려면 rollback; 명령어 실행

  영구적으로 저장하려면 commit; 명령어 실행

 

 

3. 데이터를 조회하는 SELECT

select 조회하고자 하는 컬럼명

from 조회하고자 하는 테이블명

where 조건

order by 컬럼명 [asc | desc];

 

select * from member; // member 테이블의 모든 정보

select * from member where userid = 'somi'; // userid = somi인 멤버의 모든 정보

select name from member where userid = 'somi'; // userid = somi인 멤버의 name 정보

 

 

4. 데이터를 변경하는 UPDATE

update 테이블명 set 컬럼명1 = 컬럼값1, 컬럼명2 = 컬럼값2, ...

where 조건

 

// member 테이블에서 userid = somi인 멤버 phone 정보를 변경
update member set phone = '010-5555-7777'
where userid = 'somi';

// 바인딩 변수 활용법
update MEMBER set PW = ?, NAME = ? where ID = ?

update 구문에서 where절을 생략하면 모든 데이터가 변경되므로, 꼭! where절 넣어주기

 

 

5. 레코드를 삭제하는 DELETE

delete 테이블명

where 조건

 

// member 테이블에서 
// userid가 'somi'인 멤버 삭제
delete from member where userid = 'somi';

// member 테이블에서 
// email이 'dblee'이고 password가 '1234'인 멤버 삭제
delete from member where email = 'dblee' and password = '1234';

delete 구문에서 where절을 생략하면 모든 데이터가 삭제되므로, 꼭! where절 넣어주기

조건이 여러 개 붙을 때는 and 사용!!

 


자주 헷갈리는 SQL 문법 정리

// WHERE: AND, OR, NOT 모두 사용 가능
WHERE A AND B AND C;
WHERE A OR B;
WHERE NOT A;

// ORDER BY: DESC(내림차순-거꾸로 출력), ASC(오름차순-순서대로 출력)
ORDER BY SEQ DESC|ASC;

 

 

// 테이블 생성
CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);

// NOT NULL 조건 추가
CREATE TABLE Persons (
    ID int NOT NULL, // 데이터 타입 바로 뒤에
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int
);

// UNIQUE 조건 추가1 (한 개일 때)
CREATE TABLE Persons (
    ID int NOT NULL UNIQUE, // 이렇게) 컬럼명 + 데이터타입 + NOT NULL + UNIQUE
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

// UNIQUE 조건 추가2 (여러 개일 때)
CREATE TABLE Persons (
    ID int NOT NULL, // UNIQUE
    LastName varchar(255) NOT NULL, // UNIQUE
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID,LastName) 
    // CONSTRAINT 제약조건이름 UNIQUE (원하는 컬럼명들)
);

// PRIMARY KEY 설정
CREATE TABLE Persons (
    ID int NOT NULL PRIMARY KEY, // 이렇게
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

// FOREIGN KEY 확인 필요