[MariaDB] chapter5

Ryong·2023년 11월 8일
0

MariaDB

목록 보기
6/8
post-thumbnail

union / union all / not in / in

union : 두 쿼리의 결과를 행으로 합치는 것(중복제거)

SELECT * FROM emp
UNION -- 중복행 제거
SELECT * FROM c_emp;

union all : 두 쿼리의 결과를 행으로 합치는것(중복포함)

SELECT * FROM emp
UNION ALL -- 중복행 포함
SELECT * FROM c_emp;

not in : 첫번째 쿼리의 결과 중에서, 두 번째 쿼리에 해당하는 것을 제외하기 위한 구문

select * from emp
where name not in(select name from emp where tel is null);

in : not in과 반대로 첫 번재 쿼리의 결과 중에서 두 번재 쿼리에 해당되는 것만 조회

select * from emp
where name in(select name from emp where tel is null);

view

view는 일반 사용자 입장에서는 테이블과 동일하게 사용하는 개체

/*
create view 뷰이름
as 뷰의 내용

Alter view 뷰이름  as 뷰의 내용
drop view 뷰이름  
*/

Create view v_emp
As select * from emp;  --뷰생성

alter VIEW v_emp
AS SELECT empno, ename, deptno FROM emp;

CREATE or replace VIEW v_emp
AS SELECT empno, ename, deptno FROM emp;  -- 뷰 생성하거나 수정해라
-- emp 테이블 제거하면 v_emp 는 제거되고, 
-- v_emp 테이블이 제거되어도 원본인 emp는 제거 x
-- View 테이블의 제약조건은 복사되지 않는다.

-- 복합 뷰 뿐만아니라 단순 뷰 일경우 물리적인 테이블이 아닌 
가상의 테이블이기 때문에 실제 테이블에 영향을 받는다.
-- 예) 복합뷰는 1개 이상의 테이블이기 때문에 추가시 
각각의 테이블에 들어가야하기에 하나의 형태로 안되고
-- 단순뷰일지라도 안들어가는 경우 뷰테이블 생성시 
필수사항 (not null 필드라든가)을 빼고 뷰 테이블을 만들었을 경우
제약조건에 걸려서 입력 되지 않는다. 
(뷰는 결국 실제 테이블에 추가되기 때문임)
-- 양쪽 테이블의 데이터를 전체를 추가하거나 하면 된다.(업데이트 개념...)
insert INTO v_market (prod_name, mem_id, mem_name, addr)
VALUES('지갑', 'BLK', '김연아', '울산');
-- 위와 같은 상황에서 조인이던 복합뷰로 만든 테이블에 
레코드 추가하고자한다면 새로운 형태의 테이블 생성해서 추가한다.

SELECT * FROM v_market;
INSERT INTO v_market (mem_name, mem_id, addr) 
VALUES('김연아', 'BLK', '울산');
INSERT INTO v_market (prod_name) VALUES('지갑');

장점
1. 보안에 도움이 된다.
2. 복잡한 쿼리를 단순화시켜줄 수 있다.

테이블복사

CREATE TABLE c_emp
AS
SELECT * FROM emp;
테이블 복사도 view 처럼 제약조건도 복사하지 않는다.
테이블을 복사한 후 원하는 제약조건을 추가할 수 있다.

레코드복사 : 이미 있는 테이블에 레코드를 복사하는 것

Insert into 테이블명
As
Select 필드명...  from 테이블명;

CREATE TABLE copy_emp2
AS
SELECT empno, ename, mgr FROM emp WHERE 1=0;  -- 구조만 복사
CREATE TABLE memberTBL LIKE member; -- 테이블 구조랑 제약, 인덱스 복사 할때

뷰 만드는거랑 테이블 복사는 다른 개념
뷰는 가상이고 테이블복사는 아에 새롭게 데이터를 복사한것이라 보면 댐

뷰는 가상테이블이기 때문에 실제 테이블 영향을 받는데
실제 테이블 조건에 not null이 있으면 무조건 값을 채워서 insert를 해야 한다.

복합뷰( 조인) 으로 뷰를 만들었을 떄에도, 
각 다른 테이블에서의 값이 있기에 바로 insert가 되지 않아
각 테이블 컬럼에 맞게 분리하여 insert 해야한다. 

-- 다른테이블의 레코드를 추가할 시에는 필드개수, type(숫자, 문자, date 등)

백업 및 복원

백업 : mysqldump -u [사용자명] -p [데이터베이스명] > [백업파일명].sql

[사용자명]: 데이터베이스에 액세스할 수 있는 사용자 이름.
[데이터베이스명]: 백업하려는 데이터베이스 이름.
[백업파일명]: 백업 파일의 이름.
명령을 실행하면 데이터베이스가 SQL 형식의 백업 파일로 내보내집니다.

복원 : mysql -u [사용자명] -p [데이터베이스명] < [백업파일명].sql

[사용자명]: 데이터베이스에 액세스할 수 있는 사용자 이름.
[데이터베이스명]: 복원하려는 데이터베이스 이름.
[백업파일명]: 백업 파일의 이름.
이 명령은 백업 파일로부터 데이터베이스를 복원합니다.
profile
새로운 시작. 그리고 도약

0개의 댓글