강사님 , 항상 답변 감사합니다 (__) having 절, group by 절에 상관 서브쿼리를 사용하지 않는게 좋다고 하셨습니다. 다시 생각을 해보니 WHERE 절에 상관 서브쿼리가 있다면 메인 쿼리에 로우 하나씩 상관 서브쿼리로 전달을 해서 상관 서브쿼리가 연산을 하는 것과 HAVING 절도 GROUP BY로 만들어진 결과를 로우 하나씩 상관 서브쿼리로 연산을 하는 것은 제가 생각하기에는 동일한 방식인거 같은데 having, group by 절에는 사용을 하지 말라고 하신지 궁금합니다.
안녕하세요 강사님의 강의에 큰 도움을 받고 있는 초보 SQL 유저입니다 문제를 풀다 궁금한 점이 생겼습니다 해당 문제의 경우 왼쪽이 customers (부모) 오른쪽 orders(자식) 관계인데 요구 조건 마다 다르겠지만 outer 조인 할 때, Null 쪽이 M 쪽을 넣는 것이 더 자주 사용될거 같은데 혹시 저의 생각이 맞을까요? 과거에 조인절이 많아져 행과 열이 늘어나면 쿼리 처리속도가 늘어난다는 얘기를 들었습니다 그래서 서브쿼리로만 풀 수 있는 쿼리는 조인문을 안 쓰는 것이 더 낫지 않나라 생각 드는데 혹시 맞을까요? -- 주문이 단 한번도 없는 고객 정보 구하기. select * from customers c left join orders o on (o.customer_id = c.customer_id) where o.customer_id is null select * from customers c where customer_id not in ( select customer_id from orders )
with temp_01 as ( select avg(sal) as emp_avg from emp ) select deptno ,avg(sal) from emp group by deptno having avg(sal) > (select emp_avg from temp_01); -- 전체 평균 급여보다 부서평균 급여가 높은 부서 번호를 출력하세요 having에서 조건을 비교하는 방식을 사용한다고 한다면 강사님께서는 having에 서브쿼리를 사용하게 되면 , 그 서브쿼리를 매번 실행하다보니 추천을 하지 않는다고 하셨는데 여기서 with로 임시 테이블을 지정하면 이미 재사용하기 편하기 위해서 temp_01로 만들어서 사용하면 임시 서브쿼리 테이블을 사용하니까 비상관 서브쿼리를 날리는 거보다 좀 더 나은 걸까요?
제가 작성한 SQL select * from nw.orders o where o.order_id in ( select max(order_id) from nw.orders a group by a.customer_id ); 강사님이 작성한 SQL select * from nw.orders where (customer_id, order_date) in (select customer_id, max(order_date) from nw.orders group by customer_id); 강사님 서브쿼리 강의 추가해주셔서 감사합니다. 제 기억에는 강사님께서 IN 연산자로 사용할 경우 세미 조인처럼 연결된다고 하셨던거 같은데 실행을 해보니까 조건이 하나 일때에는 세미 조인이지만 조건이 2개가 되니까 해쉬 조인으로 바뀌더라구요 그 이유가 궁금합니다.
안녕하세요. 개인 사정으로 강좌를 듣지 못하다가, 다시 들으려니, 도저히 기한네 (6/29) 마칠 자신이 없어 부득불 1달 정 도 연장을 부탁드렸으면 합니다. "SW 개발자를 위한 성능 좋은 SQL 쿼리 작성법" "SQL Server 컨설턴트가 알려주는, 쿼리 능력 레벨업(고급 T-SQL 쿼리)" 번거롭게 해드려서 죄송하다는 말씀과 함께, 부탁을 드립니다. 감사합니다.
with temp_01 as ( select b.category_id, b.category_name as category_name , percentile_disc(0.25) within group (order by unit_price) as qt_1 , percentile_disc(0.5) within group (order by unit_price) as qt_2 , percentile_disc(0.75) within group (order by unit_price) as qt_3 , percentile_disc(1.0) within group (order by unit_price) as qt_4 from nw.products a join nw.categories b on a.category_id = b.category_id group by b.category_id ) select * from temp_01; 2번 with temp_01 as ( select a.category_id, max(b.category_name) as category_name , percentile_disc(0.25) within group (order by unit_price) as qt_1 , percentile_disc(0.5) within group (order by unit_price) as qt_2 , percentile_disc(0.75) within group (order by unit_price) as qt_3 , percentile_disc(1.0) within group (order by unit_price) as qt_4 from nw.products a join nw.categories b on a.category_id = b.category_id group by a.category_id ) select * from temp_01; 2번은 강사님이 작성하신 코드입니다. 1번처럼 작성하지 않으시고 2번으로 작성하신 이유가 따로 있으신가요 ? 인덱스가 중복되는게 있으면 효율이 안좋아서 fk인 a.category를 사용하는게 더 좋아서 선택하신건지 아니면 1번이나 2번이나 둘다 큰 의미가 없는건지 궁금합니다.
데이터 분석을 위한 환경 구축 (업데이트) 4:27 data import 덤프기능을 사용하는 이유가 궁금합니다 이전에 배웠던대로 student.sql파일로 실행할때처럼 file->open sql.script->student.sql 이런 방식과 차이점이 어떤것인가요? 그리고 create database bestproducts; 를 하기 전 오류가 뜨는 이유와 치면 오류가 왜 사라지는지 궁금합니다
[연습] 실제 데이터 기반, 데이터베이스 직접 만들어보기1 11:55 데이터타입 varchar text 차이가 궁금합니다 ' 그리고 강의내에서 varchar의 경우 int와 달라서 auto_increment를 사용할수없다고 하셨는데 auto_increment는 숫자에만 가능해서 그런건가요?
select empno, ename, deptno, sal, avg(sal) over (partition by deptno) dept_avg_sal , sal - avg(sal) over (partition by deptno) dept_avg_sal_diff from hr.emp; 위 SQL은 강사님이 작성해주신 코드 입니다. with temp_01 as ( select empno ,ename ,sal as "개인 급여" ,avg(sal) over (partition by deptno) as "평균 급여" from emp ) select empno,ename,"개인 급여","평균 급여",abs("평균 급여"-"개인 급여") from temp_01; 밑에는 제가 답안지를 안보고 먼저 작성한 코드 입니다. 제가 처음에 첫번째 코드처럼 작성을 하려다가 이게 group by 처럼 부하가 좀 큰 작업이라고 생각이되었습니다. 그래서 한번만 사용하고 싶어서 임시테이블을 만들고 그 테이블의 컬럼끼리 계산을 하게 했는데 윈도우 함수를 한번 더 사용하는것과 서브쿼리로 한번만 호출하는 것 중에서 윈도우 함수를 한번 더 호출하는게 더 나은 선택이라면 그 이유가 궁금합니다. 만약에 서브 쿼리를 사용하는데 그 서브 쿼리에 함수를 사용한 컬럼이 있다면 그 컬럼을 호출할때마다 그 함수를 실행해서 그 결과를 가져오나요? 아니면 한번 서브쿼리를 실행하면 그 데이터가 저장되서 값만 가져오나요?
SQL로 테이블 변경하기 11:34 alter table에서 변경할 컬럼 타입을 넣을때 not null을 안써주면 원래 not null이었으면 null이어도 되는걸로 바뀌는 건가요? 이처럼 변경할 컬럼 타입에 원래 컬럼에 있던 타입에 관련된 것을 안써주면 리셋되는 건가요?