728x90
반응형

이번 포스팅에서는 Mysql에서 Sql문을 사용해서 데이터를 CRUD하는 방법에 대해 알아보려고 합니다.


일단 CRUD는 Create(생성), Read(읽기), Update(갱신), Delete(삭제)의 앞글자만 따서 CRUD라고 부릅니다.


먼저 읽기에 대해 알아보겠습니다.


여기서 사용할 샘플 데이터는 http://futurists.tistory.com/19를 참고했습니다.


sql에서 읽기는 SELECT명령어를 사용합니다.

문법은 SELECT 열명 FROM 테이블명; 입니다.

열명에 *를 넣게 되면 테이블에서 전체 열을 가져올 수 있고 ,를 사용하게 되면 복수의 열을 가져 올 수 있습니다.


하지만 이렇게 사용하면 테이블에 있는 모든 데이터를 가져오게 되는데 특정 조건에 해당하는 데이터만 가져오기 위해서 WHERE을 추가해 줘야합니다.

문법은 SELECT 열명 FROM 테이블명 WHERE 조건; 입니다.

여기서 조건에 들어가는 비교연산자는 다음과 같습니다.

= 같다

<> 같지않다

>= 크거나 같다

> 크다

<= 작거나 같다

< 작다


SELECT * FROM employees WHERE gender = 'M';

이렇게 명령어를 작성하면 employees 테이블에서 gender가 M인 데이터를 전부 가져오는 것입니다.

특정 조건에 해당하는 데이터만 가져올 수 있게 됩니다.



SELECT * FROM employees WHERE gender = 'M' AND hire_date > '1999-01-01';

이렇게 명령어를 작성하면 employees 테이블에서 gender가 M이며 hire_date가 1991-01-01이상인 데이터만 가져오게 됩니다.

조건에 AND나 OR를 사용하면 여러개의 조건을 붙일 수 있습니다.



데이터를 읽어오면서 정렬을 하기 위해선 ORDER BY 명령어를 추가해주면 됩니다.

SELECT * FROM employees WHERE gender = 'M' AND hire_date > '1999-01-01' ORDER BY hire_date DESC;

데이터를 가져오면서 hire_date를 내림차순으로 가져오게 됩니다.

그럼 가장 처음데이터가 최신이고 마지막데이터는 마지막이 되는 것입니다.



다음은 테이블을 요약하는 함수입니다.

count, sum, avg는 복수개의 값들의 개수, 합, 평균을 계산하는 함수이고

max, min은 복수개의 값중에 최대값과 최소값을 구하는 함수입니다.


SELECT avg(salary) FROM salaries;

salaries테이블의 salary의 평균을 구하는 명령어 입니다.



SELECT max(salary) FROM salaries;

salaries테이블의 salary의 최대값을 구하는 명령어 입니다.



데이터를 그룹화 해서 가져오기 위해서 GROUP BY 명령어를 사용합니다.

SELECT dept_no, count(*) FROM dept_manager GROUP BY dept_no;

dept_no와 count(*)를 dept_manager에서 가져오고 dept_no로 그룹화해서 보여주는 것입니다.


그리고 GROUP BY에서 조건을 걸고 싶다면 HAVING 명령어를 사용합니다.

SELECT dept_no, count(*) FROM dept_manager GROUP BY dept_no HAVING count(*) = 4;


그리고 SELECT 명령어를 사용 할 때 1. SELECT 2. FROM 3. WHERE 4. GROUP BY 5. HAVING 6. ORDER BY 순서대로 써야합니다.



이제 생성(CREATE)를 하는 INSERT 명령어에 대해 알아보겠습니다.

INSERT의 기본 구조는 INSERT INTO 테이블명 VALUES 데이터; 입니다.

우선 DESC dempartments;로 테이블의 형태를 보겠습니다.

dept_no는 char(4)타입이며 primary key입니다.

dept_name은 varchar(40)타입입니다.


SELECT * FROM departments ORDER BY dept_no;로 값들을 확인합니다.


그럼 이제 dept_no가 d010이고 dept_name이 Mobile App인 값을 넣어보겠습니다.

INSERT INTO departments VALUES ('d010', 'Mobile App');

데이터 생성에 성공했습니다.

SELECT * FROM departments ORDER BY dept_no;로 확인해보면

d010에 Mobile App이 추가된 것을 확인 할 수 있습니다.


한번에 복수개를 넣고 싶다면 INSERT INTO departments VALUES (), (), (), ... (); 로 작성하면 됩니다.


이제 데이터를 변경하는 UPDATE에 대해 알아보겠습니다.

UPDATE의 기본 구조는 UPDATE 테이블명 SET 열명 = 값; 입니다.

UPDATE에도 WHERE을 사용해 특정 조건에 해당하는 값만 갱신 할 수 있습니다.


그럼 우리는 d010의 dept_name을 Mobile App에서 Mobile Development로 변경하겠습니다.

UPDATE departments SET dept_name = 'Mobile Deveopment' WHERE dept_no = 'd010';

데이터 변경에 성공했습니다.


SELECT * FROM departments ORDER BY dept_no;로 확인해보겠습니다.


d010의 dept_name이 Mobile App에서 Mobile Development로 변경된 것을 확인 할 수 있습니다.


이제 데이터를 지워보겠습니다.

제거 명령어는 DELETE이고 기본구조는 DELETE FROM 테이블명; 입니다.

저렇게하면 테이블의 모든 데이터가 다 지워지게 됩니다.

그래서 WHERE를 추가해 원하는 조건의 데이터만 지우게 해야 합니다.

그럼 아까 추가한 d010의 데이터를 지워보겠습니다.


DELETE FROM departments WHERE dept_no = 'd010';

데이터 삭제에 성공했습니다.


SELECT * FROM departments ORDER BY dept_no;로 확인해보겠습니다.


데이터가 지워진 것을 확인 할 수 있습니다.



이 다음은 결합에 대해 알아보겠습니다.

결합은 두개이상의 테이블에서 값을 동시에 가져올 때 사용합니다.

그리고 결합에는 내부결합과 외부결합 2가지가 있습니다.


내부결합은 INNER JOIN 테이블명 ON 조건으로 가져옵니다.

예제는 dept_manager 테이블에 departments테이블의 dept_name을 붙여서 가져오는 것을 해보겠습니다.


SELECT dept_manager.*, departments.dept_name FROM dept_manager INNER JOIN departments ON dept_manager.dept_no = departments.dept_no;


INNER JOIN은 FROM에 있는 테이블에 있고 ON뒤에 조건에 만족하는 값들만 가져오게 됩니다.


OUTTER JOIN을 쓰게 되면 FROM에 있는 테이블은 모두 가져오고 OUTER JOIN에 있는 테이블의 값만 추출해서 넣게 됩니다.

기본 형태는 SELECT 열명 FROM 왼쪽테이블 LEFT OUTTER JOIN 오른쪽테이블 ON 조건; 입니다.

이렇게 하면 왼쪽 테이블에 있고 오른쪽 테이블에 없는 것들은 NULL로 들어가게 됩니다.


728x90
반응형

'Development > Database' 카테고리의 다른 글

(DB) 테이블 설계의 기초와 정규형  (3) 2017.09.27
(DB) Mac OS에서 MySQL 설치하기  (0) 2017.09.22
(DB) 관계형 데이터베이스란?  (0) 2017.09.21
(DB) 데이터베이스란?  (0) 2017.09.21

+ Recent posts