블로그

윤선미

데이터 분석가 로드맵 🥳 & 데이터리안 강의 실제 학습 시간 공개

✨ 데이터리안에서 분석가 로드맵이 나왔습니다 ✨ 그리고 인프런 대시보드가 리뉴얼 되었어요. 이제 학생들이 이 강의를 학습하는데 실제로 얼마나 시간을 소요하고 있는지 볼 수 있게 되었습니다! (예시. 기초 SQL강의의 런타임은 1시간 36분, 실질 수강 기간은 3일!) 로드맵을 소개하면서, 데이터리안 강의를 학습하는데 우리 수강생 분들이 어떻게 시간을 쓰고 계시는지 같이 얘기해보겠습니다.    1. SQL 실무 활용 트랙 기획자, 마케터 등 SQL을 실무에서 활용해야 하는 모든 직군이 공통으로 들을 수 있는 구성입니다. 간단한 데이터를 추출하거나, 기존 쿼리를 이해하는 등 라이트하게 활용할 사용자들을 위한 트랙입니다. 강의의 순수 플레이 타임은 기초 SQL 1시간 36분, 중급 SQL 4시간 19분으로 5시간 55분이고, 중급 SQL 문제풀이 강의 2시간 12분을 포함해서 학습하신다면 8시간 7분입니다. 실제 학습에 소요되는 시간은 어느정도 될까요? 강의를 90% 이상 수강한 학생들이 '완강 수강생'이라고 생각하고, 이 수강생들의 상위 50% 평균을 계산한 값은 다음과 같습니다. 기초 SQL은 3일, 중급 SQL은 9일, 중급 SQL 문제풀이는 4일을 소요하여 강의를 완강합니다. 하루에 약 30분 정도 투자해서 공부를 하고 계시구요. 데이터리안의 모든 코스의 강의는 평균 10분 내외로 촬영하고 있으니까 하루에 약 3개 강의 정도 들으시는 것으로 예상해볼 수 있겠네요 😊 그런데 수강평을 보면 아시겠지만, 기초 SQL의 경우 런타임이 약 1시간 30분 정도라서 하루만에 몰아서 끝내시는 분들도 많아요. 이 강의를 활용해서 학생들을 가르쳐본 경험으로는 약 3시간, 길면 5시간 정도 집중하는 시간을 내면 기초 SQL 강의를 완강하실 수 있습니다. 본인 스타일에 맞게 하루에 몰아서 빡공! 또는 매일 30분씩 나누어서 공부하면 좋겠죠. 👉 데이터리안 수강평 모아보기    2. 데이터 분석가 트랙 현업에서 데이터 분석가로 일하고 계시는 분 또는 데이터 분석가로 입사하기 위해 코딩 테스트를 준비하는 분들을 위한 구성입니다. SQL로 데이터를 자유자재로 핸들링하고 분석에 활용할 분들을 위해 고급 SQL 강의가 들어가있고, 분석을 위한 추가 스킬로 파이썬이라는 프로그래밍 언어를 선택하신 분들을 위한 트랙입니다. 강의의 순수 플레이 타임은 SQL 실무 활용 트랙에 더해, 고급 SQL 5시간 16분 + 파이썬 입문 8시간 55분 + 판다스 6시간 30분으로 총 20시간 41분이 추가됩니다. 여기에 고급 SQL 문제풀이까지 학습하신다면 2시간 12분이 더해져 총 플레이타임은 22시간 53분이 됩니다. 실제로 수강하는데 걸리는 기간을 보면 고급 SQL은 16일, 고급 SQL 문제풀이는 4일, 파이썬 입문편은 4일, 판다스는 22일이 걸리고, 하루에 평균적으로 20분~30분 정도 투자하고 있어요. 파이썬 입문 강의는 특이하게 하루 평균 시청 시간이 2시간 30분이나 되는데요. 강의 러닝타임에 비해서 완강까지 걸리는 기간도 매우 짧구요. 아직 런칭한지 얼마 안 된 강의라서 그런 것인지... 정말 파이썬 입문 강의에는 🔥열혈 수강생🔥들만 있는 것인지 데이터 추이를 지켜보고 있습니다. 데잇걸즈 4기, 5기분들도 데이터리안의 SQL 강의를 수강하셨었는데요. 적절한 코칭이 함께 들어갔을 때 또는 스스로 꾸준히 학습할 때 기초 SQL부터 고급 SQL까지 학습하는데 걸리는 시간은 약 4주에서 8주정도 된다고 생각하시면 좋을 것 같아요. 개인차가 있지만 아무리 늦어도 8주안에 SQL 코딩테스트를 통과할 수 있는 정도의 실력은 길러진다고 보고 있습니다. 실제로 네이버, 리디 등의 데이터 분석가 코딩테스트에 합격하신 분들이 연락을 많이 주시구요. 데잇걸즈 같은 1년에 한 번 있는 프로그램이 아니더라도 함께 모여서 으쌰으쌰하며 공부할 수 있는 환경이 만들어지면 좋을 것 같다는 취지로 4주에서 8주짜리 SQL 캠프도 기획하고 있으니까 기대 많이 해주세요. 👉 데잇걸즈 4기 수강생 분들의 기술 블로그 보러가기 "SQL? 누구냐 너!!"    3. 데이터 사이언티스트 트랙 이 트랙은 파이썬이라는 프로그래밍 언어와 머신러닝🤖을 공부하고 싶은 분들을 위해 구성했습니다. 강의 런타임과 실질 수강 기간은 아래와 같아요. 데이터 분석을 위한 파이썬: 러닝타임 8시간 55분 / 4일 / 매일 2시간 33분 학습 데이터 분석을 위한 판다스: 러닝타임 6시간 30분 / 22일 / 매일 21분 학습 추천 시스템 입문편: 러닝타임 7시간 49분 / 12일 / 매일 41분 학습 총 러닝타임은 23시간 14분, 학습 기간은 38일이네요. 앞에서도 말했지만 파이썬 입문 강의의 일일 학습 시간, 학습 완료까지 걸리는 기간 데이터가 참 특이합니다 🤔 '데이터 분석을 위한 판다스' 강의의 런타임이 6시간 30분으로 훨씬 짧은데도 실질 수강 기간은 훨씬 길죠. 판다스 강의에 분석 프로젝트가 많아서일까요. 데이터를 눈여겨 봐야겠습니다. 👉 데이터 분석을 위한 파이썬: 입문부터 꿀팁까지 보러가기   4. 수강 완료 기간 데이터 데이터리안 강의들의 런타임, 실질 수강 기간, 1일 평균 시청 기간 데이터를 정리해보면 아래와 같습니다. 이 데이터는 고정된 데이터가 아니라 여러분들의 강의 수강 패턴대로 계속 업데이트 될거예요. 강의 완료기간은 더 짧아지도록, 1일 평균 시청 시간은 더 길어지도록, 그리고 완강하는 사람들의 비율이 더 늘어나도록 저희도 노력하겠습니다. 👉 데이터리안 전체 강의 보러가기👉 데이터리안 서비스 페이지 바로가기   (2021년 11월 5일 기준) 강의명 러닝타임 완료기간 1일 평균 시청 시간 로드맵 [백문이불여일타] 데이터 분석을 위한 기초 SQL 1시간 36분 3일 32분 SQL 실무 활용, 데이터 분석가 [백문이불여일타] 데이터 분석을 위한 중급 SQL 4시간 19분 9일 29분 SQL 실무 활용, 데이터 분석가 [백문이불여일타] 데이터 분석을 위한 중급 SQL 문제풀이 2시간 12분 4일 33분 SQL 실무 활용, 데이터 분석가 [백문이불여일타] 데이터 분석을 위한 고급 SQL 5시간 16분 16일 20분 데이터 분석가 [백문이불여일타] 데이터 분석을 위한 고급 SQL 문제풀이 2시간 55분 4일 44분 데이터 분석가 데이터 분석을 위한 파이썬: 입문부터 꿀팁까지 8시간 55분 4일 2시간 33분 데이터 분석가, 데이터 사이언티스트 데이터 분석을 위한 판다스: 기초부터 블로그 GA 데이터 분석까지 7시간 47분 22일 21분 데이터 분석가, 데이터 사이언티스트 [개념부터 실습까지] 추천 시스템 입문편 7시간 47분 12일 41분 데이터 사이언티스트  

데이터 사이언스데이터분석로드맵데이터리안SQL파이썬데이터사이언스분석가머신러닝추천시스템

윤선미

"SQL 캠프 입문반" 1월 참가자 모집

안녕하세요 수강생 여러분! 데이터리안 강사 윤선미입니다. 총 수강생이 6,000명을 넘었습니다 🥳 저희 강의를 사랑해주셔서 감사합니다. 그동안 쌓아온 SQL 온오프라인 강의 경험을 바탕으로 4주과정 부트캠프를 오픈했습니다.   캠프에서는 [백문이불여일타] 데이터 분석을 위한 기초~중급 SQL 과정을 함께 들으며 부트캠프만을 위해 제작한 새로운 연습문제를 풀어봅니다. 온라인 강의 수강과 매주 2시간의 메타버스 라이브 세션을 병행하면서 4주 뒤에는 자신감있게 SQL 문을 작성하실 수 있게 될거예요.   혼자서 완강이 힘들어 미뤄뒀던 분 같이 공부하는 동료를 만들고 싶은 분 바로바로 질의응답을 하면서 학습하고 싶은 분 진도에 맞는 연습문제를 더 풀어보고 싶은 분   라이브 세션은 제가 직접 강의하고, 조교님들까지 모두 분석가 경력이 있는 분들로 모셨습니다. SQL 입문 과정을 4주 안에 밀도있게 배우고, 익힐 수 있도록 도와드릴게요. 정규 과정 중 첫 날을 미리 체험해보고 결정하실 수 있도록 원데이 클래스도 운영합니다. 자세한 수강료와 혜택, 과정 설명은 아래 페이지를 참고해주세요.   부트캠프 알아보러 가기👉 https://datarian.notion.site/SQL-e0e38cb61f3045f18cb4f0a83e7268c2 원데이클래스 신청하러 바로가기👉 https://forms.gle/MtwqCZQz6juyNcRr5   **[백문이불여일타] 데이터 분석을 위한 기초, 중급 SQL 기존 수강생분들은 꼭 읽어주세요** 데이터리안의 SQL 강의 기존 수강생 분들은 온라인 강의 가격을 제외한 가격에 결제하실 수 있습니다. 신청 폼에서 ‘어느 채널을 통해 캠프를 알게 되셨나요?’ 질문을 찾아주세요. ‘[백문이불여일타] 데이터 분석을 위한 SQL 기존 수강생’를 선택해주세요. 수강을 시작한지 3개월이 지나 기한이 만료된 분들은 온라인 강의를 재등록해드립니다 💝   감사합니다 :D

데이터 사이언스데이터분석SQL부트캠프데이터리안1월열공

윤선미

4주 SQL 캠프 실전반 소개

월간 데이터리안 1월 웨비나 "비전공자 4명, 어떻게 데이터 분석가 됐을까?" 에 도착한 질문들을 보니까 데이터 분석 교육으로 어떤 공부를 해야하는지, 포트폴리오는 어떻게 만들어야 하는지 고민이신 분들이 많더라구요. 100개가 넘는 질문 중에 거의 대부분이 이 고민이었던 것 같아요. 웨비나 질문 몇 개를 뽑아보겠습니다 비전공자가 데이터분석 직군이 되려면 전공자를 뛰어넘는 관련 경험이라던지 포트폴리오가 필요하다고생각합니다. 이런 경험이나 포트폴리오준비는 어떻게 하셨나요? 또 독학만으로 준비하셨나요 국비강의를 들으셨나요? 데이터분석가로 취업하기 위해 꼭 갖추어야 하는것은 무엇이며, 비전공자가 특히 고려해야 하는것은 무엇일까요? 데이터 분석가는 분석 포지션을 모두 수행하는 플레이어인가요? (데이터 분석가+비즈니스 분석가+프로덕트 분석가) 채용공고를 보면 데이터 분석가 업무를 모델링으로 쓴 곳도 있고, Funnel/AARRR 등 프로덕트 분석으로 쓴 곳도 있어서 기본적으로 역량을 어디서부터 어디까지 쌓아둬야 하는지 궁금합니다. 데이터분석 직무에 필요하다고 생각하시는 핵심역량 또는 채용시 중요하게 보시는 부분이 있다면 어떤것일지 궁금합니다.   사실 질문들을 읽으면서 우리끼리 얘기했어요. "이거 우리 캠프 들으면 다 할 수 있는데. 너무 캠프 말만 하면 쟤네 광고하나 할테고 이거 참 어렵네요..."   데이터리안 SQL 과정은 단순히 SQL이라는 언어를 주입식 교육하는 과정이 아니라 데이터 분석가로 취업하기 위해 코딩테스트를 보려면 어떤 수준까지 언어를 알고 훈련해야 하는지, 실무에서 우리가 자주 썼던 문법은 뭔지 복기하며 기획한 과정이기 때문에 사실 이 질문들에 대한 저희의 최선의 답변은 "저희를 믿고 캠프와 4주간 또는 8주간 함께해주세요." 입니다. 이 과정을 기획한 분석가가 4명인데요. 이 4명이 지금까지 코딩 테스트를 본 회사를 세보면 몇 개일까요? 스무 군데가 넘습니다. 그 중에 실제로 근무한 회사는 여섯 곳이구요. 다양한 SQL 코딩 테스트 유형에 대해서, 분석가의 업무에 대해서 이보다 더 다양한 이야기를 해드릴 수 있는 곳은 없습니다. 실전반은 SQL의 문법을 어느 정도 아는 분들(그룹별로 집계하기, 조인까지는 할 수 있다!)을 대상으로 진행합니다. 코딩을 한 번도 해 본적이 없다 하시는 분들은 입문반부터 시작하시면 될 것 같구요. 실전반은 기본적인 문법을 아는 분들에게 좀 더 다양한 SQL의 함수와 기능에 대해서 얘기하고, 좀 더 고난이도의 문제를 함께 풀어보며, 리텐션 분석 퍼널분석 등 분석 프레임워크를 알려드리기 위한 과정입니다. 현업과 비슷한 분석 경험을 해보고 싶거나, 나의 SQL 또는 분석 실력을 보여줄 수 있는 포트폴리오를 만들고 싶은 분들에게도 유용한 과정이 될거예요.   분석 프레임워크가 뭐지? 요즘 분석가 채용공고들을 보면 AARRR, Cohort, Funnel 같은 단어가 많이 보이는데요. 처음 보시는 분들은 '저게 뭐야...' 하실 수 있을 것 같아요. 데이터 분석 하는데 많이 사용하는 용언데 알고보면 별게 아닙니다. 토스 데이터 분석가 채용공고 (https://www.wanted.co.kr/wd/52315) AARRR은 그로스해킹(Growth Hacking) 용어로 서비스를 성장시키기 위해서 어떤 분석을 해야하고, 어떤 지표들을 봐야하는지 정리된 분석 프레임워크입니다.   ... 데이터리안 velog에서 더보기

데이터 사이언스데이터분석데이터리안SQL

<도서정리> 친절한 sql 튜닝 1

1. SQL 처리 과정과 I/O 옵티마이저 – SQL 최적화 기능, 효율적인 액세스 경로 선택, 옵티마이저 힌트, 실행계획   SGA(시스템 글로벌 애리아) – 서버 프로세스와 백그라운드 프로세스가 공통으로 사용하는 메모리 (DB 버퍼캐시, 리두 로그 버퍼, 라이브러리 캐시 등이 포함되어 있음) Ø  라이브러리 캐시 (코드 캐시; sql 함수 프로시저 실행계획 등) 소프트 파싱 – 캐시에서 해결되는 파싱; 라이브러리 캐시의 특장점 하드 파싱 - 하드디스크까지 가서 최적화와 로우소스까지 생성해야 하는 파싱 Ø  DB 버퍼캐시 (데이터 캐시; 디스크에서 읽은 데이터 블록) I/O call 줄임   I/O 튜닝 프로세스는 준비-실행-대기 상태를 반복하기 때문에 디스크 I/O call이 발생하면 그 동안 프로세스는 대기 상태가 됨. 즉, 디스크 I/O가 SQL 성능을 좌지우지함 블록 : DBMS가 데이터를 읽고 쓰는 단위 (레코드 하나가 아닌 레코드 속한 블록을 통째로 읽음) 시퀀셜 액세스 : 순차적 액세스, full table scan, 다중 블록 I/O 랜덤 액세스 : 랜덤으로 한 블록씩 접근; 인덱스는 single block I/O   Sql 튜닝을 통해 읽어들이는 총 블록 개수를 감소시켜야 함 실제 성능을 향상시키려면 건들일 수 없는 물리적 I/O가 아닌 통제 가능한 논리적 I/O를 감소시켜야 함   Table Full Scan (대량 데이터 호출) VS Index Range Scan (소량 데이터 호출; ROWID 제공) 2. 인덱스 1. 인덱스 스캔 효율화 튜닝 2. 랜덤 액세스 최소화 튜닝 ☆   선두 컬럼이 가공되지 않은 상태로 조건절에 있어야한다!! 시작점을 찾아야 일부만을 스캔하기 때문이다.   인덱스는 데이터가 “정렬”되어 있기 때문에 range scan 할 수 있다. 즉, 소트 연산 생략 효과가 있다. -       인덱스 구성대로 order by col1, col2하면 소트 연산 생략되지만 order by col1 || col2하면 생략 안됨 -       테이블 alias 사용 시에는 order by alias.col로 해야함 -       (자동)형변환도 가공으로 취급됨 - null값도 처리해주기   인덱스 full scan도 인덱스 컬럼 순으로 정렬됨 >> 이것은 소트 연산 생략 의도로 사용하기도 함 힌트 first_rows를 사용하면 거의 모든 범위의 테이블 액세스가 일어나 성능 면으로 좋지 않지만부분범위 처리 시에는 소트 연산을 생략함으로써 일부를 빠르게 출력할 수 있음 (table full scan, index range scan 이외에도 index unique scan, index skip scan, index fast full scan, index range scan descending 있음)   3. 인덱스 튜닝 Rowid는 논리적 주소이며 포인터가 아니다. 버퍼 캐시에서 DBA(데이터파일번호+블록번호)를 통해 테이블 블록을 찾는 구조이다. (고비용 구조) 인덱스 클러스터링 팩터  특정 컬럼을 기준으로 같은 값을 갖는 데이터가 서로 모여있는 정도이것이 안 좋은 인덱스를 사용하면 그만큼 블록 I/O가 발생 인덱스 손익분기점 index range scan에 의한 테이블 액세스가 table full scan보다 느려지는 지점이것이 CF클러스터링 팩터와 관련이 있음 테이블 파티셔닝(ex) date 기준) -> full scan을 빠르게 처리할 수 있음 인덱스 컬럼 추가 인덱스에 컬럼을 추가하는 것만으로도 성능 향상.하지만 추가해야할 컬럼은 많아지고, 인덱스가 많을수록 정렬 때문에 성능에 안 좋음 Include 인덱스 컬럼에 추가하는 것이 아닌 index 생성 시 끝에 include(column)하면 됨그러면 기존 방식으로 추가한 컬럼은 수직적 탐색에 사용하고include로 추가한 컬럼은 리프 블록에만 저장하여 수평적 탐색에 필터 조건으로 사용 가능 클러스터형 인덱스 테이블을 인덱스 구조로 형성인덱스 리프 블록이 곧 데이터 블록Create table index_ (col1 number, col2 varchar(10),Constraint index_pk primary key(a) )Organization index; 클러스터 테이블 같은 공간에 저장해 둘 뿐, 위와 같이 정렬하지 않음랜덤 액세스가 적고, 클러스터에 도달하면 시퀀셜 방식으로 스캔 -       인덱스 클러스터 Create cluster c_dept ( eptno number(2) ) index;Create index c_dept on cluster c_dept;Create table dept ( deptno number(2) not null, dname varchar2(14) not null, loc varchar2(13) )Cluster c_dept( deptno ); -       해시 클러스터 Create cluster c_dept ( eptno number(2) ) hashkeys 4;Create table dept ( ... );   부분범위 처리 활용 아무리 데이터가 많아도 빠른 응답속도            큰 사이즈로 데이터 호출하여 fatch call 최소화   – 인덱스 스캔 효율화 액세스 조건(스캔 범위 결정)과 필터 조건(테이블 액세스 결정)    선행 컬럼들이 모두 = 조건이면 조건이 모두 모여있어 인덱스 스캔 범위가 됨    In-List 유용 > In list iterator : in 개수만큼 index range scan 반복함 good but In-list는 원래 '필터' 조건. 본질적으로는 = 조건과 다름                               데이터가 대용량으로 굉장히 많아야 = 조건으로 유용하다   힌트 NUM_INDEX_KEYS(a 고객별가입상품_X1 1) 사용 : 인덱스의 첫 번째 컬럼(세 번째 인자에    명시)까지 인덱스 액세스 조건으로 사용   소트 연산을 생략하기 위해 In-list가 액세스 조건이 아닌 필터 조건으로 풀려야할 때가 있음 ->   이 경우에는 인덱스의 맨 끝으로 위치시키면 됨! Between 조건을 in-list로 전환할 때는 데이터가 멀리 떨어져 있거나 데이터가 적어야 유용 Index skip scan을 사용하면(힌트 INDEX_SS) 선두컬럼을 in이 아닌 between에 사용해도  블록만을 스캔하고 효율적으로 스캔Like보다 Between이 좋음. 하지만 범위검색 조건도 남용하면 안 좋음OR 조건은 인덱스가 아닌 컬럼에 사용하면 됨인덱스 선두 컬럼에 between, like 사용 금물Union all 사용 – 옵션 조건 컬럼도 인덱스 액세스 조건으로 사용함 good Null값 해결을 위해 NVL(IFNULL), DECODE 사용 (but OR expansion 한 번만 가능) 조건절의 컬럼이 모두 인덱스에 있으면 함수도 모두 액세스 조건으로 한 번만 수행됨 good   - 인덱스 구성 조건 : 데이터량이 많으면 적절한 인덱스 구성이 꼭 필요            1. 선두 컬럼을 조건절에 반드시 사용하고, 2. 조건절에 많이 사용하고 3. = 조건으로 자주 조회하는 컬럼 4. 수행 빈도도 큰 영향 ex) 일자/일시 조건을 선두에 두고, 자주 사용하는 필터 조건을 뒤쪽에 추가   소트연산 생략하기 위한 인덱스 구성 = 연산자로 사용한 조건절 컬럼 ORDER BY 절에 기술한 컬럼이어야 함             + 다른 조건절일 경우 데이터 분포 고려해서 인덱스에 추가하기   인덱스 생성 시 컬럼의 선택도가 충분히 낮은지도 살펴봐야함 <> 변별력 높은 컬럼인지 확인!            카디널리티가 높은 컬럼(변별력이 낮음)은 테이블 액세스가 많이 발생한다            인덱스 생성 시에는 선택도가 중요하고            컬럼 간 순서를 결정할 때는 필수 조건 여부, 연산자 형태가 더 중요하다    

SQLSQL튜닝인덱스튜닝INDEX

데이터베이스 - SQL

데이터 조작어 DML(Data Manipulate Language) SELECT 쿼리 SELECT * FROM 테이블; SELECT id, name, FROM student; WHERE 조건절 >, >=, =, <=, <, <> SELECT * FROM 테이블 t WHERE t.id = 1; <> 은 같지 않은 것. != 와 같음 IN, NOT IN WHERE t.id in (1, 2, 3, 4) | WHERE t.id not in (1, 2, 3, 4) LIKE WHERE t.name LIKE '%김'; LIKE와 함께 사용하는 와일드 문자 + 문자열 연결 % 포함 관계 %을 문자열 앞에 붙이면 필드값이 제공된 문자열로 시작하는 데이터 탐색. % 끝에 붙이면 끝나는 문자열 탐색. % 앞 뒤에 붙이면 포함하는 문자열 탐색. [] 일치, [^] 불일치 -> '[0-5]%' _ 특정 위치 '_e%' : 두 번째가 문자가 'e'인 문자 ex) test, seller, ...  WHERE t.address IS NULL | WHERE t.address IS NOT NULL WHERE t.date BETWEEN '2022-01-01' AND '2022-12-31' 복합조건 사용 가능 - AND, OR, NOT   중복제거 SELECT DISTINCT   ORDER BY 필드명 방향[DESC, ASC] ORDER BY price DESC, publisher ASC;   GROUP BY 집계함수 - SUM, AVG, MIN, MAX, COUNT GROUP BY 기준필드명 Orders 테이블 GROUP BY customer -> 주문내역을 고객별로 묶음 Likes 테이블 GROUP BY board_id -> 좋아요를 게시글별로 묶음 group by 사용할 경우, select 절에서 기준필드와 집계함수만 출력 가능! 일대다 테이블 조인 관계에서 group by 사용한 예시 기준이 board임으로 board 테이블 필드들 출력 가능 select b.id, b.title, b.content, count(*) as '등록 인원'from board b join registration r on b.id = r.board_idgroup by b.id; HAVING 절 GROUP BY절의 조건절. 집계함수와 함께 사용함. GROUP BY로 묶은 데이터 개수가 10개 이상인 데이터만 출력. HAVING count(*) >= 10   조인(Join) FROM 절에 조인하고자 하는 테이블들을 명시한 후 WHERE 조건절에서 필드를 매치.  JOIN(== INNER JOIN)  테이블 1 JOIN 테이블 2 ON 조인조건 데이터가 있는 경우만 데이터를 가져온다. (교집합) 외부조인 - NULL 데이터가 출력될 수 있다. 테이블 1 LEFT OUTER JOIN 테이블 2 ON 조인조건 테이블 1을 기준으로 조인. 테이블 1의 모든 데이터를 기준으로 출력하기에 조인조건에 맞는 테이블 2의 데이터가 없는 경우 테이블 2의 데이터는 Null로 출력. 테이블 1 RIGHT OUTER JOIN 테이블 2 ON 조인조건 테이블 2를 기준으로 조인. UNION (합집합) select 문 UNION select 문 UNION ALL 을 사용할 경우, 중복 데이터까지 모두 출력 WHERE OR 조건과 같은 결과를 출력하지만 OR 조건은 모든 필드를 합쳐서 출력하고 UNION은 별도의 두 테이블을 상하로 합쳐 결과를 반환한다.   부속질의(SubQuery) - 조인과 달리 모든 데이터를 합치지 않고 필요한 데이터만 찾음 select 절 중심 테이블의 데이터가 출력될 때마다 select 절이 매번 호출된다는 단점이 있다.  update orders set bookname = (select name from book where book.id = orders.book_id) from 절 조건에 맞는 데이터만을 모아서 하나의 테이블처럼 활용할 수 있음 where 절 출력이 필요없고 조건절에만 필요할 때 유용. 같은 테이블 집계함수와 비교할 때 유용. select price from orders where price > select avg(price) from orders 테이블 2의 가장 최신 날짜보다 빠른 날짜를 가진 테이블 1의 데이터들 select * from 테이블 t1 where t1.date >     (select max(t2.date) from 테이블 t2)   EXISTS  WHERE EXISTS + (SELECT 문) 데이터의 존재를 확인하기에 존재 확인 용도라면 EXISTS의 성능이 IN 쿼리보다 좋다. LIMIT 출력할 데이터의 개수를 지정. select절 + limit 시작위치, 개수   INSERT문 INSERT INTO 테이블(필드, ...) VALUES(값, ...); INSERT INTO 테이블 SELECT문 가능 UPDATE문 UPDATE 테이블 SET 필드 = 수정할 값 [WHERE 조건절]; SET절에서 SELECT문 사용 가능. 같은 테이블에서는 SELECT문 불가 조건에 해당하는 데이터 수정. 조건 없을 경우 모든 데이터 업데이트. DELETE문 DELETE FROM 테이블 [WHERE 조건절]; 조건에 해당하는 데이터 삭제. 조건 없을 경우 모든 데이터 삭제 == 빈 테이블.         데이터 정의어 DDL(Data Definition Language)  CREATE DATABASE [데이터베이스명]; USE [데이터베이스명]; SHOW DATABASES; SHOW TABLES; CREATE TABLE 테이블명( 필드명 필드타입, 필드명 필드타입 제약조건... ); 필드타입 BIGINT, INTEGER, VARCHAR(255), BOOLEAN, DATE ... 제약조건 NOT NULL, UNIQUE, DEFAULT, CHECK (조건절), PRIMARY KEY ... 기본키 필드명 필드타입 PRIMARY KEY 또는 필드 정의한 후 PRIMARY KEY (필드명) 라인을 추가하여 설정 외래키 필드 정의 후에 FOREIGN KEY (필드명) REFERENCES 테이블명(테이블 pk 필드명); 뒤에 ON DELETE [ CASCADE | SET NULL ] 를 통해참조 테이블 데이터 삭제 시 함께 삭제할 것인지 외래키 값을 NULL로 변경할 것인지 설정 ALTER TABLE 필드 추가 ALTER TABLE 테이블 ADD 필드명 필드타입 ... 필드 수정 ALTER TABLE 테이블 MODIFY 필드명 필드타입... 필드 삭제 ALTER TABLE 테이블 DROP COLUMN 필드명; 필드 기본키 설정 ALTER TABLE 테이블 ADD PRIMARY KEY(필드명); 필드 외래키 설정 ALTER TABLE 테이블 ADD [제약조건명] FOREIGN KEY(필드명) REFERENCES 참조테이블(참조필드); DROP TABEL 테이블명 -> 테이블 삭제(테이블의 모든 데이터와 테이블 구조 삭제)         데이터 제어어 DCL(Data Control Language) GRANT ALL PRIVILEGES ON DB명.Table명 TO 사용자@호스트 IDENTIFIED BY '비밀번호'; FLUSH PRIVILEGES; REVOKE ALL ON DB명.Table명 TO 사용자@호스트; ALL | INSERT, UPDATE, CREATE ... GRANT ... ON *.* TO id@'%'; COMMIT, ROLLBACK         내장함수 숫자 ABS 절대값, ROUND 반올림 문자열 CONCAT 문자열 합치기, LOWER, UPPER, LPAD, RPAD 대체, LTRIM, RTRIM 삭제 REPLACE, REVERSE, SUBSTR LENGTH 날짜, 시간 ADDDATE, DATE, DATEDIFF, DATE_FORMAT, STR_TO_DATE, SYSDATE NULL IFNULL, NULLIF, ISNULL      

데이터베이스SQL

데이터베이스 1 - 개념, 특징, SQL, 조인, 부속질의, 인덱스, 저장프로그램 ...

출처 도서 - MySQL로 배우는 데이터베이스 이론과 실습 데이터베이스 데이터의 집합. 데이터 표준화를 통해 중복제거 등 데이터 무결성을 유지한다. 동시성 제어를 통해 데이터 일관성을 유지한다. 대용량 데이터 속에서 데이터 호출과 갱신의 효율성을 높인다. 하드디스크에 존재하며, 인덱스/데이터 사전 등으로 구성되어 있다.   DBMS(데이터베이스 관리 시스템) 데이터 정의, 구조, 값을 관리한다 <- 설계 과정 데이터는 DB에서, 데이터 구조는 DBMS에서 분리하여 관리하여 서로의 변화에 영향을 받지 않음 -> 데이터 독립성 데이터베이스를 관리하는 소프트웨어로 주기억장치에 상주 -> cpu, 메모리 소모 SQL 컴파일러, 트랜잭션/파일/버퍼 관리자 등으로 구성되어있다.   SQL(구조적 질의 언어) DDL : CREATE, ALTER, DROP DML : SELECT, INSERT, DELETE, UPDATE DCL : GRANT, REVOKE   데이터 모델 객체 관계 데이터 모델 : 객체 속성값(테이블 pk) 사용   테이블 속성 특징 원자성 : 단일값을 가진다. -> 취미라는 속성이 있다면, [독서, 운동] 값이 들어갈 수 있다.-> 두 가지 값을 넣고 싶다면, 취미1/취미2로 속성을 추가 및 분리해야한다. 도메인 값(타입)은 일정해야하며, 속성값의 이름은 중복되지 않아야한다 -> 데이터 표준화 및 일관성 확보 중복된 튜플은 존재하지 않는다. -> 보통은 auto increment int id를 pk로 구분시킴 기본키(primary key) : 튜플을 식별할 수 있는 후보키 중 선정된 대표키 외래키(foreign key) : 두 테이블을 연결하는 키;일대일관계에서는 주인(자주 사용하는 테이블)의 외래키에 주인이 아닌 테이블의 pk가 추가됨 일대다관계에서는 부모의 pk가 자식(주인)의 외래키에 추가됨 참조 무결성 제약조건 : restricted, cascade(같이 삭제), default, nullJPA에서는 생성 시에도 cascade 옵션을 통해 자식 테이블을 같이 생성 가능(save 메서드 없이도)   기본 SQLselectfrom    from - inner join - on    from - left join / right join - on    from - full joinwhere (between, in, like 와일드문자, and ...)group by - havingorder by 속성값 desc/asc 집계함수SUM, AVG, MIN, MAX, COUNT group by - having 사용 시 주의사항select 시 group by에서 사용한 속성값과 집계함수만 출력가능having 조건절에는 집계함수만 사용가능하다 - where 조건절과 구분하기   조인 일반조인from 테이블 나열 + where 조건절join + on 외부조인 outer join   부속질의대량데이터가 있을 경우, 모든 데이터를 합쳐서 연산하는 조인보다 성능이 좋음select, from, where 절에 추가적인 SQL문 추가exists 조건 사용하면 유용   내장함수ABS, CONCAT, LPAD(대체), SUBSTR, LENGTH, IFNULLADDDATE, DATE, DATEDIFF, DATE_FORMAT, STR_TO_DATE ...   뷰가상의 테이블; 기존의 테이블들을 가공하여 필요한 정보들만 출력CREATE VIEW 뷰이름 AS SELECT 문   인덱스하드디스크에서 데이터를 읽어오는 것은 액세스 시간이 소요되며이러한 연산속도를 개선하기 위해 인덱스를 활용인덱스를 중심으로 정렬하여 인덱스에 포함된 컬럼을 조건을 사용하여대용량 데이터 속에서 소량의 데이터를 호출할 때 빠르게 조회할 수 있음   저장 프로그램1. 프로시저 프로시저 생성CREATE PROCEDURE <이름>(<변수이름> <변수타입>, ...)BEGIN SET @<변수> = 0;DECLARE <변수이름> <변수타입>;...END 명령문DELIMITERIF THEN - ELSE - END IFLOOP | WHILE | REPEATRETURN 프로시저 호출CALL <프로시저 이름>(); 2. 함수프로시저는 CALL 명령어로 실행되는 프로그램이고, 함수는 Select문에 호출되어 값을 반환하는 용도로 사용CREATE FUNCTION <함수이름>(<변수이름> <변수타입>) RETURN INTBEGIN...END 3. 트리거CREATE TRIGGER ...INSERT DELETE UPDATE문과 함께 실행    

데이터베이스DBMSSQLtablefieldkey조인