소개
현) 디프렌즈 대표
현) 마이크로소프트 공인 강사
전) 마이크로소프트 데이터플랫폼 MVP
전) 씨퀄로 수석 컨설턴트
전) 웹타임교육센터 전임강사
전) 푸르덴셜생명보험 정보시스템 책임
[강의분야]
데이터베이스 개발자, 운영자 과정
데이터베이스 쿼리 튜닝 및 최적화 과정
파이썬, 데이터 전처리, 시각화 과정
파이썬 기반 데이터 분석, 머신러닝 과정
[저서]
디비로 누리는 특별한 세상, SQL Server 개발편
디비로 누리는 특별한 세상, SQL Server 운영편
이장래와 함께하는 SQL Server 운영과 개발 등
강의
수강평
- 장래쌤과 함께하는 쉽고 재미있는 SQL Server 운영 이야기(기본편)
- 장래쌤과 함께하는 쉽고 재미있는 SQL Server 운영 이야기(기본편)
- 장래쌤과 함께하는 쉽고 재미있는 SQL Server 운영 이야기(기본편)
- 장래쌤과 함께하는 쉽고 재미있는 SQL 이야기
게시글
질문&답변
insert into 구문
안녕하세요?캡쳐해서 보여주시는 구문에는 문제가 없어 보입니다. 그리고 하단의 결과는 보여주신 구문의 결과라고 보기 힘듭니다.예전에 작성한 구문의 결과인 것 같아요. 위 구문, 즉 retired_employee 테이블 삭제 구문부터 하나씩 다시 실행해 보시면 좋을 것 같습니다. 그래도 안되시면 다시 질문해 주세요. 그리고 예전 질문에 대한 답변을 했는데 해결 여부가 체크되지 않았네요. 제 답변으로 문제가 해결되었으면 질문 상태를 바꿔주시면 감사하겠습니다. 감사합니다.
- 0
- 2
- 41
질문&답변
PDF 자료 문의
안녕하세요?PPT가 강의 진행용으로 준비가 된 것이라 따로 공부하기에 충분한 내용이 아닙니다. 그래도 혹시 필요하시다면 jangrae@gmail.com으로 메일 보시면 보내드릴게요. 강의 내용 중에 궁금한 것 있으면 언제든 문의해 주시기 바랍니다.문의해 주셔서 감사합니다~
- 0
- 2
- 40
질문&답변
집계 연산자에 대한 질문
안녕하세요?and와 or는 where절에서 여러 조건을 연결할 때 사용합니다. select절에서는 보고싶은 것을 콤마로 구분해 나열하면 됩니다. 이것은 정해진 구문 규칙이므로 꼭 따라야 합니다.이해 안되는 부분 있으면 다시 질문해 주세요.질문해주셔서 감사합니다.
- 0
- 1
- 29
질문&답변
array_agg 배열 해제
안녕하세요?콤마로 구문된 값을 갖는 데이터에서 값들을 분리하는 방법을 문의한 것으로 이해했습니다.아쉽게도 MySQL에는 이러한 기능을 갖는 함수가 아직 없습니다.다른 DBMS에서는 쉽게 할 수 있는데, MySQL은 그렇지 않습니다.이 기능을 구현하는 몇 가지 방법이 있는데,그 중에서 JSON_TABLE을 사용하는 방법으로 예제를 만들어봤습니다.아래 내용을 참고하시면 좋겠습니다.-- 데이터 만들기 DROP TABLE IF EXISTS T1; CREATE TABLE T1 ( col1 int, col2 varchar(100) ); INSERT INTO T1 VALUES (1, 'A,B,C,D,E,F,G'); -- 추출하기 SELECT js.value AS splited FROM t1, JSON_TABLE(CONCAT('["', REPLACE(t1.col2, ',', '","'), '"]'), "$[*]" COLUMNS (value VARCHAR(10) PATH "$")) AS js; /* splited -------- A B C D E F G */질문해 주셔서 감사합니다.
- 0
- 2
- 46
질문&답변
null 수강 관련 문의
안녕하세요?NULL 값은 IS NULL, IS NOT NULL로 비교하지만, 일반적인 값을 비교할 때는 IS 가 아닌 = 연산자를 사용해야 합니다. 그러므로 다음과 같이 gender = 'F' 형태로 수정해야 합니다.SELECT emp_name, emp_id, gender, dept_id, hire_date, COALESCE(salary, 0) AS salary FROM employee WHERE retire_date IS NULL AND gender = 'F';질문해 주셔서 감사합니다~
- 0
- 1
- 27
질문&답변
테이블 생성 후 조건 수정 방법
안녕하세요?우선 테이블은 물리적으로 데이터를 가지고 있는 존재입니다. 이 테이블의 데이터를 수정하려면 UPDATE 문, 추가하려면 INSERT 문, 삭제하려면 DELETE 문을 사용합니다. 물론 조회할 때는 SELECT 문을 사용합니다. 뷰는 데이터를 가지고 있지 않습니다. 뷰를 만들 때 포함된 쿼리문을 가지고 있으며, 뷰가 SELECT 문으로 조회될 때 그 쿼리가 수행되어 테이블에서 데이터를 가져와 보여주는 것입니다. 그러므로 뷰는 항상 최신 데이터를 보여주게 됩니다. 테이블과 뷰는 SELECT 대상이 된다는 것은 같지만, 테이블은 물리적으로 데이터를 가지고 있고, 뷰는 데이터가 아닌 쿼리문을 가지고 있다는 것이 가장 큰 차이입니다. 예를 들어, 직원 테이블에 직원 정보가 있는데, 이 직원 정보 중에서 퇴사한 직원만 조회하고 싶다고 가정해 봐요. 그럼 퇴사자를 조회하는 SELECT 문을 작성해야 하겠죠? 이 상황에서 퇴사자를 조회하는 SELECT 문을 뷰로 정의한다면, 이후 부터는 그 뷰만 조회하면 퇴사자 정보를 조회할 수 있습니다. 뷰를 조회할 때마다 퇴사자를 조회하는 SELECT 문이 수행되어, 테이블에서 퇴사자 정보만 가져와 보여줄 것이기 때문입니다. 이해가 되셨으면 좋겠네요. 즐거운 추석 연휴 보내시길 바랍니다~
- 0
- 2
- 84
질문&답변
주차별 데이터에서 전 주 데이터 가져오기
안녕하세요?우선, 상당히 많은 쿼리문을 질문하시는 데, 어떤 상황에서의 질문인지 궁금합니다.혹시 제가 질문하시는 분이 더 깊이 생각해 볼 기회를 빼앗는 것은 아닌지,너무 쉽게 답을 찾게 하는 것은 아닌지 염려가 됩니다.제 강의의 일부만 보신 것 같아 더욱 염려가 됩니다. 질문하신 내용에 대해 제가 이해하는 수준에서 예제를 만들어 봤습니다.오늘의 주차에서 1을 뺀 주차를 갖는 행을 찾는 WHERE 절을 사용했습니다.아래 내용을 참고하시기 바랍니다.DROP TABLE IF EXISTS test; -- 테이블 만들기 CREATE TABLE test ( week int, date date, val char(1) ); -- 데이터 추가 INSERT INTO test VALUES(32, '2024-08-08', 'A'), (32, '2024-08-09', 'A'), (33, '2024-08-12', 'B'), (33, '2024-08-13', 'C'); -- 조회 SELECT * FROM test WHERE WEEK(date) = WEEK(CURRENT_DATE) - 1; /* week date val ------------------- 32 2024-08-08 A 32 2024-08-09 A */감사합니다.
- 0
- 1
- 61
질문&답변
여러 컬럼 중 null값이 아닌 값 가져오기
안녕하세요?질문해 주셔서 감사합니다~간단하게 아래와 같이 예제를 만들어 봤습니다.COALESCE() 함수를 사용하면 됩니다.참고하시기 바랍니다.-- 테이블 만들기 CREATE TABLE Test ( name varchar(10), val01 int, val02 int, val03 int, val04 int, val05 int, val06 int, val07 int, val08 int, val09 int ); -- 데이터 추가 INSERT INTO Test VALUES('A', 10, 20, 30, NULL, 50, NULL, NULL, NULL, 90); -- 조회 SELECT name, val01, COALESCE(val02, val01) AS val02, COALESCE(val03, val02, val01) AS val03, COALESCE(val04, val03, val02, val01) AS val04, COALESCE(val05, val04, val03, val02, val01) AS val05, COALESCE(val06, val05, val04, val03, val02, val01) AS val06, COALESCE(val07, val06, val05, val04, val03, val02, val01) AS val07, COALESCE(val08, val07, val06, val05, val04, val03, val02, val01) AS val08, COALESCE(val09, val08, val07, val06, val05, val04, val03, val02, val01) AS val09 FROM Test; /* name val01 val02 val03 val04 val05 val06 val07 val08 val09 ----------------------------------------------------------------------------- A 10 20 30 30 50 50 50 50 90 */감사합니다~
- 0
- 1
- 148
질문&답변
누적 백분위 구하기 질문
안녕하세요?어려운 쿼리문을 작성하고 계시네요^^우선 제가 이해한 수준에서 답변 드립니다.먼저 다음과 같이 예제 데이터를 만들었습니다.CREATE TABLE Test ( col1 varchar(10), col2 int ); INSERT INTO test VALUES('A', 10); INSERT INTO test VALUES('B', 20); INSERT INTO test VALUES('C', 30); INSERT INTO test VALUES('D', 40); INSERT INTO test VALUES('E', 50);이 데이터에 대해 다음과 같은 방법으로 누적합(sum1), 전체합(sum2), 비율(pcnt)를 구할 수 있습니다.SELECT col1, col2, SUM(col2) OVER(ORDER BY col1) AS sum1, SUM(col2) OVER() AS sum2, SUM(col2) OVER(ORDER BY col1) * 100 / SUM(col2) OVER() AS pcnt FROM test; /* col1 col2 sum1 sum2 pcnt ------------------------------------ A 10 10 150 6 B 20 30 150 20 C 30 60 150 40 D 40 100 150 66 E 50 150 150 100 */그럼 이 테이터를 서브쿼리로 해서, pcnt 값을 비교해 원하는 것을 얻을 수 있습니다. 10%, 20%, 30%, 100%만 확인해 본 쿼리와 결과는 다음과 같습니다.-- 10% SELECT col1 FROM ( SELECT col1, col2, SUM(col2) OVER(ORDER BY col1) AS sum1, SUM(col2) OVER() AS sum2, SUM(col2) OVER(ORDER BY col1) * 100 / SUM(col2) OVER() AS pcnt FROM test ) AS t WHERE pcnt 이러한 것을 원하신 건지 모르겠네요.위 쿼리문 참고하시고, 혹시 해결이 안되는 부분 있으면 다시 질문해 주세요.질문해 주셔서 감사합니다~
- 0
- 1
- 236
질문&답변
MSSM 접속 오류입니다.
안녕하세요?원인을 알기에 가장 중요한 부분을 가리셔서 질문 내용만 가지고는 현재 상황을 할 수 없습니다. 다른 PC(또는 다른 서버)에 설치된 SQL Server에 연결하시려고 하나요? 아니면 로컬 PC에 SQL Server를 설치한 후 연결하려고 하는 건가요? 방화벽을 언급하신 것을 보면 다른 PC에 연결하려는 것으로 보이기도 하는데, 이 부분부터 알려주시면 좋겠습니다. 올려주신 화면에서 연결하려는 컴퓨터 이름 부분과 계정의 컴퓨터 이름 부분만 보여도 어떤 상황인 지 알 수 있을텐데, 그렇지 못해 문의드립니다.
- 0
- 1
- 208