SQL17 [MySQL] 12. ERD ( 개체 관계 다이어그램 ) 학교를 다니며 과제로 지겹게 했던 ERD... 나는 이걸 컴공생들만 주구장창 하고 나오는줄 알았는데 알바를 하며 알게된 언니가 국비생들도 이걸 무조건 그리게 시킨다고 말했다. 그래서 서로 신기해했다.ㅋㅋ(사실 DB를 배우면 누구나 하는거일텐데도 그냥 알바가 빡세서 무슨 이야기든 재밌었던것 같기도 하고...) 언니는 개발자로 벌써 일을 하고 있는데 난 아직도 디자인의 길을 벗어나지 못했다니.. 내년엔 얼렁 들어가기로ㅠ 개체-관계 다이어그램(Entity-Relationship Diagram) ERD는 데이터 모델을 그림으로 표현한 것이다. 실제 DB를 프로그램에 만들기 전인 설계 단계에서 거치는 과정으로 각 테이블과 테이블의 관계를 그림으로 나타내 그린다. 처음 만든 보일러 플레이트가 너무 형편없었기 때문에.. SQL 2022. 12. 28. [MySQL] 11. Trigger Trigger Trigger(트리거)는 테이블 내 데이터가 변동되는 작업인 INSERT, UPDATE, DELETE가 실행될 때 자동으로 함께 실행되는 코드를 의미한다. 실습을 위해 trigger_mart라는 새로운 DB를 셍성하고, school과 student라는 테이블을 추가해 주었다. school은 반이름과 공석이 저장되며 기본값으로 20이라는 공석의 값을 주었다. 학생은 auto_increment를 활용해 학생이 한 명 추가될 때마다 학생 번호가 1씩 늘어난다. CREATE TABLE trigger_mart.school( 반이름 varchar(100) 공석 int DEFAULT 20 ); CREATE TABLE trigger_mart.student( 학생이름 varchar(100), 학생번호 in.. SQL 2022. 12. 27. [MySQL] 10. Transaction Transaction Transaction(트랜잭션) 이란, 데이터베이스의 상태를 바꾸기 위해 수행하는 작업의 단위를 뜻한다. 따라서 쿼리 명령어들은 각각 하나의 트랜잭션이라고 할 수 있다. 트랜잭션 문법은 DB의 내용을 직접적으로 수정하는 여러 쿼리문을 실행할 때, 최소 하나라도 에러가 발생하는 경우 전체 쿼리문을 취소할 수 있도록 도와준다. 문법과 수행 로직은 아래와 같다. START TRANSACTION; -- 트랜잭션(한개의 작업)을 시작한다. 쿼리 내용 COMMIT; -- 문제가 없을 경우에만 모든 코드를 실행한다. ROLLBACK; -- 만일 에러가 발생하면 트랜잭션을 실행하기 전 상태로 되돌린다. 1. START TRANSACTION을 만나면 트랜잭션(한개의 작업)을 시작한다. 2. 쿼리 내.. SQL 2022. 12. 27. [MySQL] 9. INDEX INDEX 인덱스는 검색의 효율성을 증대시키기 위해 사용한다. PK(Primary Key)는 자동으로 index가 생성되어 있기 때문에 PK 컬럼은 인덱스를 따로 만들어 줄 필요가 없다. 따라서 인덱스는 기본키가 아닌 일반 컬럼들의 탐색 속도를 위해 존재한다. 그러나 index는 생성 시마다 하드의 용량을 차지하게 되기 때문에, 너무 많이 만들 경우에는 오히려 성능이 떨어질 수 있다. 예시로 사용한 csv 파일은 이곳에서 다운받는다. : https://www.data.go.kr/data/15053384/fileData.do 대전광역시_유성구_구즉도서관도서목록_20221027 대전광역시 유성구 구즉도서관에서 보유하고 있는 도서목록 정보(소장처, 자료실, 등록번호, 설명, 저자, 출판사, 출판년, 청구기호 .. SQL 2022. 12. 27. [MySQL] 8. 날짜 데이터 (datetime Data type과 now(), data_format(날짜,포맷형식)) MySQL에서의 날짜 데이터 사용 데이터 타입이 날짜(datetime)인 날짜 데이터를 사용해본다. user 테이블의 joinDate를 datetime으로 바꾸어주고, 데이터를 형식에 맞게 INSERT INTO 해 주었다. 지정한 날짜 '이후'의 데이터를 출력하려면 문자열과 같이 부등호 기호를 사용해주면 된다. joinDate > '날짜' 를 해주면, 해당 날짜 이후의 데이터를 조회한다. 날짜1과 날짜2 사이의 값은 AND 또는 BETWEEN 날짜1 AND 날짜2 또는, WHERE 조건>날짜1 AND 조건< 날짜2 를 사용한다. 3월 23일에 가입한 사람의 데이터만 출력하는 쿼리를 작성해 보았다. now() now()를 사용하면 오늘 날짜와 시간을 알 수 있다. 이때 now()에 파라미터로 숫자값을 줄 .. SQL 2022. 12. 26. [MySQL] 7. FUNCTION FUNCTION SQL에는 프로시저와 비슷한 기능으로 FUNCTION이라는 것이 존재한다. 직역하면 '함수'라는 뜻인데, js에서의 function과 같은 역할을 한다. 프로시저가 자주 사용되는 쿼리문을 작성하는 함수라면, Function은 자주 사용되는 계산식을 작성해 재사용하는 함수이다. Function은 프로시저와 다르게 CALL 없이 함수이름(파라미터);로 호출하여 바로 사용할 수 있다. RETURN문을 사용해 반환할 값을 지정해 줄 수 있으며, 이때 RETURN 할 값의 타입을 RETURNS 옆에 기재해 주어야 한다. Function을 작성할 때 필요한 데이터 특성 옵션으로는 DETERMINISTIC, NO SQL, READS SQL DATA, MODIFIES SQL DATA 이 있는데 공식 문.. SQL 2022. 12. 26. [MySQL] 6. 프로시저(stored procedure)와 추억 프로시저에는 개인적으로 특별한 추억이 있다. 대학교 3학년, 전과를 결심하고 처음으로 신청한 수업 중 하나가 DB수업이었다. 오라클 SQL Developer를 사용한 수업이었는데 나만 3학년이고 나머지는 모두 1,2학년이었다. 게다가 과도 조경과라고 되어있으니(전과 신청 학기라 전과는 다음학기에 실반영되었다) 교수님이 출석 부를때마다 나를 아주 신기하게 쳐다봤던 기억이 있다.ㅎㅎ 당시의 나는 설치부터 막히는 사람이었기 때문에.. 질문을 마구마구 쏟아부었는데 가끔 너의 열정에 지친다고 하셨었다(ㅋㅋㅋ). 그때가 안식년 직전이셨어서 지금은 은퇴하셔서 학교에 찾아가도 이제는 뵐 수 없게 되었다. 올해 7월에 서울에 있는 개발사 면접 제안을 주셨을때 갈 수 있었다면 참 좋았을걸, 망할 코로나로 2달내내 입원해있.. SQL 2022. 12. 26. [MySQL] 5. UNION과 VIEW UNION sql 작업을 하다 보면 여러개의 SELECT문을 사용하게 된다. 보통의 sql 툴은 작업 결과를 여러개의 탭에 나누어 출력해준다. 예를 들어 아래의 세 개의 SELECT문을 실행하면 다음과 같이 결과가 세 개의 탭으로 나누어 각각 출력된다. 이 결과들을 여러개의 탭이 아닌, 하나의 탭에서 한번에 보려면 어떻게 해야할까? 이럴 때 바로 UNION을 사용해 줄 수 있다. UNION을 사용할 때에는 반드시 컬럼의 개수가 같아야 한다. 또한 보편적으로 동일한 데이터타입, 동일한 컬럼 이름을 가진 데이터를 출력할 때 주로 사용한다. 조회 쿼리 1 UNION 조회 쿼리 2 결과를 살펴보면 이상한 점을 발견할 수 있다. 마지막 조회 쿼리인 SELECT id, name, age FROM pet.aboutp.. SQL 2022. 12. 24. [MySQL] 4. JOIN(INNER, LEFT, RIGHT)과 DML(SELECT, INSERT, UPDATE, DELETE) JOIN JOIN은 테이블을 합쳐줄 때 사용하는 문법이다. 학창시절 DB수업을 들었을 때 가장 많이 본 이미지가 바로 이것이었다. 테이블을 공통점을 중심으로 합쳐주는 조인(JOIN) 문법에는 INNER JOIN, LEFT JOIN, RIGHT JOIN이 있다. 실습을 하기 위해 데이터를 아래와 같이 수정하고, 외래키 연결을 해제해준다. 먼저 두 개의 테이블을 한번에 출력하는 법은 아래와 같다. SELECT * FROM 테이블1, 테이블2 이 문법을 사용하면 가능한 모든 조합을 출력해준다. INNER JOIN 테이블 ON 조건 은 조건으로 주어진 테이블의 공통점을 필터링해 출력한다.. SELECT 컬럼명 FROM 테이블이름 INNER JOIN 테이블이름 ON 조건 모든 행의 조합을 출력해 보려면 CROSS.. SQL 2022. 12. 24. [MySQL] 3. 테이블 정규화와 외래키 JS 풀스택 웹개발로 진로를 정하면서 주로 사용했던 몽고DB, 즉 NoSQL은 조인과 정규화라는 작업이 존재하지 않았다. 정확히는 존재했지만 RDBMS처럼 까다롭지 않았다... 한개의 테이블이라고 할 수 있는 한 개의 Collection에 관련된 항목을 JOSN key값으로 설정해주고, 만일 다른 테이블에 있는 내용을 함께 저장하는 JOIN이 필요할 경우 ref:테이블이름 을 적기만 하면 끝나는 단순한 형태였다. 너무나 쉽다는것은 때때로 단점이 되기도 한다. 너무 쉬워서... 그것만 사용하다 보니 관계형 데이터베이스를 일정부분 까먹게 되는 것이다... 따라서 다시는 잊지 않기 위해 중요한 개념인 정규화와 외래키에 대해 실습하고, 조인시킨 데이터를 DML로 다루어본다. 예시를 직접 만드는게 정말 쉬운일이 .. SQL 2022. 12. 24. [MySQL] 2. 테이블 생성 및 수정 - DDL (CREATE, ALTER, DROP, TRUNCATE) DDL DDL이란 Data Definition Language의 약어로, '데이터 정의어' 라는 뜻이다. 정확히는 테이블을 다루는 언어이다. 정처기 시절에 '크알드트'라고 외웠던 항목이다. CREATE : 테이블 생성 ALTER : 테이블 수정 DROP : 테이블 영구삭제 TRUNCATE : 테이블 내 데이터만 삭제 DML 앞서 실행했던 SELECT는 DML에 속한다. DML은 Data Manipulation Language 의 약어로, '데이터 조작 언어'를 뜻한다. 데이터베이스 내의 데이터를 조작(데이터 추출, 생성, 수정, 삭제) 하는 언어라는 의미다. SELECT : 데이터 조회 INSERT : 레코드 생성 UPDATE : 레코드 수정 DELETE : 레코드 삭제 COMMIT : 트랜잭션 처리 R.. SQL 2022. 12. 23. [MySQL] 1-4. 데이터 조회 - CASE문과 IF문 CASE 조건을 걸어 어떤 값을 남기고자 할 때는 if문과 case문을 사용할 수 있다. 먼저 CASE문을 사용해본다. CASE문을 통해 조건을 주고, 조건에 해당할 경우 남길 값을 할당한다. CASE와 END로 감싸고, 사이에 WHEN 조건 THEN 출력할 값 을 입력하여 사용한다. ELSE를 사용하여 조건 이외의 구절을 한번에 처리해 줄 수도 있다. CASE WHEN 조건문 THEN 출력할 값 WHEN 조건문2 THEN 출력할 값2 ELSE 조건에 해당하지 않을 때 출력할 값 END AS '남는 값들을 지칭하는 컬럼명' IF 전통과 역사의 IF문을 사용할 수도 있다. 만일 나이가 30세 이하이면 '주니어'를, 40대 이상이면 '시니어'를 출력하도록 해 보자. IF문은 아래와 같이 사용한다. IF(조건.. SQL 2022. 12. 23. 이전 1 2 다음