플레이데이터 - 13일차 SQL 공부

Kim Hyen Su·2023년 7월 17일

🎇JOIN

  • 두 개 이상의 테이블을 서로 묶어 하나의 결과 집합으로 조회하고자 할 때 사용.
  • INNER JOIN(default), OUTER JOIN, CROSS JOIN, SELF JOIN

데이터베이스의 테이블

  • 중복과 공간 낭비를 피하고 데이터의 무결성을 위해서 여러 개의 테이블로 분리하여 저장.
  • 분리된 테이블들은 서로 관계를 가진다.
  • 1 대 다 관계가 보편적이다.

🎇INNER JOIN

  • 조인 중 가장 많이 사용되는 조인
  • 기본형태
SELECT * FROM 테이블명1
	INNER JOIN 테이블명2
    	ON 외래키 참조(테이블명1.컬럼 = 테이블명2.컬럼)
WHERE 조건
  • ※ 주의사항
    - INNER JOIN 사용 시, 어떤 테이블의 컬럼 값으로 정렬할 지 모르기 때문에 이를 명시해줘야 한다.(테이블명. 컬럼명)

  • 3개 테이블 조인
    - 일반적으로 연관성 없는 두 개의 테이블을 동시에 조회하는 경우 외래 참조용 테이블 하나를 정의하여 관련이 없는 두 테이블을 동시에 조회할 수 있도록 정의한다.

    • 외래키 참조 시 참조 대상의 기본 키를 외래키로서 참조해야 한다.
    • 3개 테이블 조회 시 참조 대상 중 하나를 기준으로 조회해줘야 한다.

🎇OUTER JOIN

  • 조인의 조건에 만족되지 않는 레코드 까지도 포함시켜 조회하는 것.
  • LEFT,RIGHT, FULL
  • LEFT OUTER JOIN
    - 왼쪽 테이블의 모든 레코드를 포함시키는 것.
    • 줄여서 LEFT JOIN 이라고 사용 가능.
  • RIGHT OUTER JOIN
    - 오른쪽 테이블의 모든 레코드를 포함시키는 것.
EX)
SELECT S.stdName, S.addr, SC.clubName -- , SC.roomNo → 요거는 에러 발생.(이 컬럼은 clubtbl에만 있기 때문에 clubtbl과 조인을 해줘야 조회 가능)
	FROM stdtbl S
		-- stdtbl & stdclubtbl의 left 조인. → 결과1
		LEFT OUTER JOIN stdclubtbl SC -- stdtbl 의미
			ON S.stdName = SC.stdName;


SELECT S.stdName, S.addr, C.clubName, C.roomNo
	FROM stdtbl S
		-- stdtbl & stdclubtbl의 left 조인. → 결과1
		LEFT OUTER JOIN stdclubtbl SC -- stdtbl 의미
			ON S.stdName = SC.stdName
		-- 결과1 & clubtbl의 left 조인 → 결과2
		LEFT JOIN clubtbl C -- stdtbl 조건에 맞지 않는 데이터 까지 조회
			ON C.clubName = SC.clubName
ORDER BY S.stdName;

🎇CROSS JOIN

  • 한쪽 테이블의 모든 행들과 다른쪽 테이블의 모든 행들을 조회한다.
  • 테스트로 사용할 많은 용량의 데이터 생성 시 주로 사용함.
  • ON 구문 사용 불가.
  • 현재 버전에서는 SELECT * FROM 테이블명1, 테이블명2로 조회가 가능하다.

🎇UNION

  • 두 쿼리문을 연결하여 합집합과 같이 모든 데이터를 조회 시 사용.
  • UNION ALL 두 테이블의 데이터(null 제외)를 한번에 조회하기 위해 사용.

🎇SELF JOIN

  • 자기 자신과 자기 자신을 조인한다는 의미.
EX)
-- SELF JOIN
SELECT A.emp AS '부하직원', B.emp AS '직속상관', B.empTel AS'직속상관연락처'
	FROM empTbl A
		INNER JOIN empTbl B
			ON A.manager = B.emp
WHERE A.emp = '우대리';

🎇PROCEDURE

  • 자주 사용하는 쿼리를 메서드와 같이 정의하여 사용하는 것.
  • 생성문
DELIMITER // : 종료 문자를 ;(세미클론) → //으로 변경
CREATE PROCEDURE 프로시저명()
BEGIN
	호출 구문
END //
DELIMITER ;
  • 삭제문
DROP PROCEDURE 프로시저명;

🎇TRIGGER

  • 어떠한 쿼리 실행 시 자동으로 함께 또 다른 쿼리가 실행되돋록 하는 기능.
  • 일반적으로 데이터 수정 또는 삭제 시 해당 내역을 백업하기 위해 사용.
  • 생성문
DELIMITER //
CREATE TRIGGER trg_deletedMemberTbl -- 트리거명
	AFTER DELETE -- 삭제 후 작동하도록 지정(AFTER 행위)
	ON memberTbl -- 트리거를 부착할 테이블
	FOR EACH ROW -- 각 행마다 적용
BEGIN
	INSERT INTO deletedMEmberTbl
		VALUES(OLD.memberId,OLD.memberName, OLD.memberAddress, CURDATE());
END //
DELIMITer ;
  • 삭제문
DROP TRIGGER 트리거명;

🎇MYSQL 데이터 백업 및 복원

  • Administration
    - Data Export(백업)
    • Data Import/Restore(복원)
  • set autocommit = 0; // 0 : 수동 반영, 1 : 자동 반영
    - commit
    - rollback
    • savePoint // 저장 포인트

😊참고

  • 문자열 합치는 함수 : CONCAT(문자열1, 문자열2)
profile
백엔드 서버 엔지니어

0개의 댓글