Những gợi ý SQL để tạo và truy vấn cơ sở dữ liệu
Trong bài tập này, chúng ta sẽ làm quen với SQL thông qua việc tạo và truy vấn cơ sở dữ liệu QLBH. Bài viết này sẽ giúp bạn nắm vững các câu lệnh SQL căn bản để tạo, truy vấn và cập nhật dữ liệu trong cơ sở dữ liệu.
Tạo cơ sở dữ liệu QLBH
Đầu tiên, chúng ta sẽ tạo cơ sở dữ liệu QLBH trong MySQL:
CREATE DATABASE QLBH; USE QLBH;
Tạo bảng KHACHHANG
Bảng KHACHHANG lưu trữ thông tin về khách hàng của công ty:
CREATE TABLE KHACHHANG ( MaKhachHang INT PRIMARY KEY, TenCongTy NVARCHAR(50), TenGiaoDich NVARCHAR(20), DiaChi NVARCHAR(50), Email VARCHAR(30), DienThoai VARCHAR(15), Fax VARCHAR(15) );
Tạo bảng NHACUNGCAP
Bảng NHACUNGCAP lưu trữ thông tin về các đối tác cung cấp hàng cho công ty:
CREATE TABLE NHACUNGCAP ( MaCongTy CHAR(3) PRIMARY KEY, TenCongTy NVARCHAR(50), TenGiaoDich NVARCHAR(20), DiaChi NVARCHAR(50), DienThoai VARCHAR(15), Fax VARCHAR(15), Email VARCHAR(30) );
Tạo bảng LOAIHANG
Bảng LOAIHANG phân loại các mặt hàng hiện có trong công ty:
CREATE TABLE LOAIHANG ( MaLoaiHang CHAR(2) PRIMARY KEY, TenLoaiHang NVARCHAR(30) );
Tạo bảng MATHANG
Bảng MATHANG lưu trữ thông tin về các mặt hàng hiện có trong công ty:
CREATE TABLE MATHANG ( MaHang CHAR(4) PRIMARY KEY, TenHang NVARCHAR(30), MaCongTy CHAR(3), MaLoaiHang CHAR(2), SoLuong INT, DonViTinh NVARCHAR(10), GiaHang NUMERIC(10,2), FOREIGN KEY (MaCongTy) REFERENCES NHACUNGCAP(MaCongTy), FOREIGN KEY (MaLoaiHang) REFERENCES LOAIHANG(MaLoaiHang) );
Tạo bảng NHANVIEN
Bảng NHANVIEN lưu trữ thông tin về nhân viên làm việc trong công ty:
CREATE TABLE NHANVIEN ( MaNhanVien CHAR(4) PRIMARY KEY, Ho NVARCHAR(40), Ten NVARCHAR(10), NgaySinh DATETIME, NgayLamViec DATETIME, DiaChi NVARCHAR(60), DienThoai VARCHAR(15), LuongCoBan NUMERIC(10,2), PhuCap NUMERIC(10,2) );
Tạo bảng DONDATHANG
Bảng DONDATHANG lưu trữ thông tin chung về các đơn đặt hàng:
CREATE TABLE DONDATHANG ( SoHoaDon INT PRIMARY KEY, MaKhachHang INT, MaNhanVien CHAR(4), NgayDatHang DATETIME, NgayGiaoHang DATETIME, NgayChuyenHang DATETIME, NoiGiaoHang NVARCHAR(80), FOREIGN KEY (MaKhachHang) REFERENCES KHACHHANG(MaKhachHang), FOREIGN KEY (MaNhanVien) REFERENCES NHANVIEN(MaNhanVien) );
Tạo bảng CHITIETDATHANG
Bảng CHITIETDATHANG lưu trữ thông tin chi tiết về mỗi đơn đặt hàng:
CREATE TABLE CHITIETDATHANG ( SoHoaDon INT, MaHang CHAR(4), GiaBan NUMERIC(10,2), SoLuong INT, MucGiamGia NUMERIC(10,2), PRIMARY KEY (SoHoaDon, MaHang), FOREIGN KEY (SoHoaDon) REFERENCES DONDATHANG(SoHoaDon), FOREIGN KEY (MaHang) REFERENCES MATHANG(MaHang) );
Giải pháp tổ chức
- Tạo một cơ sở dữ liệu mới với tên QLBH.
- Tạo các bảng dữ liệu trong cơ sở dữ liệu QLBH.
- Sử dụng các câu lệnh SELECT để truy vấn dữ liệu theo yêu cầu từ bài tập.
Câu truy vấn SQL
Thực hiện các câu lệnh SELECT để truy vấn theo yêu cầu bài tập:
- Danh sách các đối tác cung cấp hàng cho công ty:
SELECT * FROM NHACUNGCAP;
- 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:
SELECT MaHang, TenHang, SoLuong FROM MATHANG;
- Họ tên, địa chỉ và năm bắt đầu làm việc của các nhân viên trong công ty:
SELECT Ho, Ten, DiaChi, YEAR(NgayLamViec) AS NamBatDauLamViec FROM NHANVIEN;
- Địa chỉ, điện thoại của nhà cung cấp có tên giao dịch VINAMILK:
SELECT DiaChi, DienThoai FROM NHACUNGCAP WHERE TenGiaoDich = 'VINAMILK';
- Mã và tên của các mặt hàng có giá trị lớn hơn 100000 và số lượng hiện có ít hơn 50:
SELECT MaHang, TenHang FROM MATHANG WHERE GiaHang > 100000 AND SoLuong 50;
- Mỗi mặt hàng trong công ty do ai cung cấp:
SELECT TenHang, TenCongTy FROM MATHANG JOIN NHACUNGCAP ON MATHANG.MaCongTy = NHACUNGCAP.MaCongTy;
- Công ty Việt Tiến đã cung cấp những mặt hàng nào:
SELECT TenHang FROM MATHANG JOIN NHACUNGCAP ON MATHANG.MaCongTy = NHACUNGCAP.MaCongTy WHERE TenCongTy = 'Việt Tiến';
- Loại hàng thực phẩm do những công ty nào cung cấp, địa chỉ của công ty đó:
SELECT TenCongTy, DiaChi FROM NHACUNGCAP JOIN MATHANG ON NHACUNGCAP.MaCongTy = MATHANG.MaCongTy JOIN LOAIHANG ON MATHANG.MaLoaiHang = LOAIHANG.MaLoaiHang WHERE TenLoaiHang = 'Thực phẩm';
- Những khách hàng nào (tên giao dịch) đã đặt mua mặt hàng sữa hộp của công ty:
SELECT TenGiaoDich FROM KHACHHANG JOIN DONDATHANG ON KHACHHANG.MaKhachHang = DONDATHANG.MaKhachHang JOIN CHITIETDATHANG ON DONDATHANG.SoHoaDon = CHITIETDATHANG.SoHoaDon JOIN MATHANG ON CHITIETDATHANG.MaHang = MATHANG.MaHang WHERE TenHang LIKE '%sữa hộp%';
- Đơn đặt hàng số 1 do ai đặt và do nhân viên nào lập, thời gian và địa điểm giao hàng ở đâu:
SELECT KHACHHANG.TenGiaoDich AS NguoiDat, NHANVIEN.Ho AS NguoiLap, DONDATHANG.NgayGiaoHang, DONDATHANG.NoiGiaoHang FROM DONDATHANG JOIN KHACHHANG ON DONDATHANG.MaKhachHang = KHACHHANG.MaKhachHang JOIN NHANVIEN ON DONDATHANG.MaNhanVien = NHANVIEN.MaNhanVien WHERE DONDATHANG.SoHoaDon = 1;
- Số tiền lương mà công ty phải trả cho mỗi nhân viên là bao nhiêu:
SELECT MaNhanVien, Ho, Ten, LuongCoBan + PhuCap AS Luong FROM NHANVIEN;
- Trong đơn đặt hàng số 3 đặt mua những mạt hàng nào và số tiền mà khách hàng phải trả cho mỗi mặt hàng là bao nhiêu:
SELECT MATHANG.TenHang, CHITIETDATHANG.SoLuong * (MATHANG.GiaHang - (MATHANG.GiaHang * CHITIETDATHANG.MucGiamGia / 100)) AS TongTien FROM CHITIETDATHANG JOIN MATHANG ON CHITIETDATHANG.MaHang = MATHANG.MaHang WHERE CHITIETDATHANG.SoHoaDon = 3;
- Có những khách hàng nào lại chính là đối tác cung cấp hàng cho công ty (tức là có cùng tên giao dịch):
SELECT DISTINCT KHACHHANG.TenGiaoDich FROM KHACHHANG JOIN NHACUNGCAP ON KHACHHANG.TenGiaoDich = NHACUNGCAP.TenGiaoDich;
- Trong công ty có những nhân viên nào có cùng ngày sinh:
SELECT NHANVIEN.Ho, NHANVIEN.Ten, NHANVIEN.NgaySinh FROM NHANVIEN GROUP BY NHANVIEN.Ho, NHANVIEN.Ten, NHANVIEN.NgaySinh HAVING COUNT(*) > 1;
- Những đơn hàng nào yêu cầu giao hàng ngay tại công ty đặt hàng và những đơn đó là của công ty nào:
SELECT DONDATHANG.SoHoaDon, KHACHHANG.TenCongTy FROM DONDATHANG JOIN KHACHHANG ON DONDATHANG.MaKhachHang = KHACHHANG.MaKhachHang WHERE DONDATHANG.NoiGiaoHang = 'Công ty' AND DONDATHANG.NgayChuyenHang = DONDATHANG.NgayGiaoHang;
Lưu ý Trong bài viết này, chúng ta đã tạo và truy vấn cơ sở dữ liệu QLBH thông qua các câu lệnh SQL. Đây chỉ là những ví dụ để hỗ trợ bạn hiểu cách sử dụng SQL để làm việc với cơ sở dữ liệu. Bạn có thể tùy chỉnh và mở rộng các câu lệnh truy vấn theo nhu cầu thực tế của mình.
Kết luận
Qua bài tập này, chúng ta đã nhìn thấy cách tạo cơ sở dữ liệu QLBH và thực hiện các câu lệnh truy vấn SQL để trả lời các câu hỏi liên quan đến dữ liệu. SQL là một công cụ mạnh mẽ để quản lý và truy xuất dữ liệu và sẽ rất hữu ích trong công việc của bạn. Hãy tiếp tục nâng cao kỹ năng của mình và khám phá thêm các chức năng và câu lệnh mạnh mẽ khác của SQL.