티스토리 뷰

728x90
반응형

 포스팅은 데이터베이스와 테이블 그리고 DML 구문에 대해 알아보겠습니다.


데이터베이스는 테이블 그리고 테이블과 관련된 SQL 구성 요소들을 담고 있는 저장소입니다.

* 열은 테이블에 저장된 하나의 데이터
* 행은 한 객체에 대한 속성들을 나타내는 열의 집합
* 행과 열이 모여 테이블을 구성

먼저 데이터베이스 생성 방법입니다.
1. CREATE DATABASE gregs_list; (데이터베이스 생성)
2. SQL은 대소문자를 구별하지 않음.
3. 한단어 이상 사용 시 nara_son, narason 등이 가독성이 좋음 (대문자 습관은 좋지 않음)
4. 위처험 하나의 패턴을 선택했다면, 일괄적으로 반영하는 습관을 기르는 것이 좋다.

다음으로 테이블 생성 방법입니다.
CREATE TABLE doughnut_lis(
 doughtnut_name  VARCHAR(10),
 doughtnut_type VARCHAR(6)
); 

(테이블 생성)
VARiable(변하는) CHARacter(문자)를 나타내고 텍스르(문자열)를 저장하는데 이용됩니다. (1의 경우 6byte 즉 한글로 3자리까지 저장할 수 있음)
CREATE TABLE gregs_list(
 last_name VARCHAR(30),
    first_name VARCHAR(20),
    email  VARCHAR(50),
    birthday DATE,
    profession VARCHAR(50),
    location VARCHAR(50),
    status  VARCHAR(20),
    interests VARCHAR(100),
    seeking  VARCHAR(100)
);

테이블 생성 시 데이터 타입은 다음과 같은 특징이 있습니다.
CHAR : 데이터가 정해진 길이
DEC : 십진 자릿수 (1234.56 => DEC(6,2))
DATETIME, TIMESTAMP, DATE, TIME : 날짜시간 
VARCHAR : 길이 255개까지의 문자 데이터를 저장하며 동적으로 유연하게 길이를 조절 ()
INT : 정수, 음수 (수식 연산이 필요한 경우 - 없을 경우 CHAR OR VARCHAR를 사용)
BLOB : 큰 덩어리의 문자 데이터, 텍스트 본문 같은 장문

테이블에 데이터 INSERT 방법은 다음과 같습니다.
INSERT INTO my_contacts
(
 last_name VARCHAR(30),
    first_name VARCHAR(20),
    email  VARCHAR(50),
    birthday DATE,
    profession VARCHAR(50),
    location VARCHAR(50),
    status  VARCHAR(20),
    interests VARCHAR(100),
    seeking  VARCHAR(100)
) VALUES ('nara','son','nara0617@gmail.<wbr />com','1983-10-21','IT프로그래머','<wbr />경기도용인시','Married','농구','YES');
INT, DEC는 '12', '12.234' 처럼 감싸지 않는다.
열이름을 생략하면 테이블 순서대로 들어간다.

테이블에 데이터 SELECT 방법은 다음과 같습니다.
SELECT * FROM my_contracts;
값을 넣지 않은 열의 값은 NULL로 들어간다. 

테이블의 열값에 NULL 허용여부를 설정하는 방법은 다음과 같습니다.
CREATE TABLE my_contracts
(
 last_name VARCHAR(30) NOT NULL,
    first_name VARCHAR(20) NOT NULL,
    email  VARCHAR(50),
    birthday DATE,
    profession VARCHAR(50),
    location VARCHAR(50),
    status  VARCHAR(20),
    interests VARCHAR(100),
    seeking  VARCHAR(100)
);
DESC my_contracts;에 null여부가 no로 출력된다.

테이블에 열값중 빈칸을 DEFAULT로 채우는 방법은 다음과 같습니다.
CREATE TABLE my_contracts
(
 last_name VARCHAR(30) NOT NULL,
    first_name VARCHAR(20) NOT NULL,
    email  VARCHAR(50),
    birthday DATE,
    profession VARCHAR(50),
    location VARCHAR(50),
    status  VARCHAR(20) NOT NULL DEFAULT M,
    interests VARCHAR(100),
    seeking  VARCHAR(100)
);

다음으로 SELECT 문에 대해 알아보겠습니다.
조건절 WHERE

SELECT * FROM my_contracts WHERE first_name=son;


SAMPLE TEST

CREATE DATABASE drinks;

USE drinks;

CREATE TABLE easy_drinks;

(

 drink_name VARCHAR(20) NOT NULL;

 main  VARCHAR(20) NOT NULL;

 amount1  DEC(2,4) NOT NULL;

 second  VARCHAR(20) NOT NULL;

 amount2  DEC(2,4) NOT NULL;

 directtions  VARCHAR(250);

);

INSERT INTO easy_drinks

(

 drink_name VARCHAR(20);

 main  VARCHAR(20);

 amount1  DEC(2,4);

 second  VARCHAR(20);

 amount2  DEC(2,4);

 directtions  BLOB;

)

VALUES

( 'Blackthorn','tonic water',1.5,'pineapple juice',1,'stir............................'),('Blue Moon',................................);


WHERE 조건절의 주의 점 : INT, DEC를 제외한 모든 조건은 ' '로 감싼다. " "로 감싸면 No Result, INT, DEC를 ' '로 감싸도 결과는 나온다.

SELECT WHERE 절도 동일하게 동작한다. 원하는 열만 선택하여 조회 하면 더 빠른 결과를 보여준다.

SELECT locaton FROM doughnut_ratings WHERE type = 'plain glazed' AND rating = 10;

특정 문자열을 찹기 위해 SELECT * FROM my_contracts WHERE drink_name >= 'L' AND drink_name < 'M'; (L로 시작하는 주스 찾기)

SELECT drink_name FROM easy_drinks WHERE main = 'cherry_juicy' OR second = 'cherry_juicy';

SELECT drink_name FROM easy_drinks WHERE main = 'cherry_juicy' OR rating <> 6; (6이 아닌 모든)

NULL 값을 찾는 방법 SELECT drink_name FROM easy_drinks WHERE rating IS NULL;


다음으로 WHERE / LIKE 활용으로 STU, SSA, SNA 조회 방법입니다.

select * from easy_drinks where directtions like 's%';

select * from easy_drinks where directtions like 's__';


BETWEEN 사용방법입니다.

SELECT * FROM easy_drinks WHERE drink_name BETWEEN 'A' AND 'N';

SELECT * FROM easy_drinks WHERE drink_name BETWEEN 1 AND 10;


SELECT 구문 마지막으로 IN입니다.

SELECT date_name FROM black_book WHERE rating IN('GOOD','SOSO');

SELECT date_name FROM black_book WHERE rating NOT IN('GOOD','SOSO');

SELECT * FROM easy_drinks WHERE directtions IS NULL;

SELECT * FROM easy_drinks WHERE directtions IS NOT NULL;


다음으로 INSERT문에 대해 알아보겠습니다.

INSERT INTO easy_drinks VALUES ('Black's_juice',.............<wbr />); 따옴표를 문자처리하려면 역슬러시를 사용한다.

INSERT INTO easy_drinks VALUES ('Black\'s_juice',............<wbr />.); ESCAPE 방법 보다 가독성이 좋다.

INSERT INTO easy_drinks VALUES ('Black' 's_juice',.............); 는 escape를 의미한다.


다음으로 DELETE문에 대해 알아보겠습니다.

DELETE FROM clown_info WHERE activities = 'dacing';

DELETE 문을 구현하기 전에는 항상 SELECT로 확인하는 습관을 갖는 것이 중요합니다.


마지막으로 UPDATE문에 대해 알아보겠습니다.

UPDATE table_name SET type='as', name='sa' WHERE name='nara' AND age='34';

UPDATE문은 연산을 할 수 있습니다. (UPDATE table_name SET cost= cose +1 WHERE drink_name='asdf');

UPPER, LOWER등으로 문자열 치환도 가능합니다.


팁으로 두가지만 더 알려 드리자면

안전모드 푸는 방법 (UPDATE, DELETE 안되는 현상 해결)

SET SQL_SAFE_UPDATES=0;


테이블 구조 확인 방법

SHOW CREATE TABLE fish_info ;

SHOW COLUMNS FROM fish_info;

SHOW CREATE DATABASE nara_test;

SHOW INDEX FROM fish_info;

SHOW warnings;


SQL 1일차에서는 데이터베이스와 테이블 그리고 DML 문 사용 시 주의점에 대해 알아보았습니다.

다음시간에는 정규화 과정에 대해 알아보도록 하겠습니다.

고맙습니다.

728x90
반응형