JavaRush /Java Blog /Random-KO /우리는 데이터베이스와 SQL 언어를 분석합니다. (4부 - 숙제 확인하기) - "Java 프로젝트 A부...
Roman Beekeeper
레벨 35

우리는 데이터베이스와 SQL 언어를 분석합니다. (4부 - 숙제 확인하기) - "Java 프로젝트 A부터 Z까지"

Random-KO 그룹에 게시되었습니다
Java 프로젝트 생성에 관한 시리즈 기사입니다(다른 자료에 대한 링크는 끝에 있습니다). 그 목표는 핵심 기술을 분석하는 것이고, 그 결과는 텔레그램 봇을 작성하는 것입니다. 이전 기사 및 데이터베이스 숙제 분석: 1 , 2 , 3 . 인내와 인내심을 갖고 네 번째 기사를 위해 저와 함께 가신 모든 분들, 수고하셨습니다. 걷는 사람이 길을 마스터할 수 있다는 말이 있듯이. 이번 주에는 데이터베이스에 대한 마지막 기사가 공개될 예정이며, 여기서는 관계 및 조인 유형에 대해 설명합니다 . 그런데 새로운 정보를 다루기 전에 숙제를 확인해 볼까요... 정말 선생님이 된 기분이 들었습니다. 나에게 화내지 마세요. 저는 교육학적인 교육을 받은 적이 없습니다. 물론 그렇습니다. 지난 주부터 리모콘에 대한 자세한 확인이 자료의 가장 큰 부분을 차지했기 때문에 숙제 분석과 새 자료 검토를 두 부분으로 나누기로 결정했습니다."A부터 Z까지의 Java 프로젝트": 데이터베이스와 SQL 언어를 분석합니다.  4부 - 숙제 확인하기 - 1

사실 숙제분석은

PD를 하고 이야기를 나누는 분들이 있다는 게 확실히 기쁘다. 이것은 멋지다! 나는 지식을 통합하지 않고 단순히 읽는 것은 아무데도 갈 수 없는 길이라는 것을 가능한 한 확신합니다. 그러므로 행했거나 시도한 모든 사람은 존경합니다. 작업 조건을 상기시켜 드리겠습니다.
  1. HAVING 연산자를 이해 하고 예제의 테이블에 대한 예제 쿼리를 작성하세요. 좀 더 명확하게 하기 위해 일부 필드나 더 많은 값을 추가해야 하는 경우 해당 항목을 추가하세요. 원하는 사람이 있으면 댓글에 예제 솔루션을 적어주세요. 그러면 시간이 있으면 확인할 수도 있습니다.
  2. UI를 통해 데이터베이스를 사용하려면 MySQL Workbench를 설치하세요. 우리는 이미 콘솔에서 작업하는 연습을 충분히 했다고 생각합니다. 데이터베이스에 연결합니다. 데이터베이스 작업을 위해 다른 것을 사용하는 경우 이 작업을 건너뛰어도 됩니다. 여기서는 MySQL Workbench만 사용하겠습니다.
  3. 당사 데이터를 사용하여 영수증 요청을 작성합니다.
    1. 가장 작은/가장 인구가 많은 국가;
    2. 해당 국가의 평균 주민 수;
    3. 이름이 "a"로 끝나는 국가의 평균 주민 수;
    4. 인구가 400만 명이 넘는 국가의 수;
    5. 주민 수를 줄여 국가를 정렬합니다.
    6. 국가를 이름별로 자연순으로 정렬합니다.

HAVING에 대해 이야기해보자

Have 연산자를 알면 SQL 문제가 있는 인터뷰를 두 번 이상 통과하는 데 도움이 될 수 있습니다. 그러므로 그것을 이해하는 것이 매우 중요합니다. 함수 집계(SUM, MIN, MAX, AVG)에 대한 조건을 사용할 수 없는 경우가 있습니다. 또한 HAVING은 그룹화된 필드에 사용됩니다. 무슨 뜻이에요? 예를 들어, 도시의 평균 주민 수가 50,000명이 넘는 국가를 얻으려면 HAVING을 사용하지 않고는 불가능합니다. 제가 알기로는 WHERE 문이 실행된 후에 집계가 발생하고 나중에 계산할 집계 값을 여기에 추가하는 것이 불가능하기 때문에 이렇게 된 것으로 알고 있습니다. 지금까지 내 의견이 이해에 큰 도움이 되지 않더라도 이를 사실로 받아들이고 그대로 따르시면 됩니다. 프로그래밍에서는 어떤 순간에 뭔가가 불분명하다면 뇌가 아직 그것을 소화하지 못했다는 의미일 수 있는 경우가 종종 있습니다. 이 생각을 품고 자면 다음날 모든 것이 더 명확해질 것입니다.

MySQL 워크벤치 설치

여기서는 쿼리에 Workbench를 사용하겠습니다. 데이터베이스에 대한 연결을 설치하고 생성하는 데 필요한 것이 무엇인지 보여 드리겠습니다. 이는 Oracle의 제품이므로 해당 웹사이트로 이동하여 원하는 버전과 운영 체제를 선택하기만 하면 됩니다. 이렇게 하려면 다음 링크를 따르십시오 . "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 2여기에서 필요한 운영 체제를 정확하게 선택할 수 있습니다. 다운로드를 클릭하면 다운로드하는 대신 다음 창이 표시됩니다. "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 3당황하지 말고 No thanks, just start my download 버튼을 찾으세요 . 그러면 다운로드가 시작됩니다. 왜 그런 짓을 하는 걸까요? 아마도 더 많은 사람들이 등록하기 위해서는 이것이 우리에게 중요하지 않습니다. 다운로드 성공 후 설치 파일을 실행해 주세요. MacOS에서는 다음과 같습니다. "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 4아이콘을 드래그하기만 하면 설치가 완료됩니다. MySQL 자체를 설치하는 것만큼 어렵지는 않죠? 아니면 익숙해지고 경험이 더 많아졌습니다. ;) 이 작업의 두 번째 부분은 데이터베이스에 대한 연결을 설정하는 것입니다. 이를 위해 무엇이 필요합니까? MySQL 연결 옆에 있는 더하기 기호를 클릭합니다. "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 5나타나는 창에서 필요한 데이터를 입력합니다.
  • 연결 이름 - 연결의 이름입니다. 나중에 식별에 문제가 없도록 이름은 최대한 명확하게 작성하세요. 나는 이 연결에 JRTB_DB 라는 이름을 붙였습니다 .
  • 호스트 이름 - 이미 로컬 127.0.0.1 (localhost라고도 함) 로 설정되어 있습니다 . 우리의 경우에는 데이터베이스가 컴퓨터에 설치되어 있으므로 아무것도 변경할 필요가 없습니다. 그러나 데이터베이스가 다른 곳에 있으면 호스트(데이터베이스가 실행되는 머신의 IP)를 그에 따라 변경해야 합니다.
  • 사용자 이름 - 필요한 경우 사용자를 지정할 수도 있습니다. 이 키에 아무것도 추가하지 않은 경우 변경하지 않고 그대로 두십시오.
  • 비밀번호 - 키체인에 저장을 클릭 하고 자신이 설정한 비밀번호를 정확하게 설정하세요. 나는 모든 것을 단순하게 남겨 두었습니다 - 루트 .
연결이 작동하는지 확인하려면 연결 테스트를 클릭하세요 . "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 6모든 것이 올바르게 완료되면 결과는 오래 걸리지 않을 것입니다. "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 7이제 데이터베이스에 연결이 저장되어 있으므로 연결을 만들고 채울 필요가 없습니다. 매번 이름과 비밀번호로. 그리고 이 행복은 다음과 같습니다. "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 8새로 생성된 연결로 이동하여 요청 창을 봅니다. 모든 것이 올바른지 확인하기 위해 데이터베이스 목록을 확인하고 우리 데이터베이스로 이동하여 도시에 대한 모든 데이터를 얻으십시오. "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 9여기서 우리는 필요한 것에 대한 백지 위임장을 얻습니다. 첫 번째 섹션은 우리가 입력하는 스크립트를 담당합니다. 다음으로 결과 표 에서는 스크립트의 마지막 작업 결과를 볼 수 있습니다. 그리고 Action Output에는 작업 목록과 그 결과가 표시됩니다. 매우 유용한 점을 말씀드리고 싶습니다. 이 기능을 사용하면 특정 스크립트의 실행 속도를 모니터링할 수 있습니다. 왜 중요 함? 애플리케이션의 작업 실행 속도와 관련된 가장 일반적인 문제 중 하나는 데이터베이스의 쿼리 실행 속도입니다. 여기에서 빠르고 편리하게 직접 확인할 수 있습니다.

필요한 요청을 작성합니다

완료해야 할 요청이 7개밖에 없습니다. 가자!

  1. 가장 인구가 많은 국가를 찾으십시오. 여기에서 교활하게 가서 여러 경로를 택할 수 있습니다.

  • 국가 테이블에 따르면

그런 다음 쿼리를 모집단별로 정렬하고 레코드 하나만 가져오면 됩니다. 이렇게 하려면 스크립트 끝에 LIMIT 연산자를 추가 하고 필요한 수량을 지정해야 합니다. $ SELECT * FROM country ORDER BY Population DESC LIMIT 1;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 10

  • 도시 테이블에 따르면

요청이 더 복잡하지만 더 흥미로울 것이기 때문에 여기에서는 모든 것이 더 흥미로울 것입니다. 아직 조인에 대해 모르기 때문에 국가 ID만 얻을 수 있습니다. $ SELECT country_id, SUM(population) FROM city GROUP BY country_id ORDER BY SUM(population) DESC LIMIT 1; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 11여기에서 우리는 멋진 일을 했습니다. 각 국가의 알려진 모든 도시의 인구 합계를 수집하고 이 합계를 기준으로 정렬하고 첫 번째 요소를 가져왔습니다. 글쎄, 정말 좋은데? 기쁩니다 :D 이 작업을 마치면 즉시 쿼리 전문가가 된 듯한 느낌을 받게 됩니다... (물론 오래 걸리지는 않습니다)

  1. 가장 작은 나라를 얻으십시오. 여기서 교활하게 가서 여러 경로를 택할 수 있습니다

이 경우 모든 것이 정확히 동일합니다. 유일한 차이점은 정렬이 반대로 된다는 것입니다. 그게 전부입니다. 따라서 나는 단순히 요청을 작성합니다.

  • 도시 테이블에 따르면

$ SELECT country_id, SUM(인구) FROM city GROUP BY country_id ORDER BY SUM(인구) LIMIT 1;

  • 국가 테이블에 따르면

$ SELECT * 국가별 ORDER BY 인구 제한 1; 그리고 그 결과를 직접 확인해 보세요!

  1. 해당 국가의 평균 주민 수

여기서도 기술 사양이 어쩐지 정확하지 않습니다. 마치 관리자가 작성한 것처럼... 제가 이것을 결정한 이유는 무엇입니까? 어떤 테이블에서 작업할지 명확하지 않기 때문입니다. 그러나 이것은 정상적인 현상입니다. 모든 것이 즉시 명확하고 이해 가능한 작업은 없습니다. 그러므로 과제를 잘 읽어보시고, 궁금한 점이 있으면 바로 물어보세요! 맞습니다, 발언입니다. 데이터베이스에 있는 데이터를 고려하여 도시의 데이터를 사용하여 검색합니다. 이를 수행하려면 다음 쿼리를 작성하십시오. $ SELECT country_id, AVG(population) FROM city GROUP BY country_id; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 12여기서는 간단합니다. AVG 기능을 사용하여 도시 기록을 국가별로 그룹화합니다.

  1. 이름이 "a"로 끝나는 국가의 평균 주민 수

요청 시 약간의 변경이 있을 수 있습니다. 그룹화하기 전에 이름별로 필터링을 추가해야 합니다. 나는 모든 학생들과 마찬가지로 이 기사를 게시하기 전에 숙제를 하고 조인 없이는 이 문제를 해결할 수 없다는 것을 이해합니다. 왜? 왜냐하면 국가 ID 외에도 그의 이름도 알아야 하기 때문입니다. 그리고 두 테이블을 하나의 레코드로 결합하지 않으면 이 작업을 수행할 수 없습니다. 그러므로 당연히 이 작업을 수행하겠지만 이것이 내 작업입니다...))) 요청에서 LIKE를 사용하여 작업을 만들고 싶었습니다...) $ SELECT ci.country_id, AVG(ci.population ) FROM city ci INNER JOIN country co ON ci.country_id = co.id WHERE co.name LIKE "%a" GROUP BY country_id; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 13여기 뭔 일 있었 니? 먼저, 외래 키 country_id를 사용하여 도시 및 국가 테이블의 레코드를 결합하고, 국가 이름으로 필터링하여 "a"로 끝나도록 한 다음 country_id별로 그룹화했습니다.

  1. 인구가 400만 명 이상인 국가 수

여기서는 COUNT 함수를 사용하고 인구에 대한 필터링을 추가하면 됩니다. $ SELECT COUNT(*) from country WHERE 인구 > 4000000; 그 결과 그러한 국가가 3개 있다는 것을 알게 되었는데, 이것이 맞습니까? 예, 오직 몰도바만이 이 이정표를 통과하지 못했습니다.

  1. 주민 수를 줄여 국가 정렬

이를 위해서는 우리가 이미 알고 있는 ORDER BY 연산자를 사용해야 합니다. 그러나 기본적으로 정렬은 자연스러운 순서라는 점을 명심하세요. 숫자의 경우 오름차순으로 정렬된다는 의미이고, 문자열의 경우 첫 번째 문자부터 정렬된다는 의미입니다. 내림차순 정렬이 필요한 경우 자연 정렬의 역순이 필요합니다. $ SELECT * FROM country ORDER BY 인구 DESC;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 14

  1. 국가를 이름별로 자연순으로 정렬

이것이 자연의 질서가 무엇인지에 대한 지식이 도움이 될 곳입니다. 이것이 기본값이므로 매우 쉽습니다. $ SELECT * FROM country ORDER BY name;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 15

출력 대신

숙제 솔루션의 크기가 매우 클 경우가 있으므로 예외를 두겠습니다. 이 기사는 수표로 게시하고 금요일에는 연결 및 조인이 포함된 새 자료를 게시할 예정입니다. 읽어주신 모든 분들께 감사드립니다. 금요일까지!

시리즈의 모든 자료 목록은 이 기사의 시작 부분에 있습니다.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION