- Tổng số câu hỏi: 175
- Loại câu hỏi: SELECT
- Độ khó: EASY
Hi! Mình rất vui khi được đóng góp một chút gì đó để hỗ trợ mọi người trong việc học tập và làm quen với SQL! 😊 Hãy cứ coi đây như một sân chơi để thử nghiệm, sai cũng không sao, miễn là chúng ta rút ra được kinh nghiệm và học hỏi thêm mỗi ngày.
Hôm nay chúng ta sẽ khám phá bảng learnsql – nơi chứa tất cả những hướng dẫn hay ho giúp bạn làm quen với LearnSQL nhé 😊
Nhiệm vụ của bạn: lấy ra hướng dẫn từ bảng learnsql :>
Chúc mọi người học tập vui vẻ và tự tin chinh phục SQL! Đừng quên để lại comment, góp ý tại mục bình luận để mình cùng trao đổi phát triển nha! 💪✨
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bảng: Logs
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | num | varchar | +-------------+---------+
Trong SQL, id là khóa chính của bảng này.
id là cột tự tăng (auto increment).
Nhiệm vụ:
Tìm tất cả các số xuất hiện ít nhất ba lần liên tiếp.
Trả về bảng kết quả theo thứ tự tăng dần các số.
Ví dụ:
Input: Logs table:
+----+-----+ | id | num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+
Output:
+-----------------+ | ConsecutiveNums | +-----------------+ | 1 | +-----------------+
Giải thích:
- Số 1 xuất hiện liên tiếp ít nhất 3 lần (id 1, 2, 3).
- Các số khác không thỏa mãn điều kiện xuất hiện liên tiếp ít nhất 3 lần.
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bảng: World
- name là khóa chính (cột có giá trị duy nhất) của bảng này.
- Mỗi hàng trong bảng cung cấp thông tin về tên quốc gia, châu lục, diện tích, dân số, và GDP của quốc gia đó.
Điều kiện:
Một quốc gia được coi là lớn nếu:
- Quốc gia đó có diện tích ít nhất 3 triệu km² (tức là area >= 3000000), hoặc
- Quốc gia đó có dân số ít nhất 25 triệu người (tức là population >= 25000000).
Nhiệm vụ:
Viết một giải pháp để tìm tên (name), dân số (population), và diện tích (area) của các quốc gia lớn.
Trả về bảng kết quả với thứ tự bất kỳ.
Đầu vào:
Bảng World:
Đầu ra:
Giải thích:
- Afghanistan: Dân số là 25,500,100 người (>= 25 triệu), thỏa mãn điều kiện.
- Algeria: Dân số là 37,100,000 người và diện tích là 2,381,741 km², thỏa mãn điều kiện.
- Các quốc gia khác không thỏa mãn bất kỳ điều kiện nào.
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bảng: Employees
- id là khóa chính của bảng này.
- Mỗi hàng trong bảng chứa id và tên (name) của một nhân viên trong công ty.
Bảng: EmployeeUNI
- (id, unique_id) là khóa chính (tổ hợp các cột có giá trị duy nhất).
- Mỗi hàng trong bảng chứa id và unique_id tương ứng của nhân viên trong công ty.
Nhiệm vụ:
Viết một giải pháp để hiển thị unique_id của mỗi nhân viên. Nếu một nhân viên không có unique_id, hiển thị null.
Trả về bảng kết quả với thứ tự bất kỳ.
Đầu vào:
Bảng Employees:
Bảng EmployeeUNI:
Đầu ra:
Giải thích:
- Alice và Bob không có unique_id, nên hiển thị null.
- Meir có unique_id là 2.
- Winston có unique_id là 3.
- Jonathan có unique_id là 1.
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bảng: Activity
- (machine_id, process_id, activity_type) là khóa chính (tổ hợp các cột có giá trị duy nhất) của bảng này.
- machine_id là ID của máy.
- process_id là ID của một tiến trình chạy trên máy có machine_id.
- activity_type là kiểu ENUM với các giá trị ('start', 'end'):
- 'start' nghĩa là máy bắt đầu tiến trình tại thời điểm timestamp.
- 'end' nghĩa là máy kết thúc tiến trình tại thời điểm timestamp.
- timestamp là giá trị thời gian (float) đại diện cho thời gian hiện tại tính bằng giây.
Yêu cầu:
Có một trang web của nhà máy có nhiều máy, mỗi máy chạy cùng số lượng tiến trình. Viết một giải pháp để tìm thời gian trung bình mà mỗi máy thực hiện một tiến trình.
- Thời gian hoàn thành một tiến trình được tính bằng:
- timestamp của 'end' - timestamp của 'start'.
- Thời gian trung bình được tính bằng tổng thời gian hoàn thành của tất cả các tiến trình trên máy chia cho số lượng tiến trình được chạy.
Bảng kết quả nên chứa machine_id cùng với thời gian trung bình (processing_time), làm tròn đến 3 chữ số thập phân.
Đầu vào:
Bảng Activity:
Đầu ra:
Giải thích:
Có 3 máy, mỗi máy chạy 2 tiến trình.
- Máy 0:
- Tiến trình 0: (1.520 - 0.712) = 0.808.
- Tiến trình 1: (4.120 - 3.140) = 0.980.
- Thời gian trung bình: (0.808 + 0.980) / 2 = 0.894.
- Máy 1:
- Tiến trình 0: (1.550 - 0.550) = 1.000.
- Tiến trình 1: (1.420 - 0.430) = 0.990.
- Thời gian trung bình: (1.000 + 0.990) / 2 = 0.995.
- Máy 2:
- Tiến trình 0: (4.512 - 4.100) = 0.412.
- Tiến trình 1: (5.000 - 2.500) = 2.500.
- Thời gian trung bình: (0.412 + 2.500) / 2 = 1.456.
- Loại câu hỏi: DELETE
- Độ khó: EASY
Table: Person
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| email | varchar |
+-------------+---------+
id is the primary key (column with unique values) for this table.
Each row of this table contains an email. The emails will not contain uppercase letters.
Write a solution to delete all duplicate emails, keeping only one unique email with the smallest id.
For SQL users, please note that you are supposed to write a DELETE statement and not a SELECT one.
For Pandas users, please note that you are supposed to modify Person in place.
After running your script, the answer shown is the Person table. The driver will first compile and run your piece of code and then show the Person table. The final order of the Person table does not matter.
The result format is in the following example.
Example 1:
Input:
Person table:
+----+------------------+
| id | email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
+----+------------------+
Output:
+----+------------------+
| id | email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
+----+------------------+
Explanation: john@example.com is repeated two times. We keep the row with the smallest Id = 1.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Table: Customer
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | | referee_id | int | +-------------+---------+
In SQL, id is the primary key column for this table.
Each row of this table indicates the id of a customer, their name, and the id of the customer who referred them.
Find the names of the customer that are not referred by the customer with id = 2.
Return the result table in any order.
The result format is in the following example.
Example 1:
Input:
Customer table:
+----+------+------------+ | id | name | referee_id | +----+------+------------+ | 1 | Will | null | | 2 | Jane | null | | 3 | Alex | 2 | | 4 | Bill | null | | 5 | Zack | 1 | | 6 | Mark | 2 | +----+------+------------+
Output:
+------+ | name | +------+ | Will | | Jane | | Bill | | Zack | +------+
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bảng: Products
- product_id là khóa chính (cột chứa các giá trị duy nhất) của bảng này.
- low_fats là kiểu ENUM với các giá trị ('Y', 'N'), trong đó 'Y' nghĩa là sản phẩm ít béo và 'N' nghĩa là không ít béo.
- recyclable là kiểu ENUM với các giá trị ('Y', 'N'), trong đó 'Y' nghĩa là sản phẩm có thể tái chế và 'N' nghĩa là không thể tái chế.
Nhiệm vụ:
Viết một giải pháp để tìm các ID của sản phẩm vừa ít béo vừa có thể tái chế. Trả về bảng kết quả với thứ tự bất kỳ.
Đầu vào:
Bảng Products:
Đầu ra:
Giải thích:
Chỉ có các sản phẩm với ID là 1 và 3 thỏa mãn điều kiện vừa ít béo (low_fats = 'Y') vừa có thể tái chế (recyclable = 'Y').
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bảng: Cinema
- id là khóa chính của bảng này (cột có giá trị duy nhất).
- Mỗi hàng chứa thông tin về tên phim (movie), thể loại (description), và đánh giá (rating).
- rating là số thập phân với 2 chữ số sau dấu phẩy, trong khoảng [0, 10].
Yêu cầu:
Viết một giải pháp để liệt kê các phim có ID là số lẻ và có mô tả (description) không phải là "boring".
Trả về bảng kết quả được sắp xếp theo rating giảm dần.
Đầu vào:
Bảng Cinema:
Đầu ra:
Giải thích:
- Các phim có ID là số lẻ: 1, 3, 5.
- Trong số đó, phim có ID = 3 có mô tả là "boring", nên không được bao gồm trong kết quả.
- Phim được sắp xếp theo rating giảm dần, vì vậy thứ tự là:
- House card (ID = 5) có rating = 9.1.
- War (ID = 1) có rating = 8.9.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bảng: Weather
- id là cột có giá trị duy nhất trong bảng này.
- Không có hai hàng nào có cùng giá trị recordDate.
- Bảng chứa thông tin về nhiệt độ (temperature) vào một ngày cụ thể (recordDate).
Yêu cầu:
Viết một giải pháp để tìm tất cả các id của các ngày có nhiệt độ cao hơn so với ngày trước đó (hôm qua).
Trả về bảng kết quả với thứ tự bất kỳ.
Đầu vào:
Bảng Weather:
Đầu ra:
Giải thích:
- Ngày 2015-01-02 (ID = 2): Nhiệt độ 25 cao hơn ngày trước đó (2015-01-01, nhiệt độ = 10).
- Ngày 2015-01-04 (ID = 4): Nhiệt độ 30 cao hơn ngày trước đó (2015-01-03, nhiệt độ = 20).
- Ngày 2015-01-03 (ID = 3): Nhiệt độ 20 không cao hơn ngày trước đó (2015-01-02, nhiệt độ = 25).
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Liệt kê 2 khóa học theo họ giảng viên (sắp xếp theo lname giảm dần)
Ví dụ output
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
Hãy viết truy vấn SQL để liệt kê tất cả các khóa học đang được giảng dạy (mở lớp) bởi các giảng viên. Mỗi khóa học cần hiển thị:
title
------------------------------------------
Machine Organization and Assembly Language
Introduction to Operating Systems
Introduction to Computer Communication Net
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
Liệt kê 2 khóa học theo tên giảng viên (sắp xếp theo tên tăng dần)
Ví dụ output
+----------+------+--------+-------------------------------------------------+ | username | dept | number | title | +----------+------+--------+-------------------------------------------------+ | djw | CSE | 461 | Introduction to Computer Communication Networks | | levy | CSE | 451 | Introduction to Operating Systems | +----------+------+--------+-------------------------------------------------+
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
Chứa thông tin về các khóa học.
Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
Chứa thông tin về giảng viên.
Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
Chứa thông tin về việc giảng viên dạy khóa học nào.
Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
Tìm
-- Tên (firstname) của Instructor có tên đăng nhập (login) là 'zahorjan'?
fname
----------
John
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Các khóa học cấp độ 400 (4xx) của CSE đang mở là gì?
dept number title
---------- ---------- ---------------------------------
CSE 451 Introduction to Operating Systems
CSE 461 Introduction to Computer Communic
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Những lớp nào đang dạy bởi levy hoặc djw?
username dept number
---------- ---------- ----------
djw CSE 461
levy CSE 451
- Loại câu hỏi: CREATE
- Độ khó: EASY
Bạn được giao nhiệm vụ quản lý thông tin về sản phẩm trong một cửa hàng bán lẻ. Hãy tạo một bảng để lưu trữ thông tin chi tiết về sản phẩm. Bạn cần tạo bảng products với các yêu cầu sau:
- Tên bảng: products
- Các cột:
- product_id: ID của sản phẩm (kiểu INT, tự động tăng và là khóa chính).
- product_name: Tên của sản phẩm (kiểu VARCHAR(255), không được để trống).
- category: Danh mục của sản phẩm (kiểu VARCHAR(100)).
- price: Giá của sản phẩm (kiểu DECIMAL(10, 2)).
- stock_quantity: Số lượng sản phẩm còn trong kho (kiểu INT).
- created_at: Ngày sản phẩm được thêm vào (kiểu TIMESTAMP, mặc định là thời gian hiện tại).
- Tạo bảng này trong cơ sở dữ liệu để tạo bảng products theo yêu cầu trên.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Những khóa học nào có tên bắt đầu bằng "Introduction"?
dept number title
---------- ---------- ---------------------------------
CSE 451 Introduction to Operating Systems
CSE 461 Introduction to Computer Communic
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Nếu gõ nhầm Introduction thành INtroduction, làm thế nào để vẫn ra kết quả đúng?
dept number title
---------- ---------- ---------------------------------
CSE 451 Introduction to Operating Systems
CSE 461 Introduction to Computer Communic
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Hiển thị tên khóa học và độ dài của nó
title LENGTH
------------------------------------------ -------------
Machine Organization and Assembly Language 42
Introduction to Operating Systems 33
Introduction to Computer Communication Net 47
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Cắt tên các khóa học về còn 12 ký tự
dept number short_title
---------- ---------- ------------
CSE 378 Machine Orga
CSE 451 Introduction
CSE 461 Introduction
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Những instructors nào bắt đầu dạy trước 1990?
username fname lname started_on
---------- ---------- ---------- ----------
zahorjan John Zahorjan 1985-01-01
levy Hank Levy 1988-04-01
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Những instructors nào bắt đầu dạy trước thời điểm hiện tại?
-- (Hopefully, this is all of them!)
username fname lname started_on
---------- ---------- ---------- ----------
zahorjan John Zahorjan 1985-01-01
djw David Wetherall 1999-07-01
tom Tom Anderson 1997-10-01
levy Hank Levy 1988-04-01
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bạn có 3 bảng sau:
- Bảng Class:
- Chứa thông tin về các khóa học.
- Cấu trúc:
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
- title (VARCHAR(75)): Tiêu đề khóa học.
- Bảng Instructor:
- Chứa thông tin về giảng viên.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- fname (VARCHAR(50)): Tên của giảng viên.
- lname (VARCHAR(50)): Họ của giảng viên.
- started_on (CHAR(10)): Ngày bắt đầu làm việc của giảng viên.
- Bảng Teaches:
- Chứa thông tin về việc giảng viên dạy khóa học nào.
- Cấu trúc:
- username (VARCHAR(8)): Tên tài khoản giảng viên.
- dept (VARCHAR(6)): Mã phòng ban của khóa học.
- number (INTEGER): Số hiệu khóa học.
Yêu cầu:
-- Những instructors bắt đầu dạy vào hoặc sau ngày 1 tháng 1 của 20 năm trước?
username fname lname started_on
---------- ---------- ---------- ----------
djw David Wetherall 1999-07-01
tom Tom Anderson 1997-10-01
- Loại câu hỏi: ALTER
- Độ khó: EASY
Bảng party_guests:
Trong quá trình thiết kế cơ sở dữ liệu cho một buổi tiệc, bảng party_guests đã được tạo để quản lý danh sách khách mời, bao gồm thông tin về mã định danh khách mời, tên, tuổi và số lượng đồ uống mà họ đã đặt trước. Tuy nhiên, do một số nhầm lẫn trong quá trình thiết kế, kiểu dữ liệu của một vài trường đã bị nhập sai. Nhiệm vụ của bạn là sửa lại kiểu dữ liệu cho các trường này để bảng hoạt động chính xác.
- guest_id (INT, khóa chính): Mã định danh duy nhất cho mỗi khách.
- guest_name (VARCHAR(100)): Tên của khách mời.
- age (VARCHAR(3)): Tuổi của khách. (Lỗi: Kiểu dữ liệu này cần là INT để lưu tuổi).
- rsvp (BOOLEAN): Khách có tham gia hay không (TRUE/FALSE).
- drinks_count (VARCHAR(5)): Số lượng đồ uống khách đã đặt trước. (Lỗi: Kiểu dữ liệu này cần là INT vì nó là số lượng).
Sửa lỗi kiểu dữ liệu cho các trường age và drinks_count như sau:
- Thay đổi kiểu dữ liệu của cột age từ VARCHAR(3) sang INT.
- Thay đổi kiểu dữ liệu của cột drinks_count từ VARCHAR(5) sang INT.
+--------------+--------------+-------------+--------------------------+----------------+-------------+-------------------+ | COLUMN_NAME | COLUMN_TYPE | IS_NULLABLE | CHARACTER_MAXIMUM_LENGTH | COLUMN_DEFAULT | KEY_TYPE | REFERENCED_COLUMN | +--------------+--------------+-------------+--------------------------+----------------+-------------+-------------------+ | age | int | YES | | | | | | drinks_count | int | YES | | | | | | guest_id | int | NO | | | PRIMARY KEY | | | guest_name | varchar(100) | YES | 100 | | | | | rsvp | tinyint(1) | YES | | | | | +--------------+--------------+-------------+--------------------------+----------------+-------------+-------------------+
- Loại câu hỏi: CREATE
- Độ khó: EASY
Trong cơ sở dữ liệu hiện có hai bảng Students và Courses đã được tạo sẵn với cấu trúc như sau:
- Bảng Students:
- student_id (kiểu INT): Mã định danh duy nhất cho mỗi sinh viên (khóa chính).
- student_name (kiểu VARCHAR(100)): Tên của sinh viên, không được để trống.
- age (kiểu INT): Tuổi của sinh viên.
- Bảng Courses:
- course_id (kiểu INT): Mã định danh duy nhất cho mỗi khóa học (khóa chính).
- course_name (kiểu VARCHAR(100)): Tên của khóa học, không được để trống.
- credit_hours (kiểu INT): Số tín chỉ của khóa học.
Yêu cầu:
Nhiệm vụ của bạn là tạo một bảng mới có tên Enrollments để quản lý thông tin đăng ký khóa học của sinh viên. Bảng Enrollments cần chứa các thông tin sau:
- enrollment_id (kiểu INT): Mã định danh duy nhất cho mỗi lần đăng ký (khóa chính).
- student_id (kiểu INT): Mã sinh viên tham chiếu từ bảng Students (khóa ngoại).
- course_id (kiểu INT): Mã khóa học tham chiếu từ bảng Courses (khóa ngoại).
- enrollment_date (kiểu DATE): Ngày sinh viên đăng ký khóa học.
Yêu cầu kỹ thuật:
- Xác định rõ các khóa chính và khóa ngoại để đảm bảo sự toàn vẹn dữ liệu giữa các bảng.
- Bảng Enrollments cần có khóa chính là enrollment_id.
- Cần đảm bảo các cột student_id và course_id là khóa ngoại, lần lượt tham chiếu đến bảng Students và Courses.
- Loại câu hỏi: ALTER
- Độ khó: EASY
Đề bài: Chỉnh sửa bảng cơ sở dữ liệu với kiểu dữ liệu sai
Trong cơ sở dữ liệu hiện tại, bảng Employees đã được tạo với các trường như sau:
sql
CREATE TABLE Employees (
employee_id VARCHAR(255),
employee_name VARCHAR(100),
hire_date VARCHAR(50),
salary VARCHAR(100)
);
Tuy nhiên, có một số vấn đề với kiểu dữ liệu của các trường trong bảng này. Cụ thể:
- employee_id: Đã được thiết lập là VARCHAR(255), tuy nhiên trường này nên là số nguyên (INT) vì nó là mã định danh duy nhất cho mỗi nhân viên.
- hire_date: Hiện đang là VARCHAR(50), nhưng nên sử dụng kiểu dữ liệu ngày (DATE) để lưu trữ ngày tháng tuyển dụng chính xác.
- salary: Đã được đặt là VARCHAR(100), tuy nhiên trường này nên là số thực (DECIMAL) để thể hiện đúng mức lương của nhân viên.
Yêu cầu:
Nhiệm vụ của bạn là sửa đổi bảng Employees để khắc phục các vấn đề liên quan đến kiểu dữ liệu của các trường. Cụ thể:
Thay đổi kiểu dữ liệu của employee_id thành INT.
Thay đổi kiểu dữ liệu của hire_date thành DATE.
Thay đổi kiểu dữ liệu của salary thành DECIMAL(10, 2).
Yêu cầu kỹ thuật:
- Bạn cần sử dụng lệnh ALTER TABLE để thay đổi kiểu dữ liệu của các trường trong bảng.
- Đảm bảo rằng các kiểu dữ liệu mới phù hợp với thông tin mà các trường này lưu trữ
- Loại câu hỏi: PROCEDURE
- Độ khó: EASY
Viết một thủ tục (stored procedure) có tên GetEmployeeById để lấy thông tin của một nhân viên từ bảng Employees theo id. Thủ tục này cần nhận vào một tham số đầu vào là employeeId (kiểu INT) và trả về thông tin của nhân viên có id tương ứng.
Bảng Employees có cấu trúc như sau:
Employees (
id INT PRIMARY KEY,
name VARCHAR(255)
);
- id: Mã định danh duy nhất của mỗi nhân viên (kiểu INT, khóa chính).
- name: Tên của nhân viên (kiểu VARCHAR).
Tạo một thủ tục có tên GetEmployeeById với đầu vào là id của nhân viên.
- Loại câu hỏi: UPDATE
- Độ khó: EASY
Giả sử bạn có một bảng cơ sở dữ liệu tên là SinhVien với cấu trúc và dữ liệu như sau:
Viết câu lệnh SQL để cập nhật cột TrangThai của bảng SinhVien dựa trên giá trị của cột DiemTB theo các quy tắc sau:
- Nếu DiemTB lớn hơn hoặc bằng 5.0, đặt TrangThai là "Đạt".
- Nếu DiemTB nhỏ hơn 5.0, đặt TrangThai là "Không đạt".
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bảng: Signups
- user_id là cột có giá trị duy nhất trong bảng này.
- Mỗi hàng chứa thông tin về thời gian đăng ký (time_stamp) của người dùng với user_id.
Bảng: Confirmations
- (user_id, time_stamp) là khóa chính (kết hợp các cột có giá trị duy nhất).
- user_id là khóa ngoại (foreign key) tham chiếu đến bảng Signups.
- action là kiểu ENUM với các giá trị ('confirmed', 'timeout'):
- 'confirmed' nghĩa là người dùng đã xác nhận.
- 'timeout' nghĩa là thông báo xác nhận hết thời gian mà không được xác nhận.
Yêu cầu:
Tỷ lệ xác nhận (confirmation rate) của một người dùng được tính bằng:
Số lượng thông báo được xác nhận ('confirmed') chia cho tổng số thông báo yêu cầu xác nhận.
- Nếu người dùng không yêu cầu bất kỳ thông báo xác nhận nào, tỷ lệ xác nhận của họ là 0.
- Làm tròn tỷ lệ xác nhận đến hai chữ số thập phân.
Viết giải pháp để tính toán tỷ lệ xác nhận của mỗi người dùng.
Đầu vào:
Bảng Signups:
Bảng Confirmations:
Đầu ra:
Giải thích:
- Người dùng 6: Không yêu cầu thông báo xác nhận nào, nên tỷ lệ xác nhận là 0.00.
- Người dùng 3: Gửi 2 yêu cầu, cả hai đều hết thời gian (timeout), nên tỷ lệ xác nhận là 0.00.
- Người dùng 7: Gửi 3 yêu cầu, tất cả đều được xác nhận (confirmed), nên tỷ lệ xác nhận là 1.00.
- Người dùng 2: Gửi 2 yêu cầu, 1 được xác nhận và 1 hết thời gian, nên tỷ lệ xác nhận là 1 / 2 = 0.50.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bảng: Teacher
- (subject_id, dept_id) là khóa chính (tổ hợp các cột có giá trị duy nhất) của bảng này.
- Mỗi hàng trong bảng cho biết giáo viên có teacher_id giảng dạy môn học subject_id trong khoa dept_id.
Nhiệm vụ:
Viết một giải pháp để tính số lượng môn học duy nhất mà mỗi giáo viên giảng dạy trong trường đại học.
Trả về bảng kết quả với thứ tự bất kỳ.
Đầu vào:
Bảng Teacher:
Đầu ra:
Giải thích:
- Giáo viên 1:
- Dạy môn học 2 trong các khoa 3 và 4.
- Dạy môn học 3 trong khoa 3.
- -> Số môn học duy nhất = 2.
- Giáo viên 2:
- Dạy môn học 1, 2, 3, 4 trong khoa 1.
- -> Số môn học duy nhất = 4.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Table: Courses
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| student | varchar |
| class | varchar |
+-------------+---------+
(student, class) is the primary key (combination of columns with unique values) for this table.
Each row of this table indicates the name of a student and the class in which they are enrolled.
Write a solution to find all the classes that have at least five students.
Return the result table in any order.
The result format is in the following example.
Example 1:
Input:
Courses table:
+---------+----------+
| student | class |
+---------+----------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
+---------+----------+
Output:
+---------+
| class |
+---------+
| Math |
+---------+
Explanation:
- Math has 6 students, so we include it.
- English has 1 student, so we do not include it.
- Biology has 1 student, so we do not include it.
- Computer has 1 student, so we do not include it.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bảng: Tweets
- tweet_id là khóa chính (cột có giá trị duy nhất) của bảng này.
- Bảng này chứa tất cả các tweet trên một ứng dụng mạng xã hội.
Nhiệm vụ:
Viết một giải pháp để tìm các ID của những tweet không hợp lệ. Một tweet được coi là không hợp lệ nếu số lượng ký tự trong nội dung (content) của nó lớn hơn 15.
Trả về bảng kết quả với thứ tự bất kỳ.
Đầu vào:
Bảng Tweets:
Đầu ra:
Giải thích:
- Tweet 1 có độ dài = 11 ký tự, nên là một tweet hợp lệ.
- Tweet 2 có độ dài = 33 ký tự, nên là một tweet không hợp lệ.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bảng: Sales
- (sale_id, year) là khóa chính (tổ hợp các cột có giá trị duy nhất).
- product_id là khóa ngoại (cột tham chiếu) tới bảng Product.
- Mỗi hàng trong bảng biểu thị một giao dịch bán sản phẩm product_id trong một năm cụ thể.
- Lưu ý rằng giá (price) là giá mỗi đơn vị.
Bảng: Product
- product_id là khóa chính (cột có giá trị duy nhất).
- Mỗi hàng trong bảng biểu thị tên sản phẩm (product_name) của sản phẩm tương ứng.
Yêu cầu:
Viết một giải pháp để báo cáo:
- Tên sản phẩm (product_name).
- Năm (year) của giao dịch bán hàng.
- Giá bán (price) của mỗi giao dịch (sale_id).
Trả về bảng kết quả với thứ tự bất kỳ.
Đầu vào:
Bảng Sales:
Bảng Product:
Đầu ra:
Giải thích:
- Từ sale_id = 1, có thể kết luận rằng sản phẩm "Nokia" được bán với giá 5000 trong năm 2008.
- Từ sale_id = 2, có thể kết luận rằng sản phẩm "Nokia" được bán với giá 5000 trong năm 2009.
- Từ sale_id = 7, có thể kết luận rằng sản phẩm "Apple" được bán với giá 9000 trong năm 2011.
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bảng: Customer
+-------------+---------+
| Tên Cột | Kiểu Dữ Liệu |
+-------------+---------+
| customer_id | int |
| product_key | int |
+-------------+---------+
Bảng này có thể chứa các hàng trùng lặp.
- customer_id không được NULL.
- product_key là khóa ngoại (cột tham chiếu) tới bảng Product.
Bảng: Product
+-------------+---------+
| Tên Cột | Kiểu Dữ Liệu |
+-------------+---------+
| product_key | int |
+-------------+---------+
- product_key là khóa chính (cột có giá trị duy nhất) của bảng này.
Yêu cầu:
Viết một giải pháp để báo cáo các customer_id từ bảng Customer đã mua tất cả các sản phẩm trong bảng Product.
Trả về bảng kết quả với thứ tự bất kỳ.
Ví dụ 1:
Đầu vào:
Bảng Customer:
+-------------+-------------+
| customer_id | product_key |
+-------------+-------------+
| 1 | 5 |
| 2 | 6 |
| 3 | 5 |
| 3 | 6 |
| 1 | 6 |
+-------------+-------------+
Bảng Product:
+-------------+
| product_key |
+-------------+
| 5 |
| 6 |
+-------------+
Đầu ra:
+-------------+
| customer_id |
+-------------+
| 1 |
| 3 |
+-------------+
Giải thích:
- Những khách hàng đã mua tất cả các sản phẩm (5 và 6) là khách hàng có customer_id = 1 và customer_id = 3.
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bảng: Prices
+------------+------------+------------+--------+
| Tên Cột | Kiểu Dữ Liệu |
+------------+------------+------------+--------+
| product_id | int |
| start_date | date |
| end_date | date |
| price | int |
+------------+------------+------------+--------+
- (product_id, start_date, end_date) là khóa chính (tổ hợp các cột có giá trị duy nhất).
- Mỗi hàng biểu thị giá của sản phẩm (product_id) trong khoảng thời gian từ start_date đến end_date.
- Với mỗi product_id, không có hai khoảng thời gian nào trùng lặp.
Bảng: UnitsSold
+------------+---------------+-------+
| Tên Cột | Kiểu Dữ Liệu |
+------------+---------------+-------+
| product_id | int |
| purchase_date | date |
| units | int |
+------------+---------------+-------+
- Bảng này có thể chứa các hàng trùng lặp.
- Mỗi hàng biểu thị ngày bán (purchase_date), số lượng (units), và sản phẩm (product_id) được bán.
Yêu cầu:
Viết một giải pháp để tìm giá bán trung bình (average_price) của mỗi sản phẩm.
- average_price = Tổng giá bán / Tổng số lượng sản phẩm bán được.
- Làm tròn giá bán trung bình đến 2 chữ số thập phân.
- Nếu sản phẩm không có bất kỳ đơn vị nào được bán, giá bán trung bình được giả định là 0.
Trả về bảng kết quả với thứ tự bất kỳ.
Ví dụ 1:
Đầu vào:
Bảng Prices:
+------------+------------+------------+--------+
| product_id | start_date | end_date | price |
+------------+------------+------------+--------+
| 1 | 2019-02-17 | 2019-02-28 | 5 |
| 1 | 2019-03-01 | 2019-03-22 | 20 |
| 2 | 2019-02-01 | 2019-02-20 | 15 |
| 2 | 2019-02-21 | 2019-03-31 | 30 |
+------------+------------+------------+--------+
Bảng UnitsSold:
+------------+---------------+-------+
| product_id | purchase_date | units |
+------------+---------------+-------+
| 1 | 2019-02-25 | 100 |
| 1 | 2019-03-01 | 15 |
| 2 | 2019-02-10 | 200 |
| 2 | 2019-03-22 | 30 |
+------------+---------------+-------+
Đầu ra:
+------------+---------------+
| product_id | average_price |
+------------+---------------+
| 1 | 6.96 |
| 2 | 16.96 |
+------------+---------------+
Giải thích:
- Sản phẩm 1:
- Ngày 2019-02-25: Giá 5, Số lượng 100.
- Ngày 2019-03-01: Giá 20, Số lượng 15.
- Tổng giá bán = (100 × 5) + (15 × 20) = 500 + 300 = 800.
- Tổng số lượng bán được = 100 + 15 = 115.
- Giá trung bình = 800 / 115 ≈ 6.96.
- Sản phẩm 2:
- Ngày 2019-02-10: Giá 15, Số lượng 200.
- Ngày 2019-03-22: Giá 30, Số lượng 30.
- Tổng giá bán = (200 × 15) + (30 × 30) = 3000 + 900 = 3900.
- Tổng số lượng bán được = 200 + 30 = 230.
- Giá trung bình = 3900 / 230 ≈ 16.96.
- Loại câu hỏi: SELECT
- Độ khó: HARD
Bảng: Movies
+-------------+---------+
| Tên Cột | Kiểu Dữ Liệu |
+-------------+---------+
| movie_id | int |
| title | varchar |
+-------------+---------+
- movie_id là khóa chính (cột có giá trị duy nhất).
- title chứa tên của bộ phim.
Bảng: Users
+-------------+---------+
| Tên Cột | Kiểu Dữ Liệu |
+-------------+---------+
| user_id | int |
| name | varchar |
+-------------+---------+
- user_id là khóa chính (cột có giá trị duy nhất).
- name chứa tên của người dùng, và giá trị trong cột này là duy nhất.
Bảng: MovieRating
+-------------+---------+
| Tên Cột | Kiểu Dữ Liệu |
+-------------+---------+
| movie_id | int |
| user_id | int |
| rating | int |
| created_at | date |
+-------------+---------+
- (movie_id, user_id) là khóa chính (cột có giá trị duy nhất).
- Bảng này chứa đánh giá của người dùng (rating) về các bộ phim (movie_id).
- created_at ghi lại ngày mà người dùng thực hiện đánh giá.
Yêu cầu:
- Tìm tên của người dùng đã đánh giá nhiều bộ phim nhất. Trong trường hợp có nhiều người dùng đánh giá số lượng phim như nhau, trả về tên người có thứ tự từ điển (lexicographically) nhỏ hơn.
- Tìm tên của bộ phim có xếp hạng trung bình cao nhất trong tháng 2 năm 2020. Trong trường hợp có nhiều phim có xếp hạng trung bình bằng nhau, trả về tên phim có thứ tự từ điển (lexicographically) nhỏ hơn.
Trả về bảng kết quả với một cột results.
Ví dụ 1:
Đầu vào:
Bảng Movies:
+-------------+--------------+
| movie_id | title |
+-------------+--------------+
| 1 | Avengers |
| 2 | Frozen 2 |
| 3 | Joker |
+-------------+--------------+
Bảng Users:
+-------------+--------------+
| user_id | name |
+-------------+--------------+
| 1 | Daniel |
| 2 | Monica |
| 3 | Maria |
| 4 | James |
+-------------+--------------+
Bảng MovieRating:
+-------------+--------------+--------------+-------------+
| movie_id | user_id | rating | created_at|
+-------------+--------------+--------------+-------------+
| 1 | 1 | 3 | 2020-01-12 |
| 1 | 2 | 4 | 2020-02-11 |
| 1 | 3 | 2 | 2020-02-12 |
| 1 | 4 | 1 | 2020-01-01 |
| 2 | 1 | 5 | 2020-02-17 |
| 2 | 2 | 2 | 2020-02-01 |
| 2 | 3 | 2 | 2020-03-01 |
| 3 | 1 | 3 | 2020-02-22 |
| 3 | 2 | 4 | 2020-02-25 |
+-------------+--------------+--------------+-------------+
Đầu ra:
+--------------+
| results |
+--------------+
| Daniel |
| Frozen 2 |
+--------------+
Giải thích:
- Người dùng đánh giá nhiều phim nhất:
- Daniel và Monica đều đánh giá 3 bộ phim: "Avengers", "Frozen 2", và "Joker".
- Tên của Daniel nhỏ hơn lexicographically, nên kết quả là Daniel.
- Bộ phim có xếp hạng trung bình cao nhất trong tháng 2 năm 2020:
- Frozen 2: (5 + 2) / 2 = 3.5.
- Joker: (3 + 4) / 2 = 3.5.
- Cả hai phim có cùng xếp hạng trung bình, nhưng Frozen 2 có thứ tự từ điển nhỏ hơn, nên kết quả là Frozen 2.
- Loại câu hỏi: SELECT
- Độ khó: MEDIUM
Bảng: Students
+-------------+-------------+
| Tên Cột | Kiểu Dữ Liệu |
+-------------+-------------+
| student_id | int |
| student_name | varchar |
+-------------+-------------+
- student_id là khóa chính (cột có giá trị duy nhất).
- Mỗi hàng trong bảng chứa thông tin về ID và tên của một học sinh trong trường.
Bảng: Subjects
+--------------+-------------+
| Tên Cột | Kiểu Dữ Liệu |
+--------------+-------------+
| subject_name | varchar |
+--------------+-------------+
- subject_name là khóa chính (cột có giá trị duy nhất).
- Mỗi hàng trong bảng chứa tên của một môn học trong trường.
Bảng: Examinations
+--------------+-------------+
| Tên Cột | Kiểu Dữ Liệu |
+--------------+-------------+
| student_id | int |
| subject_name | varchar |
+--------------+-------------+
- Không có khóa chính trong bảng này.
- Bảng có thể chứa các hàng trùng lặp.
- Mỗi hàng cho biết rằng một học sinh với student_id đã tham dự kỳ thi của môn học subject_name.
Yêu cầu:
Viết một giải pháp để tìm số lần mỗi học sinh tham dự mỗi kỳ thi.
Kết quả trả về cần được sắp xếp theo student_id và subject_name.
Ví dụ 1:
Đầu vào:
Bảng Students:
+------------+--------------+
| student_id | student_name |
+------------+--------------+
| 1 | Alice |
| 2 | Bob |
| 13 | John |
| 6 | Alex |
+------------+--------------+
Bảng Subjects:
+--------------+
| subject_name |
+--------------+
| Math |
| Physics |
| Programming |
+--------------+
Bảng Examinations:
+------------+--------------+
| student_id | subject_name |
+------------+--------------+
| 1 | Math |
| 1 | Physics |
| 1 | Programming |
| 2 | Programming |
| 1 | Physics |
| 1 | Math |
| 13 | Math |
| 13 | Programming |
| 13 | Physics |
| 2 | Math |
| 1 | Math |
+------------+--------------+
Đầu ra:
+------------+--------------+--------------+----------------+
| student_id | student_name | subject_name | attended_exams |
+------------+--------------+--------------+----------------+
| 1 | Alice | Math | 3 |
| 1 | Alice | Physics | 2 |
| 1 | Alice | Programming | 1 |
| 2 | Bob | Math | 1 |
| 2 | Bob | Physics | 0 |
| 2 | Bob | Programming | 1 |
| 6 | Alex | Math | 0 |
| 6 | Alex | Physics | 0 |
| 6 | Alex | Programming | 0 |
| 13 | John | Math | 1 |
| 13 | John | Physics | 1 |
| 13 | John | Programming | 1 |
+------------+--------------+--------------+----------------+
Giải thích:
- Bảng kết quả cần bao gồm tất cả học sinh và tất cả môn học, kể cả khi học sinh không tham gia kỳ thi nào.
- Alice tham dự kỳ thi Math 3 lần, Physics 2 lần, và Programming 1 lần.
- Bob tham dự kỳ thi Math 1 lần, Programming 1 lần, và không tham dự Physics.
- Alex không tham dự kỳ thi nào.
- John tham dự mỗi kỳ thi Math, Physics, và Programming 1 lần.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bảng: Employee
+-------------+---------+
| Tên Cột | Kiểu Dữ Liệu |
+-------------+---------+
| id | int |
| name | varchar |
| department | varchar |
| managerId | int |
+-------------+---------+
- id là khóa chính (cột có giá trị duy nhất).
- Mỗi hàng trong bảng biểu thị thông tin của một nhân viên, bao gồm tên (name), phòng ban (department), và ID của quản lý trực tiếp (managerId).
- Nếu managerId là NULL, nghĩa là nhân viên không có quản lý.
- Không có nhân viên nào là quản lý của chính mình.
Yêu cầu:
Viết một giải pháp để tìm các quản lý có ít nhất 5 nhân viên báo cáo trực tiếp.
Trả về bảng kết quả với thứ tự bất kỳ.
Ví dụ 1:
Đầu vào:
Bảng Employee:
+-----+-------+------------+-----------+
| id | name | department | managerId |
+-----+-------+------------+-----------+
| 101 | John | A | NULL |
| 102 | Dan | A | 101 |
| 103 | James | A | 101 |
| 104 | Amy | A | 101 |
| 105 | Anne | A | 101 |
| 106 | Ron | B | 101 |
+-----+-------+------------+-----------+
Đầu ra:
+------+
| name |
+------+
| John |
+------+
Giải thích:
- John (ID = 101) là quản lý của 5 nhân viên: Dan, James, Amy, Anne, và Ron.
- Vì vậy, kết quả trả về là John.
- Loại câu hỏi: UPDATE
- Độ khó: EASY
Bảng: Users
+----------------+---------+
| Tên Cột | Kiểu Dữ Liệu |
+----------------+---------+
| user_id | int |
| name | varchar |
+----------------+---------+
- user_id là khóa chính (cột có giá trị duy nhất).
- Bảng này chứa thông tin ID và tên của người dùng.
- Tên (name) chỉ chứa các ký tự chữ cái in thường hoặc in hoa.
Yêu cầu:
Viết một giải pháp để chỉnh sửa các tên sao cho:
- Chỉ ký tự đầu tiên được viết hoa.
- Các ký tự còn lại phải được chuyển thành chữ thường.
Trả về bảng kết quả được sắp xếp theo user_id.
Ví dụ 1:
Đầu vào:
Bảng Users:
+---------+-------+
| user_id | name |
+---------+-------+
| 1 | aLice |
| 2 | bOB |
+---------+-------+
Đầu ra:
+---------+-------+
| user_id | name |
+---------+-------+
| 1 | Alice |
| 2 | Bob |
+---------+-------+
Giải thích:
- Tên của người dùng được chuẩn hóa sao cho chỉ ký tự đầu tiên viết hoa:
- aLice → Alice.
- bOB → Bob.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Bảng: Employee
+-------------+---------+
| Tên Cột | Kiểu Dữ Liệu |
+-------------+---------+
| empId | int |
| name | varchar |
| supervisor | int |
| salary | int |
+-------------+---------+
- empId là cột có giá trị duy nhất trong bảng này.
- Mỗi hàng biểu thị thông tin ID, tên (name), mức lương (salary), và ID của người giám sát (supervisor) của một nhân viên.
Bảng: Bonus
+-------------+------+
| Tên Cột | Kiểu Dữ Liệu |
+-------------+------+
| empId | int |
| bonus | int |
+-------------+------+
- empId là cột có giá trị duy nhất trong bảng này.
- empId là khóa ngoại tham chiếu đến cột empId của bảng Employee.
- Mỗi hàng biểu thị ID của một nhân viên và số tiền thưởng (bonus) của họ.
Yêu cầu:
Viết một giải pháp để báo cáo tên (name) và số tiền thưởng (bonus) của mỗi nhân viên có tiền thưởng nhỏ hơn 1000.
- Nếu nhân viên không có tiền thưởng, cột bonus sẽ hiển thị NULL.
Trả về bảng kết quả với thứ tự bất kỳ.
Ví dụ 1:
Đầu vào:
Bảng Employee:
+-------+--------+------------+--------+
| empId | name | supervisor | salary |
+-------+--------+------------+--------+
| 3 | Brad | NULL | 4000 |
| 1 | John | 3 | 1000 |
| 2 | Dan | 3 | 2000 |
| 4 | Thomas | 3 | 4000 |
+-------+--------+------------+--------+
Bảng Bonus:
+-------+-------+
| empId | bonus |
+-------+-------+
| 2 | 500 |
| 4 | 2000 |
+-------+-------+
Đầu ra:
+------+-------+
| name | bonus |
+------+-------+
| Brad | NULL |
| John | NULL |
| Dan | 500 |
+------+-------+
Giải thích:
- Brad (empId = 3) không có tiền thưởng, nên bonus là NULL.
- John (empId = 1) không có tiền thưởng, nên bonus là NULL.
- Dan (empId = 2) có tiền thưởng là 500 (< 1000), nên bonus là 500.
- Thomas (empId = 4) có tiền thưởng là 2000 (> 1000), không được đưa vào kết quả.
- Loại câu hỏi: SELECT
- Độ khó: EASY
Cho cơ sở dữ liệu sau được dùng để quản lý công tác giao hàng trong một công ty kinh doanh
Bảng NHACUNGCAP lưu trữ dữ liệu về các đối tác cung cấp hàng cho công ty.
Bảng MATHANG lưu trữ dữ liệu về các mặt hàng hiện có trong công ty
Bảng LOAIHANG phân loại các mặt hàng hiện có
Bảng NHANVIEN có dữ liệu là các thông tin về nhân viên làm việc trong công ty
Bảng KHACHHANG được sử dụng để lưu trữ các thông tin về khách hàng của công ty
Câu hỏi: Cho biết danh sách các đối tác cung cấp hàng cho công ty?
Ouput mẫu:
- Loại câu hỏi: SELECT
- Độ khó: EASY
Cho cơ sở dữ liệu sau được dùng để quản lý công tác giao hàng trong một công ty kinh doanh
Bảng NHACUNGCAP lưu trữ dữ liệu về các đối tác cung cấp hàng cho công ty.
Bảng MATHANG lưu trữ dữ liệu về các mặt hàng hiện có trong công ty
Bảng LOAIHANG phân loại các mặt hàng hiện có
Bảng NHANVIEN có dữ liệu là các thông tin về nhân viên làm việc trong công ty
Bảng KHACHHANG được sử dụng để lưu trữ các thông tin về khách hàng của công ty
Câu hỏi: Cho biết Mã hàng, tên hàng và số lượng của các mặt hàng hiện có trong công ty?
- Loại câu hỏi: SELECT
- Độ khó: EASY
Cho cơ sở dữ liệu sau được dùng để quản lý công tác giao hàng trong một công ty kinh doanh
Bảng NHACUNGCAP lưu trữ dữ liệu về các đối tác cung cấp hàng cho công ty.
Bảng MATHANG lưu trữ dữ liệu về các mặt hàng hiện có trong công ty
Bảng LOAIHANG phân loại các mặt hàng hiện có
Bảng NHANVIEN có dữ liệu là các thông tin về nhân viên làm việc trong công ty
Bảng KHACHHANG được sử dụng để lưu trữ các thông tin về khách hàng của công ty
Câu hỏi: Cho biết Họ tên, địa chỉ và năm bắt đầu làm việc của các nhân viên trong cty?
- Loại câu hỏi: SELECT
- Độ khó: EASY
Cho cơ sở dữ liệu sau được dùng để quản lý công tác giao hàng trong một công ty kinh doanh





































