Một bài viết trong loạt bài viết về cách tạo một dự án Java (có liên kết đến các tài liệu khác ở cuối). Mục tiêu của nó là phân tích các công nghệ chủ chốt, kết quả là viết một bot điện tín. Các bài trước và phân tích bài tập về cơ sở dữ liệu: 1 , 2 , 3 . Gửi đến tất cả những người có sự kiên nhẫn và chịu đựng, gửi đến tất cả những người đã đồng hành cùng tôi trong bài viết thứ tư - làm tốt lắm. Người ta nói, người đi có thể làm chủ được con đường. Tuần này bài viết cuối cùng về Cơ sở dữ liệu sẽ được phát hành, trong đó chúng ta sẽ nói về các loại mối quan hệ và sự tham gia . Nhưng trước khi giải quyết những thông tin mới, chúng ta hãy kiểm tra bài tập về nhà... Tôi thực sự cảm thấy mình như một giáo viên. Đừng giận tôi: Tôi không có trình độ sư phạm, đó là điều chắc chắn. Vì tuần trước việc kiểm tra chi tiết chiếc điều khiển từ xa chiếm phần lớn tài liệu nên tôi quyết định chia phần phân tích bài tập về nhà và đánh giá tài liệu mới thành hai phần.
Sau đó, chúng ta chỉ cần sắp xếp truy vấn theo dân số và chỉ lấy một bản ghi. Để thực hiện việc này, bạn cần thêm toán tử LIMIT vào cuối tập lệnh và chỉ định số lượng được yêu cầu: $ SELECT * FROM country ORDER BY dân số DESC LIMIT 1;
Mọi thứ ở đây thú vị hơn, vì yêu cầu sẽ phức tạp hơn nhưng cũng thú vị hơn. Vì chúng tôi vẫn chưa biết về việc tham gia nên chúng tôi chỉ có thể lấy ID quốc gia: $ SELECT country_id, SUM(population) FROM city GROUP BY country_id ORDER BY SUM(population) DESC LIMIT 1; Ở đây, chúng tôi đã làm một điều thú vị - chúng tôi thu thập tổng dân số của tất cả các thành phố đã biết ở mỗi quốc gia, sắp xếp theo tổng này và lấy phần tử đầu tiên. Chà, nó có tuyệt không? Tôi rất vui :D Sau đó, bạn ngay lập tức cảm thấy mình như một bậc thầy về truy vấn... (tất nhiên là không lâu))
Trong trường hợp này, mọi thứ sẽ giống hệt nhau. Sự khác biệt duy nhất là việc sắp xếp sẽ bị đảo ngược - chỉ vậy thôi. Vì vậy, tôi chỉ đơn giản viết yêu cầu:
$ CHỌN country_id, SUM(dân số) TỪ thành phố NHÓM THEO quốc gia_id ĐẶT HÀNG THEO SUM(dân số) GIỚI HẠN 1;
$ CHỌN * TỪ quốc gia ĐẶT HÀNG THEO dân số GIỚI HẠN 1; Và hãy tự mình xem kết quả!
Ở đây một lần nữa, thông số kỹ thuật bằng cách nào đó không chính xác, như thể người quản lý đã viết nó... Tại sao tôi lại quyết định điều này? Bởi vì không rõ nên làm việc ở bảng nào. Nhưng điều này là bình thường: đơn giản là không có nhiệm vụ nào mà mọi thứ sẽ rõ ràng và dễ hiểu ngay lập tức. Vì vậy, bạn cần đọc kỹ đề bài, nếu có thắc mắc hãy hỏi ngay! Đúng vậy, một nhận xét. Có tính đến dữ liệu chúng tôi có trong cơ sở dữ liệu, chúng tôi sẽ tìm kiếm bằng dữ liệu từ các thành phố. Để thực hiện việc này, hãy viết truy vấn sau: $ SELECT country_id, AVG(population) FROM city GROUP BY country_id; Ở đây rất đơn giản: chúng tôi sử dụng chức năng AVG và nhóm các bản ghi thành phố theo quốc gia.
Sẽ có một chút thay đổi ở đây theo yêu cầu. Chúng ta cần thêm tính năng lọc theo tên trước khi nhóm. Tôi làm bài tập về nhà của mình, giống như tất cả học sinh, trước khi xuất bản bài viết này và tôi hiểu rằng vấn đề này không thể giải quyết được nếu không có sự tham gia. Tại sao? Bởi vì ngoài ID quốc gia, chúng ta còn cần biết tên của anh ấy. Và điều này không thể thực hiện được nếu không nối hai bảng thành một bản ghi. Vì vậy, tất nhiên tôi sẽ thực hiện nhiệm vụ này, nhưng đây là jamb của tôi...))) Tôi muốn nghĩ ra một nhiệm vụ bằng cách sử dụng THÍCH trong yêu cầu...) $ SELECT ci.country_id, AVG(ci.population ) TỪ thành phố ci INNER THAM GIA quốc gia co ON ci.country_id = co.id WHERE co.name THÍCH "%a" NHÓM THEO country_id; Chuyện gì đã xảy ra ở đây vậy? Đầu tiên, chúng tôi nối các bản ghi từ bảng thành phố và quốc gia bằng cách sử dụng khóa ngoại country_id, được lọc theo tên quốc gia để chúng kết thúc bằng “a” và chỉ sau đó được nhóm theo country_id.
Ở đây chúng ta chỉ cần sử dụng hàm COUNT và thêm tính năng lọc theo dân số: $ SELECT COUNT(*) from country WHERE dân số > 4000000; Kết quả chúng ta được biết có 3 quốc gia như vậy, điều này có đúng không? Đúng, chỉ có Moldova là không vượt qua được cột mốc này.
Để làm điều này, chúng ta cần sử dụng toán tử ORDER BY mà chúng ta đã biết. Nhưng hãy nhớ rằng theo mặc định việc sắp xếp theo thứ tự tự nhiên. Đối với số, điều này có nghĩa là nó được sắp xếp theo thứ tự tăng dần, đối với chuỗi, điều đó có nghĩa là nó được sắp xếp bắt đầu từ các ký tự đầu tiên. Nếu chúng ta cần sắp xếp giảm dần, chúng ta cần sắp xếp nghịch đảo với sắp xếp tự nhiên: $ SELECT * FROM country ORDER BY dân số DESC;
Đây là lúc kiến thức về trật tự tự nhiên sẽ có ích. Vì đây là mặc định nên đối với chúng tôi, đây là một miếng bánh dễ dàng: $ CHỌN * TỪ quốc gia ĐẶT HÀNG THEO tên;
Trên thực tế, phân tích bài tập về nhà
Tôi chắc chắn rất vui vì có những người làm PD và nói về nó. Điều này thật tuyệt! Tôi chắc chắn nhất có thể rằng chỉ đọc mà không củng cố kiến thức là con đường dẫn đến hư không. Vì vậy, tất cả những ai đã làm hoặc cố gắng làm - hãy tôn trọng. Hãy để tôi nhắc bạn các điều kiện của nhiệm vụ:- Hiểu toán tử HAVING và viết một truy vấn mẫu cho các bảng từ ví dụ của chúng tôi. Nếu bạn cần thêm một số trường hoặc nhiều giá trị để làm rõ hơn, hãy thêm chúng. Nếu có ai muốn, hãy viết giải pháp mẫu của bạn vào phần bình luận - để tôi cũng có thể kiểm tra nó nếu có thời gian.
- Cài đặt MySQL Workbench để làm việc với cơ sở dữ liệu thông qua giao diện người dùng. Tôi nghĩ chúng ta đã có đủ thời gian thực hành làm việc từ bảng điều khiển. Kết nối với cơ sở dữ liệu. Nếu bạn sử dụng cái gì khác để làm việc với cơ sở dữ liệu, vui lòng bỏ qua tác vụ này. Ở đây và hơn thế nữa tôi sẽ chỉ sử dụng MySQL Workbench.
- Viết yêu cầu nhận bằng cách sử dụng dữ liệu của chúng tôi:
- quốc gia nhỏ nhất/đông dân nhất;
- số dân trung bình trong cả nước;
- số dân trung bình ở các quốc gia có tên kết thúc bằng “a”;
- số quốc gia có dân số trên 4 triệu người;
- sắp xếp các quốc gia theo số lượng dân số giảm dần;
- sắp xếp các quốc gia theo tên theo thứ tự tự nhiên.
Hãy nói về việc CÓ
Biết toán tử Có có thể giúp bạn vượt qua nhiều cuộc phỏng vấn có vấn đề về SQL. Vì vậy, hiểu rõ nó là vô cùng quan trọng. Tình cờ là bạn không thể sử dụng các điều kiện cho các hàm tổng hợp (SUM, MIN, MAX, AVG). Ngoài ra, HAVING được sử dụng cho các trường được nhóm lại. Nó có nghĩa là gì? Ví dụ: nếu chúng ta muốn đến các quốc gia có số dân trung bình ở các thành phố là hơn 50.000 người, chúng ta không thể làm gì nếu không sử dụng HAVING. Theo tôi hiểu, điều này được thực hiện vì việc tổng hợp xảy ra sau khi câu lệnh WHERE được thực thi và không thể thêm các giá trị tổng hợp vào đó để tính toán sau. Ngay cả khi cho đến nay ý kiến của tôi không mang lại nhiều hiểu biết, bạn vẫn có thể chấp nhận điều này như một sự thật và làm theo nó. Trong lập trình, điều thường xảy ra là nếu có điều gì đó không rõ ràng tại một thời điểm, điều đó có thể có nghĩa là bộ não vẫn chưa tiếp thu được nó. Hãy ngủ với suy nghĩ này và ngày hôm sau mọi thứ sẽ trở nên rõ ràng hơn.Cài đặt bàn làm việc MySQL
Ở đây và hơn thế nữa tôi sẽ sử dụng Workbench cho các truy vấn. Tôi sẽ chỉ cho bạn những gì bạn cần cài đặt và tạo kết nối tới cơ sở dữ liệu. Đây là sản phẩm của Oracle nên bạn chỉ cần vào trang web của họ và chọn phiên bản cũng như hệ điều hành mà bạn muốn. Để thực hiện việc này, hãy theo liên kết sau : Tại đây bạn có thể chọn chính xác hệ điều hành mà mình cần. Nhấp vào Tải xuống , nhưng thay vì tải xuống, chúng ta sẽ thấy cửa sổ này: Đừng để bị lạc, chỉ cần tìm nút có tên Không, cảm ơn, chỉ cần bắt đầu tải xuống của tôi và quá trình tải xuống sẽ bắt đầu. Tại sao họ làm điều đó? Có lẽ, để có nhiều người đăng ký với họ hơn, điều này không quan trọng đối với chúng tôi. Sau khi tải xuống thành công, hãy chạy file cài đặt. Trên MacOS nó trông như thế này: Chỉ cần kéo biểu tượng là xong, quá trình cài đặt đã hoàn tất. Không khó như cài đặt MySQL phải không? Hoặc chúng ta đã quen và trở nên có kinh nghiệm hơn;) Phần thứ hai của nhiệm vụ này là thiết lập kết nối tới cơ sở dữ liệu của chúng ta. Điều gì là cần thiết cho việc này? Nhấp vào dấu cộng bên cạnh MySQL Connections: Trong cửa sổ hiện ra, nhập dữ liệu cần thiết:- Tên kết nối - tên kết nối của chúng tôi. Viết tên càng rõ ràng càng tốt để không gặp khó khăn gì trong việc nhận dạng sau này. Tôi đặt tên cho kết nối này là JRTB_DB ;
- Tên máy chủ - sẽ được đặt là 127.0.0.1 cục bộ (còn gọi là localhost). Trong trường hợp của chúng tôi, không cần thay đổi gì vì cơ sở dữ liệu đã được cài đặt trên máy tính, nhưng nếu cơ sở dữ liệu ở một nơi khác thì máy chủ (ip của máy mà cơ sở dữ liệu đang chạy) cần phải được thay đổi cho phù hợp;
- Tên người dùng - bạn cũng có thể chỉ định người dùng của mình nếu cần. Nếu bạn chưa thêm bất cứ điều gì vào khóa này, hãy giữ nguyên;
- Mật khẩu - nhấp vào Lưu trữ trong chuỗi khóa và đặt chính xác mật khẩu mà bạn đã đặt cho chính mình. Tôi để mọi thứ đơn giản - root .
GO TO FULL VERSION