안녕하세요! 와랄라입니다.이번에 K크레딧이라고 내일 학습카드로 배울 수 있는 코딩수업 중 엑셀보다 쉬운 SQL이라는 수업을 들었습니다.처음에는 10%의 자기부담금이 있지만 수업을 마치면 환불이 된다고 합니다.0주차부터 4주차까지의 수업을 모두 수강하여 배운 문법을 정리해 보려고 합니다.(0주차는 인트로이기 때문에 문법은 배우지 않았기 때문에 건너뛰기로 합니다.) Deaver라는 프로그램을 사용하여 수업을 진행합니다.
첫째 주
우선 테이블이 무엇에서 필드는 무엇인지 배웁니다.테이블은 표에서 필드는 열에 대한 이름(?)입니다.데이터베이스를 연결한 뒤 show tables명령을 사용하면 데이터베이스에 저장된 테이블을 확인할 수 있습니다(여기에서는 구체적인 내용은 확인하지 못하고, 테이블 이름만 확인할 수 있습니다)소리에서 select문을 학습합니다.여기는 테이블의 구체적인 데이터를 확인합니다.select필드 이름 from테이블을 이렇게 작성하면 테이블에서 좋아하는 필드 이름만 골라서 취득할 수 있고 복수의 필드를 취득하고 싶은 경우는 콤마(,)에 접속하면 됩니다.만약 전체를 가져올에는, 필드 이름 대신*를 작성하세요.다음에 어떤 행을 취득할지에 대한 조건을 달where절을 배웁니다.where필드 이름(조건)에서 작성합니다.조건에는 등호와 함께 비교할 수 있는 값 및 문자열을 작성하세요.(편의상 등호와 작성했지만 등호가 아닌 것도 올 가능성이 있다)문자열은 따옴표로 묶는 것을 잊어서는 안 됩니다.만약 조건을 몇개 걸고 싶다면 AND여러개 중 어느 것이든 하나만 만족해도 좋으면 OR에서 조건을 붙여서 쓰면 됩니다.조건에 드는 것을 놓고 보면=( 같은)>(초과),<(미만)!=( 같지 않다)between A and Bin(포함)like(패턴)등이 있습니다.주의해야 할 점은 between을 사용할 때는 B에 대한 것은 포함되지 않기 때문에, A이상 B미만임을 기억하고 둘 필요가 있습니다.또 like를 쓸 때 쓰이는 기호가 많은데 대표적으로%라는 기호를 둘러보았습니다.%abc는 마지막에 abc이 와서 abc%는 처음에 abc이 와서%abc%는 abc가 들어 a%bc는 a로 시작되는 마지막으로 bc가 오는 데이터를 추출할 수 있습니다. 정말로 도움이 된 친구입니다.다음에 limit에 대해서 배웠습니다.Limit숫자로 사용하고 취득한 데이터의 개수를 결정할 수 있습니다.만약 데이터가 어떻게 됐는지 보고 싶은데 데이터가 지나치면 이를 이용하고 로드되는 시간이 훨씬 적게 확인할 수 있습니다.다음에 distinct에 대해서 배웁니다.select문에서 distinct(필드 이름) 이렇게 작성하시면 해당 필드에서 중복이 제거된 데이터를 확인할 수 있습니다.다음에 합계를 들 수 있다 카운팅에 대해서 학습합니다.count(필드 이름) 이렇게 사용합니다. 필드 이름 대신*를 사용해도 전체 데이터를 확인합니다.만약 count(distinct(필드 이름)로 쓴다면, 필드 이름의 종류 수에 대해서 알 수 있습니다.count는 NULL에 대해서는 꼽지 않게 주의해야 합니다”(드디어 1주째의 내용이 끝났습니다. 생각보다 너무 많다고 생각하는데 언제 다 쓰는데…?)2주째
이번 주차는 우선 group by에 대해서 배웁니다 group by필드 이름으로 작성합니다. 묶어 주려면 편합니다.그래서 통계를 내다 친구와 함께 사용됩니다.만약 select sur_name, count(*)from infogroup by sur_name 이렇게 하면 성씨별의 수를 셀 수 있습니다.분류별의 수를 세고자 할 경우 group by와 count를 이용하면 간단합니다.이 쿼리에서 실행 순서는 from→ group by→ select입니다. 다음에 order by에 대해서 학습합니다.order by필드 이름(desc/asc)에서 작성합니다.필드 이름을 기준으로 정렬하고 오름차순이 디 폴드 값입니다.괄호 안에 있는 것은 선택 사항이지만, 내림차순으로 정렬하고 싶으면 desc, asc는 오름차순입니다만 디폴트 값을 오름차순이므로 적어도 결과는 마찬가지입니다. 쓰고 싶으면 쓰면 됩니다.order by는 항상 실행 순서의 마지막입니다.count과 비슷한 통계 함수에 대해서 좀 더 학습하고 봅시다.min(최소치)avg(평균)max(최대값)sum(합계)등이 있습니다. 카테고리에 관한 통계를 내는 용도로 사용할 수 있습니다.만약 이 통계 함수 필드에 대해서 정렬하고 싶다면, order by통계 함수로서 작성하면 됩니다.만약 여기서 where에 조건을 걸면 실행 순서는 from→ where→ group by→ select→ orderby의 순으로 흐르는군요. 점점 쿼리가 복잡해지고 있습니다.마지막으로 별칭 alias에 대해서 배웁니다.이는 그렇게 어려운 일이 아니라 새로운 이름이라고 생각하면 간단합니다.만약 coount(*)개수를 세었다면 필드 이름이 count(*)이라고 생각합니다만 보기가 좋지 않아서 필드 이름 뒤에 as 새로운 이름으로 지어 주면 count(*)대신 새로운 이름을 필드 이름으로 설정할 수 있습니다.혹은, from절에서 select필드 이름 from테이블 명 별칭으로 작성하면 테이블 이름 대신에 별칭을 사용할 수 있습니다.이 별칭은 나중에 join을 사용할 때 사용합니다.3주째
드디어 3주째입니다.이번의 주차로는 join에 대해서 학습했습니다.join이라는 것은 그래도 표를 모으기입니다.join도 여러 종류가 많지만 여기 강의에서는 left와 inner join에 대해서 중점적으로 배웁니다.join은 왜 쓰나요?하나의 표에게 내가 원하는 정보가 모두 들어 있지 않아서 표를 모두 필요한 정보를 추출하기 위해서 사용합니다.처인은 이렇게 사용합니다.select필드 이름(or*)from테이블 이름 1 ainner join테이블 이름 2 bon a. 키 필드 이름=b. 키 필드 이름, 여기서 a와 b는 테이블 이름 1, 테이블 이름 2에 해당하는 별칭입니다.만약 여기서 에일리어싱을 사용하지 않으면 키 필드 이름 앞에 해당하는 테이블 이름을 작성할 필요가 있습니다.join을 하면서 각 테이블에 같은 필드 이름이 존재할 가능성이 있으므로, 필드 이름 앞에 “별칭”을 붙여서 사용하면 헷갈립니다.또 키 필드 이름은 중복된 데이터가 존재하지 않는 필드를 의미합니다.join의 때는 테이블에 같은 필드가 있어야 join을 할 수 있으니, 대개 키 필드 이름이 같습니다(left join을 하려면 inner대신 left만 작성하시면 됩니다.)join의 실행 순서는 거의 from뒤에 바로 있다고 말할 수 있습니다.A와 B를 left join 하면 A에 대한 내용은 모두 나오는데, B에 대한 내용은 A와 중복되는 내용만 뽑혀서 결과가 나옵니다.그래서 A와 B의 위치가 바뀌면 결과가 달라질 수 있습니다. B가 없는 부분은 null로 채워집니다.left join을 한다면 is NULL과 is not NULL을 사용하여 데이터를 구분할 수도 있습니다.A와 B를 inner join 하면 A와 B가 겹치는 내용만 뽑혀서 나옵니다.반올림하기 위한 round함수도 존재합니다. 사용법은 액셀과 같습니다.round(수, 자리)에서 사용합니다.자리 수는 자릿수=0→ 1의 자리 수까지 나온 자릿수 →-2→ 100의 자리 수까지 나온 자릿수=2=소수 점 이하 두 자리까지 나오기 때문에 상수로 이용하여 표현하면 됩니다.join은 아래로 죽 같은 문법을 쓰고 주면 몇번도 있습니다.마지막으로 union에 대해서 배웁니다 union은 단지 표 2개를 연결하는 것입니다.테이블 unionall테이블, 여기서 테이블 대신 쿼리 문구를 넣는 것도 있습니다. 쿼리 글을 쓰면 괄호 안은 필수입니다!그런데 union의 단점이 있습니다. order by문을 적용할 수 없습니다. 4주째
정말 이제 곧 나온다. 이번 주차에서는 서브 쿼리에 대해서 배웁니다.서브 쿼리는 쿼리 중의 쿼리는 뜻입니다. 그래도 쿼리 중에 새 쿼리를 작성하는 게 아닙니다.서브 쿼리는 where, select, from절에서 사용할 수 있습니다.where절에서는 이렇게 많이 사용합니다.where필드 이름 in(서브 쿼리)서브 쿼리에서 반영하는 필드 이름을 고르고 포함하고 검사를 하는 것입니다.select절에서는 이렇게 사용합니다.select필드 이름 필드 이름(서브 쿼리)from테이블 명 통계 데이터를 보는데 보통 사용합니다.이렇게 사용하면 해당 값에 대한 평균 최대치 등을 요구할 수 있습니다.from절에서는 이렇게 사용합니다(서브 쿼리가 가장 많이 이용되는 유형입니다).내가 만든 select문과 이미 있는 테이블을 join 하고 싶을 때 사용할 수 있습니다.select필드 이름 from하위 쿼리 ainner join서브 쿼리 bon a. 키 필드 이름=b. 키 필드 이름 서브 쿼리+서브 쿼리 테이블+서브 쿼리+테이블 모두 가능한 조합입니다.다음에 with절에 대해서 배웁니다.만약 서브 쿼리를 사용하면 불가피하게 코드가 길어지면서 가독성이 저하되죠?with절을 사용하면 더 쉽게 짤 수 있습니다.별칭과 비슷한 것이라고 생각하면 좋겠어요.with절은 쿼리 문 맨 앞에 써야 할 것을 잊어서는 안 됩니다.with앨리어스 1as서브 쿼리, 앨리어스 2as서브 쿼리를 사용합니다. 서브 쿼리는 괄호를 꼭 해야 합니다.with에서 작성한 경우 이 쿼리 문의 서브 쿼리 대신에 별칭을 사용할 수 있습니다(만약 with문을 사용해도 올바르게 동작하지 않는 경우는 ctrl+a를 눌러서 실행하고 보세요)소리에서 문자열을 끊을 수 substring_index와 substring입니다.substring_index(필드 이름,”글씨를 문자열 기준”(-1/1)에서 사용합니다. 필드에 대한 값을 기준으로 썰어 기준의 전에는 1나중에는-1에서 작성하시면 됩니다.가령 전자 메일의 도메인 값을 취득하고 싶은 경우에 사용할 수 있습니다.서브 string(필드 이름 시작 위치, 출력 하는 개수)에서 사용할 수 있습니다. 필드 값을 시작 위치에서 개수만 잘라서 표시할 수 있습니다.문자열의 시작은 가장임에 주의할 필요가 있습니다.마지막으로 case문입니다.select문의 한 필드로 사용할 수 있습니다.case when필드 이름>값 then표시하는 문자열 when필드 이름>값 then표시하는 문자열 else표시하는 문자열 endas표시하는 필드 이름으로 사용할 수 있습니다. C언어의 스위치문과 닮은 것 같아요.표시하는 필드 이름을 기준으로 group by을 하면 통계도 낼 수 있습니다.
겨우 정리가 끝났습니다. 사실 몇일까지 작성한 것이므로 시간이 얼마나 걸렸는지는 모르지만, 너무 오래 걸렸어요.. 힘들어요 www실은 sql에 관해서는 학교에서 실습은 하지 않았습니다만 배웠습니다(약 3년 전,,)하지만 제가 sql을 배우지 못 했습니다.쉽게 수강할 수 있다고 생각했다.역시 코딩은 이론보다는 실습이 재미 있는 것 같아…스파르타 코딩 클럽의 수업은 이번 처음 들었는데 수업도 처음부터 너무 어려운 진행하지 않고 단계별로 문제를 풀어 가는 실력이 그대가 오를 것 같지 재미 있었습니다.어려운 문제도 단계별로 세분화하고 가르치시는 것으로 처음 보았을 때는 내가 어떻게 이것을 할까? 하고 싶지만 어느새 하고 있는 자신을 찾을 수 있습니다.다음에도 여기 수업을 받아 보고 싶습니다.그럼 이만~