묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결업무에 바로 쓰는 SQL 튜닝
select_type 에서 'simple' 경우 각각의 테이블이 '드라이빙' 또는 '드리븐' 인지 어떻게 알수 있나요?
안녕하세요. 우선 좋은 강의 만들어주셔서 정말 감사합니다 :)select_type 에서 'simple' 경우 각각의 테이블이 '드라이빙' 또는 '드리븐' 인지 어떻게 알수 있나요? 5-2. 실행계획 항목(1) -> 05:40 영상을 확인해보면 실행계획에서 table 필드 값 "e" 하고 "s" 가 있는데요.여기서 질문 2가지가 있습니다.질문1: 여기서 각각의 테이블이 '드라이빙' 또는 '드리븐' 인지 어떻게 알수 있나요?(실행 계획 통해 조회된 데이터 순서대로 판단하면 되는것인지... 궁금하네요.. 그런데 이걸로 100% 판단하기에 조금 어렵다고 들어서요...)질문2:만약 테이블 "e" 가 드라이빙 테이블이라고 가정시실질적으로 쿼리 수행할때 테이블 "e" 에 대한 where 절 조건을 이용해서 먼저 필터링 한다음에테이블 "s" 하고 조인 수행을 하는것인지 궁금 합니다.즉 드리아빙 테이블 조건절 이용해서 최대한 필터링 하고그다음 드이븐 테이블하고 조인을 수행하는지 궁금합니다.
-
미해결장래쌤과 함께하는 쉽고 재미있는 SQL 이야기
create view
안녕하세요 선생님. Create 구문을 작성했는데 선생님 자료와 달리 0row affected. 라고 나오며 데이터 결과가 없는 걸로 나옵니다. create에 커서를 대면 create is not vaild at this position, expection EOF, ";"라고 나오는데 이것과 관계가 있을까요? 아니면 제가 어떤 구문을 잘못 작성한 것일까요? 확인 부탁드리겠습니다.
-
미해결데이터 분석 SQL Fundamentals
직원 별 가장 높은 매출
14:38초 예제에서 직원별 개별 상품 매출액, 직원별로 가장 높은 매출 대비 개별 상품 매출 비율 구하기 with temp_01 as( select employee_id ,sum(amount)as sum_by_emp_prod --직원별 개별 상품 매출액 -- ,max (amount) as max_emp --직원 별 가장 높은 매출 from orders a join order_items b on a.order_id=b.order_id group by employee_id )select sum_by_emp_prod,sum_by_emp_prod/max(sum_by_emp_prod)over(partition by employee_id) from temp_01; group by할때 왜 product_id도 group by하나요? 직원별 개별 상품인데 employee_id와 그룹바이 하면 되는거 아닌가여 ? 직원별로 가장 높은 매출을 max(sum_by_emp_prod)over(partition by employee_id) 이렇게 구하셧는데 with절에서 group by로 해서 with temp_01 as( select employee_id ,sum(amount)as sum_by_emp_prod --직원별 개별 상품 매출액 ,max (amount) as max_emp --직원 별 가장 높은 매출 from orders a join order_items b on a.order_id=b.order_id group by employee_id ) 이렇게 구하면 안되나여?
-
미해결데이터 분석 SQL Fundamentals
강의순서대로 실습코드순알려주세요.
복습할려는데..실습코드순서를 모르겟어요
-
해결됨SW 개발자를 위한 성능 좋은 SQL 쿼리 작성법
USE EPlanHeap 구문 실행 오류
안녕하세요.예제 스크립트 실행 중 오류가 확인되어 문의드립니다. EPlan 테이블 생성 구문을 이용하여 Eplan 테이블은 정상적으로 생성된 듯 보이나, 예제 구문 중USE EPlanHeap 선택 시 EPlanHeap라는 테이블이 존재하지 않는다는 오류가 발생하고 있습니다 MSSql에는 테이블에 대한 Heap를 생성하는 별도의 구문이 존재하는 것이 맞을까요?EPlanHeap 테이블이 테이블 생성 구문이 정상적으로 실행되면 생성되는 테이블이 맞을까요?해당 테이블이 생성되었는지 확인할 수 있는 방법이 있을까요?확인 부탁드립니다. 감사합니다 :)
-
해결됨Real MySQL 시즌 1 - Part 1
[오타 제보] 선행 데이터를 기반으로 한 데이터 분석
안녕하세요~!강의에 오타가 있는 것 같아서 질문 드립니다.e2 서브쿼리에 user_id도 select 절에 포함되야 할 것 같아요!select sum(sign_up) as signed_up, sum(complete_purchase) as completed_purchase, (sum(complete_purchase) / sum(sign_up) * 100) as conversion_rate from ( -- 1월에 새로 가입한 유저 목록 select user_id, 1 as sign_up, min(created_at) as sign_up_time from user_events where event_type = 'SIGN_UP' and created_at >= '2024-01-01' and created_at < '2024-02-01' group by user_id ) e1 left join ( -- 처음 결제한 시점 정보 목록 select user_id, 1 as complete_purchase, min(created_at) as complete_purchase_time from user_events where event_type = 'COMPLETE_PURCHASE' group by user_id ) e2 on e2.user_id = e1.user_id and e2.complete_purchase_time >= e1.sign_up_time and e2.complete_purchase_time < date_add(e1.sign_up_time, interval 7 day);
-
미해결데이터 분석 SQL Fundamentals
m:n inner join일 경우 cross조인과 동일하게 동작되는건가요?
강의 9:53에 inner join을 했을때 m:n이라서 empno가 7369 인 행이 6건이 출력되었습니다. m:n인 경우 inner join은 cross join와 동작이 동일한걸까요?둘의 차이점이 멀까요?
-
미해결시니어 백엔드 개발자가 알려주는 데이터베이스 개론 & SQL
요청사항이 있습니다!
너무 좋은 강의 무료로 제공해주셔서 감사합니다.혹시 강의자료를 공유받을 수 있을까요? 복습할 때 있으면 도움이 많이 될 것 같아 여쭤봅니다!
-
해결됨Real MySQL 시즌 1 - Part 1
2강. VARCHAR(255) 저장되는 데이터의 길이 정보 질문
안녕하세요. 2강을 수강하면서 궁금한 점이 있어 질문 글 남깁니다. VARCHAR(30) vs VARCHAR(255) 둘 중에서 데이터 타입을 선택할 때 실제 사용하는 길이만큼만 명시해 주는 게 메모리 사용 효율을 높일 수 있다고 말씀해주셨는데요.VARCHAR(30)와 VARCHAR(255) 모두 저장되는 데이터의 길이 정보를 1 바이트(0~255 표현 가능)로 저장하는 것이 맞는걸까요?강의 자료에 VARCHAR(30) vs VARCHAR(255) 차이를 설명할 때 '디스크 공간 효율 차이도 미미하게 존재(1바이트 vs 2바이트)'라고 적혀 있어 VARCHAR(255)에서 저장되는 데이터 길이 정보에 2바이트의 공간을 할당한다는 의미로 이해되어서요. 좋은 강의 감사합니다.
-
미해결데이터 분석 SQL Fundamentals
rollup
그러면 group by를 할때 rollup을 사용하게 되면, group by에 해당하는 컬럼들에 우선순위가 매겨지면서 그들의 합을 보는건가요?? group by(1, 2, 3)이라면 1끼리의 합계, 1+2의 합계, 1+3의 합계, 1+2+3의 합계 이런식으로 보는건가요?
-
미해결장래쌤과 함께하는 쉽고 재미있는 SQL 이야기
json 배열 파싱
안녕하세요..! JSON 파싱에 대해선 강의에 안나와서 질문드립니다..! 한 컬럼에 파싱해야될 제이슨이 배열 형태로 여러개 있을 경우 어떻게 추출해야될지 궁금합니다. 컬럼명을 a 라고 예시로 들자면 a = { 과일=[{"이름" : "사과", "가격" : 2,000}], 음식=[{"이름" : "햄버거", "가격" : 7,500}] , 과일=[{"이름" : "사과", "가격" : 2,000}]} 이런식으로 [ { } ] , [ { } ], [ { } ] 이렇게 여러개가 있습니다 ! unnest 활용해서 a 컬럼 내 "과일"에 대한 item들을 cross join 해서 가져오는건 성공했는데 나머지 값들은 어떻게 추출하는지 모르겠어서 다른 방법이 있는지 궁금합니다!
-
해결됨[7일완성]생각하는 데이터베이스모델링
쿼리 질문드립니다!
안녕하세요 선생님."26_학사관리시스템(SQL실습3)"에 있는 쿼리 중에 조인과 서브쿼리 중 대체적으로 어떤 방법이 성능에 더 좋은지 궁금해서 질문드립니다.두 가지 질의에 대해서 3가지 방법으로 조인과 서브쿼리를 섞어보았는데 조언 부탁드립니다.감사합니다. -- 교양엉어 과목을 수강 신청한 학생의 이름-- 1. JOIN 2번select s.student_namefrom student_course scJOIN student s on sc.student_id = s.student_idJOIN course c on sc.course_code = c.course_codewhere c.course_name = '교양 영어';-- 2. JOIN 1번, where 절에 subQuery 1번select s.student_namefrom student_course scJOIN student s on sc.student_id = s.student_idwhere course_code = (select course_codefrom coursewhere course_name = '교양 영어');-- 3. where 절에 subQuery 2번select s.student_namefrom student swhere s.student_id in (select student_id from student_coursewhere course_code = (select course_code from coursewhere course_name = '교양 영어' ));-- 가교수의 과목을 수강신청한 학생수를 출력-- 1. JOIN 2번select count(student_id) as cnt -- count(student_id) as cntfrom student_course scJOIN course c on sc.course_code = c.course_codeJOIN professor p on c.professor_code = p.professor_codewhere p.professor_name = '가교수';-- 2. JOIN 1번, WHERE 절에 subQuery 1번select count(sc.student_id) as cntfrom student_course scwhere course_code in (select c.course_code from course cJOIN professor p on c.professor_code = p.professor_code where p.professor_name = '가교수');-- 3. where 절에 subQuery 2번select count(sc.student_id) as cntfrom student_course scwhere sc.course_code in (select c.course_code from course cwhere professor_code = (select professor_code from professor pwhere professor_name = '가교수'));
-
미해결비전공자도 이해할 수 있는 DB 설계 입문/실전
앱 세팅 데이터에 대한 질문이 있습니다.
안녕하세요! 강의 재밌게 잘 듣고 있습니다.투두리스트 실습 중 궁금한 부분이 생겨서 질문 남깁니다.저는 UI를 보고 앱 세팅에 관련된 데이터도 저장해야 된다고 생각해서 app_colors, app_typographies, app_languages 세 가지 테이블을 만들었습니다. 하지만 강의에서는 이 데이터를 따로 저장하지 않으셨는데 저장하지 않은 이유가 궁금합니다.
-
미해결데이터 분석 SQL Fundamentals
Dbeaver에 접속해도 postgressql이 네비게이터에 안보입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.디비버에 접속을 하면 postgres는 안보이고 샘플 데이터 베이스만 보입니다. 혹시 디비버를 삭제하고 다시 설치해야 하는 걸까요?
-
미해결MySQL 성능 최적화
performance_schema.events_stages_history_long, performance_schema.events_statements_history_long 테이블에 데이터가 쌓이지 않고 있습니다.
안녕하세요 우선 좋은 강의 남겨주셔서 감사합니다. 인덱스 다이브 최적화 영상을 보고 따라 해보았는데요. SHOW VARIABLES LIKE 'performance_schema';`performance_schema` 퍼포먼스 스키마 조회를 하게된다면 이렇게 ON 으로 되어 있습니다.UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'statement/%'; UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'stage/%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_stages%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_statements%%';퍼포먼스 스키마에 필요한 지표들을 수집 하도록 하고 테이블에 저장 할 수 있도록 해당 쿼리문을 실행 했습니다. 이에 대한 해당 테이블 조회 값 입니다. (performance_schema.setup_instruments 테이블은 너무 많아 생략하고 performance_schema.setup_consumers 만 보여드립니다.) 그리고 해당 orders 테이블을 조회 하고 나서SELECT stages.EVENT_ID, statements.EVENT_ID, statements.END_EVENT_ID, statements.SQL_TEXT, stages.EVENT_NAME, stages.TIMER_WAIT / 100 FROM performance_schema.events_stages_history_long AS stages JOIN performance_schema.events_statements_history_long AS statements ON (stages.EVENT_ID >= statements.EVENT_ID AND stages.EVENT_ID <= statements.END_EVENT_ID) WHERE stages.EVENT_NAME LIKE '%statistics%' AND statements.SQL_TEXT LIKE '%FROM orders%' AND statements.SQL_TEXT NOT LIKE '%SELECT stages.EVENT_ID,%' ORDER BY statements.EVENT_ID DESC; performance_schema 를 통해 성능 비교 했는데요. 아무것도 나오지가 않습니다. 실제로performance_schema.events_stages_history_longperformance_schema.events_statements_history_long이 테이블이 아무것도 쌓이지 않는다는 것을 확인하였습니다. 왜 이런 현상이 나타나는걸까요? 참고로 버전은 MySQL (ver. 9.1.0) 이고 docker 를 이용해 서버를 구동했었습니다.
-
해결됨Real MySQL 시즌 1 - Part 1
LIMIT, OFFSET을 사용하는 것과 범위 기반 방식의 성능 차이
안녕하세요. 강의 잘 듣고 있습니다. 제가 이해한바로는 LIMIT, OFFSET은 앞에서부터 data를 순차적으로 읽기때문에 성능 상 좋지 않고 이를 개선하기 위해 범위 기반 방식을 사용한다고 이해하였습니다.범위 기반 방식은 직접 ID 값을 지정 해주는 방식이며, id 기반으로 5000단위로 조회한다고 가정하면1회차: select * from users where id > 0 AND id <= 50002회차: select * from users where id > 5000 AND id <= 1000위와 같이 구현될 것으로 예상됩니다.관련해서 궁금한 점이 생겼는데요. 결국 두번째 쿼리를 실행 시 5000보다 큰 id를 찾는 과정에 시간이 소요될 것으로 예상되는데요, id가 index로 지정되어있어 LIMIT, OFFSET 방식보다 빠르게 찾을 수 있는 것인가요??LIMIT, OFFSET 방식 사용 시 어떤 컬럼이 index로 지정되어있는지와 상관없이 무조건 순차 탐색이 일어나는 것이고 범위 기반으로 조회 시 index로 서치하기때문에 더 빠르게 시작점을 탐색할 수 있다고 이해하면 될까요?
-
미해결[리뉴얼] 처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)
애플실리콘(M1) 몽고DB 최초 설치 후 실행 시 에러 Error: Permission denied
(해결된 문제로 혹시나... 이력을 위해 등록합니다)저는 몽고db 8.0을 설치하였고 강의 영상과 다르게 arm관련 메시지가 없어서 쭉쭉 설치 모두 진행하고 마지막 실행 시에 에러 메시지가 노출된 경우입니다. Error: Permission denied @ rb_sysopen - /Users/user/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist 요런식으로 권한 문제 메시지였고 관련해서 찾아본 결과https://parker-park.tistory.com/18 요 블로그?를 참고하여 해결할 수 있었습니다. 저는 유저명이 user라서 아래와 같이...sudo chown user /Users/user/Library/LaunchAgents
-
미해결데이터 분석 SQL Fundamentals
제발...오류가 계속 납니다
uninstaller로 삭제하고 터미널에서도 2차 확인하고 다시 설치후에 비밀번호를 작성하였는데도 안됩니다.제발 도와주세요,,,, .
-
미해결데이터 분석 SQL Fundamentals
오류가 뜹니다..
postgresql설치 후에 연결을 하는데 비밀번호를 맞게 입력했는데도 FATAL: password authentication failed for user "postgres"이런 오류가 뜨는데 어떻게 해야할까요ㅜㅜ맥북 사용중입니다
-
해결됨Real MySQL 시즌 1 - Part 2
unique index가 걸린 상황에서 s-lock, x-lock 질문
안녕하세요?먼저 좋은 강의 감사합니다. 7:50쯤 unique 제약조건이 걸린 상황에서 deadlock이 발생하는 경우에 질문이 있어서 글 남깁니다. 말씀주신 시나리오는unique index가 걸린 컬럼이 delete가 수행되면서, 동시에 insert into 구문이 들어오는 상황으로 말씀주셨는데요. unique index는 s-lock을 꼭 필요로 한다면,delete가 선행되지 않는 상황에서도 deadlock이 발생해야되는거 아닌가? 싶습니다. 상상하는 예시는 다음과 같습니다.tx-1 : begin; insert into tab(pk) values(2) (index 2 또는 그 범위에 s-lock) tx-2 : begin; insert into tab(pk) values(2) (index 2 또는 그 범위에 s-lock)tx-1 : commit; -> index 2에 x-lock을 잡으려고 하지만 tx-2가 s-lock을 잡고 있어서 잡을 수 없음 하지만, 실제로 테스트 해보았을 때는tx-1이 commit시에 정상적으로 insert 되고, tx-2는 duplicated key 오류를 반환합니다. 왜 이런지 알 수 있을까요?감사합니다 😃 다시 한 번 생각해보니, tx-1은 pk=2 가 없기 때문에 insert 후 x-lock으로 전환하고, tx-2는 x-lock으로 인해 lock_wait인 것 같습니다. 혹시 맞을까요?delete 가 선행된 경우는 이미 있는 레코드에 tx-1,2가 s-lock이을 잡으면서 delete가 commit된 시점에 tx-1,2가 x-lock을 획득하려는데서 dead lock이 발생하는 것이고요