Hiển thị các bài đăng có nhãn SQL. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn SQL. Hiển thị tất cả bài đăng

20 thg 3, 2009

Bài tập demo cho câu lệnh SQL (phan 4)

Tiếp tục 4 câu nữa mình sẽ hướng dẫn chi tiết hơn để các bạn dễ hiểu

5. Cho biết mã và tên của các mặt hàng có giá lớn hơn 100000 và số lượng hiện có ít hơn 50

6. Cho biết mỗi mặt hàng trong công ty do ai cung cấp.

7. Công ty Việt Tiến đã cung cấp những mặt hàng nào?

8. Loại hàng thực phẩm do những công ty nào cung cấp và địa chỉ của các công ty đó là gì?
Với 4 câu đầu rất dễ hiểu ai học về sql cũng có thể làm được.
- Câu 5 theo yêu cầu ta hãy nhìn vào dữ liệu của bảng mathang ta thấy
chỉ có "Ti vi LG 24" thỏa yêu cầu của đề bài các dòng dữ liệu khác không thỏa ta dùng WHERE để thực hiện yêu cầu này

Câu truy vấn

5. SELECT mahang,tenhang FROM mathang WHERE giahang>100000 AND soluong<50>
Câu 6:
Ta thấy việc lấy dữ liệu thông tin tên công ty cung cấp mặt hàng nào có liên quan đến 2 bảng nhacungcap và mathang. Vì bảng mathang chỉ chứa macongty của nhacungcap nên ta không thể biết tên công ty là gì mà dựa vào macongty đó nhìn vào bảng nhacungcap sẽ biết được tên công ty là gì!



Vì vậy câu truy vấn của chúng ta sẽ thao tác lấy dữ liệu dựa trên mối quan hệ macongty

6.SELECT tenhang, tencongty FROM mathang, nhacungcap WHERE mathang.macongty= nhacungcap.macongty
hoặc như cách này
SELECT tenhang, tencongty FROM mathang INNER JOIN nhacungcap ON mathang.macongty=nhacungcap.macongty

Ta sẽ được kết quả như vầy:




Chúc các bạn học tốt nhé.

Đáp án (bài học phần 3)

Các câu truy vấn theo yêu cầu trên:

1. Select macongty,tencongty,tengiaodich From nhacungcap

2. Select mahang,tenhang,soluong From mathang

3. Select ho, ten, year(ngaylamviec) Namlamviec From nhanvien

4. Select diachi, dienthoai From nhacungcap Where tengiaodich='VINAMILK'

mấy cái này rất khó nhai nhưng hy vọng các bạn quan tâm vì đây là kiến thức chuyên môn cho ai yêu thích ngôn ngữ SQL và sau này nếu các bạn rành về cái này sẽ đỡ viết code nhiều.
Coi lại

  • Phần 1

  • Phần 2

  • Phần 3
  • Bài tập demo cho câu lệnh SQL (phan 3)

    Để nhập dữ liệu vào các Table có kiểu dữ liệu là chuỗi bằng Unicode thường ta phải khai báo kiểu NVarchar, NChar, NText. Khi nhập vào thì phải như vầy: ( N'đánh chữ Unicode') thì SQL mới hiểu và lưu vào dạng Unicode.
    Bây giờ tiếp theo bài trên ta hãy nhập dữ liệu vào cho các Table:

    Mã:
    go -- nhap du lieu cho cac Table

    INSERT khachhang VALUES('K001', N'Công Ty Ánh Sáng', 'ANHSANG', N'Long An',
    'anhsang@yahoo.com', '19001560', '0199201')
    INSERT khachhang VALUES('K002', N'Doanh nghiệp Hòa Bình', 'HOABINH', N'Thủ Đức - TP.HCM',
    'anhem@yahoo.com', '9109210921', '22193881')
    INSERT khachhang VALUES('K003', N'Công Ty Vĩnh Hảo', 'VINHHAO', N'Khánh Hòa',
    'nuocsuoi@yahoo.com', '109291012', '6009219')
    INSERT khachhang VALUES('K004', N'Công Ty Bia Bến Thành', 'BENTHANH', N'Bình Dương',
    'biabenthanh@yahoo.com', '19209301', '20939139')
    INSERT khachhang VALUES('K005', N'Công ty TNHH Chợ Lớn', 'CHOLON', N'Sài Gòn',
    'cholon@yahoo.com', '201938', '2193802')
    INSERT khachhang VALUES('K006', N'Nhà Máy Sữa Thống Nhất Vinamilk', 'VINAMILK', N'Thủ Đức - TP.HCM',
    'suavoi@yahoo.com', '91839219', '0918928910')
    INSERT khachhang VALUES('K007', N'Công ty may Việt Tiến', 'VIETTIEN', N'TP.HCM',
    'viettien@yahoo.com', '213201938', '21991012')
    INSERT khachhang VALUES('K008', N'Siêu Thị Điện Máy Bình Dương', 'DMBD', N'Bình Dương',
    'dienmaybd@yahoo.com', '2716631', '3425193802')
    go
    SELECT * FROM khachhang

    go
    INSERT nhacungcap VALUES('A001', N'Công Ty Kinh Đô', 'KINHDO', N'Bình Triệu - TP.HCM',
    '19001560', '0199201', 'kuteo@yahoo.com')
    INSERT nhacungcap VALUES('A002', N'Doanh Nghiệp Bình Đông', 'BINHDONGFOOD', N'Thủ Đức - TP.HCM',
    '9109210921', '22193881', 'anhem@yahoo.com')
    INSERT nhacungcap VALUES('A003', N'Công Ty Vĩnh Hảo', 'VINHHAO', N'Khánh Hòa',
    '109291012', '6009219', 'nuocsuoi@yahoo.com')
    INSERT nhacungcap VALUES('A004', N'Công Ty Bia Bến Thành', 'BENTHANH', N'Bình Dương',
    '19209301', '20939139', 'biabenthanh@yahoo.com')
    INSERT nhacungcap VALUES('A005', N'Nhà Máy VLXD Phú Thành', 'PHUTHANH', N'Bến Lức - Long An',
    '201938', '2193802', 'phuthanh@yahoo.com')
    INSERT nhacungcap VALUES('A006', N'Nhà Máy Sữa Thống Nhất Vinamilk', 'VINAMILK', N'Thủ Đức - TP.HCM',
    '91839219', '0918928910', 'suavoi@yahoo.com')
    INSERT nhacungcap VALUES('A007', N'Công ty may Việt Tiến', 'VIETTIEN', N'TP.HCM'
    , '213201938', '21991012', 'viettien@yahoo.com')
    INSERT nhacungcap VALUES('A008', N'Siêu Thị Điện Máy Bình Dương', 'DMBD', N'Bình Dương'
    , '2716631', '3425193802', 'dienmaybd@yahoo.com')
    go
    SELECT * FROM nhacungcap

    go
    INSERT loaihang VALUES (1, N'Hàng tiêu dùng')
    INSERT loaihang VALUES (2, N'Thủy hải sản')
    INSERT loaihang VALUES (3, N'Thực phẩm')
    INSERT loaihang VALUES (4, N'May mặc')
    INSERT loaihang VALUES (5, N'Đồ điện tử')
    go
    SELECT * FROM loaihang

    go
    INSERT mathang VALUES ('SUAVINA', N'Sữa hộp', 'A006', 3, 10, N'Hộp', 15000)
    INSERT mathang VALUES ('SUACHUA', N'Sữa chua', 'A006', 3, 25, N'Hộp', 5000)
    INSERT mathang VALUES ('AOSOMIVT', N'Áo sơ mi', 'A007', 4, 30, N'Cái', 55000)
    INSERT mathang VALUES ('BANH01KD', N'Bánh mì Kinh Đô', 'A001', 3, 21, N'Cái', 2000)
    INSERT mathang VALUES ('TVLG24"', N'Ti vi LG 24" ', 'A008', 5, 5, N'Cái', 2500000)
    go
    SELECT * FROM mathang

    go
    INSERT nhanvien VALUES ('NV0001', N'Trương Ngọc', N'Hữu', '10/01/1970', '12/05/2007', '19021080', N'Hồng Kông', 1000000, 500000)
    INSERT nhanvien VALUES ('NV0002', N'Lưu Đức', N'Hòa', '08/06/1970', '02/05/2007', '19221040', N'China', 1100000, 500000)
    INSERT nhanvien VALUES ('NV0003', N'Lam', N'Trường', '12/01/1974', '10/11/2008', '19901005', N'Sài Gòn', 900000, 300000)
    INSERT nhanvien VALUES ('NV0004', N'Quang', N'Dũng', '11/10/1974', '02/24/2007', '19051280', N'Đồng Nai', 1500000, 540000)
    go
    SELECT * FROM nhanvien

    còn 2 Table nữa mình sẽ post lên sau

    Với dữ liệu này ta có thể làm 1 số truy vấn đơn giản được rồi. Mời các bạn làm nha

    1 Cho biết danh sách các đối tác cung cấp hàng cho công ty.

    2 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.

    3 Họ tên và địa chỉ và năm bắt đầu làm việc của các nhân viên trong công ty.

    4 Địa chỉ và điện thoại của nhà cung cấp có tên giao dịch VINAMILK là gì?
    Các bạn hãy làm đi nhé. Tui sẽ post đáp án sau.
    Chúc 1 ngày vui vẻ.
    Coi lại

  • Phần 1

  • Phần 2
  • Bài tập demo cho câu lệnh SQL (phan 2)

    Sau khi thực hiện các thao tác tạo database trên chúng ta sẽ có mô hình Diagram sau:
    Mô tả:

    - 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à thông tin về các nhân viên làm việc trong công ty.

    - Bảng KHACHHANG được sử dụng để lưu giữ thông tin về các khách hàng của công ty.

    - Khách hàng đặt hàng cho công ty thông qua các đơn đặt hàng. Thông tin chung về các đơn đặt hàng được lưu trữ trong bảng DONDATHANG (Mỗi một đơn đặt hàng phải do một nhân viên của công ty lập và do đó bảng này có quan hệ với bảng NHANVIEN)

    - Thông tin chi tiết của các đơn đặt hàng (đặt mua mặt hàng gì, số lượng, giá cả,...) được lưu trữ trong bảng CHITIETDATHANG. Bảng này có quan hệ với hai bảng DONDATHANG và MATHANG.

    Bây giờ các bạn hãy chuẩn bị dữ liệu cho các Table trong Database trên đi!
    Chúng ta sẽ gặp lại ở phần 3.
    Chúc một ngày vui vẻ.
    (Coi lại phần 1 tại đây )



    Bài tập demo cho câu lệnh SQL (phan 1)

    Tuy đây làm bài tập mình sưu tầm trong 1 số giáo trình dạy ở Cao Đẳng, Đại Học.. nó không đầy đủ lắm nhưng nó sẽ là kiến thức bổ ít cho các bạn theo học SQL Server. Các thao tác truy vấn từ dễ đến khó
    - Trước tiên hãy tạo Database BANHANG:

    Mã:
    CREATE DATABASE BANHANG
    go
    USE BANHANG
    go

    CREATE TABLE nhacungcap
    (
    macongty NVARCHAR(10) NOT NULL CONSTRAINT pk_nhacungcap PRIMARY KEY(macongty),
    tencongty NVARCHAR(40) NOT NULL,
    tengiaodich NVARCHAR(30) NULL,
    diachi NVARCHAR(60) NULL,
    dienthoai NVARCHAR(20) NULL,
    fax NVARCHAR(20) NULL,
    email NVARCHAR(50) NULL
    )
    go

    CREATE TABLE loaihang
    (
    maloaihang INT NOT NULL CONSTRAINT pk_loaihang PRIMARY KEY(maloaihang),
    tenloaihang NVARCHAR(15) NOT NULL
    )
    go

    CREATE TABLE mathang
    (
    mahang NVARCHAR(10) NOT NULL CONSTRAINT pk_mathang PRIMARY KEY(mahang),
    tenhang NVARCHAR(50) NOT NULL,
    macongty NVARCHAR(10) NULL ,
    maloaihang INT NULL ,
    soluong INT NULL,
    donvitinh NVARCHAR(20) NULL ,
    giahang MONEY NULL
    )
    go

    CREATE TABLE nhanvien
    (
    manhanvien NVARCHAR(10) NOT NULL CONSTRAINT pk_nhanvien PRIMARY KEY(manhanvien),
    ho NVARCHAR(20) NOT NULL ,
    ten NVARCHAR(10) NOT NULL ,
    ngaysinh DATETIME NULL ,
    ngaylamviec DATETIME NULL ,
    diachi NVARCHAR(50) NULL ,
    dienthoai NVARCHAR(15) NULL ,
    luongcoban MONEY NULL ,
    phucap MONEY NULL
    )
    go

    CREATE TABLE khachhang
    (
    makhachhang NVARCHAR(10) NOT NULL CONSTRAINT pk_khachhang PRIMARY KEY(makhachhang),
    tencongty NVARCHAR(50) NOT NULL ,
    tengiaodich NVARCHAR(30) NOT NULL ,
    diachi NVARCHAR(50) NULL ,
    email NVARCHAR(30) NULL ,
    dienthoai NVARCHAR(15) NULL ,
    fax NVARCHAR(15) NULL
    )
    go

    CREATE TABLE dondathang
    (
    sohoadon INT NOT NULL CONSTRAINT pk_dondathang PRIMARY KEY(sohoadon),
    makhachhang NVARCHAR(10) NULL ,
    manhanvien NVARCHAR(10) NULL ,
    ngaydathang SMALLDATETIME NULL ,
    ngaygiaohang SMALLDATETIME NULL ,
    ngaychuyenhang SMALLDATETIME NULL ,
    noigiaohang NVARCHAR(50) NULL
    )
    go

    CREATE TABLE chitietdathang
    (
    sohoadon INT NOT NULL ,
    mahang NVARCHAR(10) NOT NULL ,
    giaban MONEY NOT NULL ,
    soluong SMALLINT NOT NULL ,
    mucgiamgia REAL NOT NULL,
    CONSTRAINT pk_chitietdathang
    PRIMARY KEY(sohoadon,mahang)
    )
    go

    Đây là Database mô tả công việc bán hàng của 1 cty. Các Table đã được đưa về các dạng chuẩn rồi. Chúng ta sẽ tạo các liên kết cho Database:

    - Ràng buộc thiết lập giá trị mặc định bằng 1 cho cột SOLUONG và bằng 0 cho cột MUCGIAMGIA trong bảng CHITIETDATHANG

    - Bảng DONDATHANG ràng buộc kiểm tra ngày giao hàng và ngày chuyển hàng phải sau hoặc bằng với ngày đặt hàng.

    - Ràng buộc cho bảng NHANVIEN để đảm bảo rằng một nhân viên chỉ có thể làm việc trong công ty khi đủ 18 tuổi và không quá 60 tuổi.


    Mã:
    go

    ALTER TABLE mathang
    ADD CONSTRAINT fk_mathang_loaihang FOREIGN KEY (maloaihang)
    REFERENCES loaihang(maloaihang)
    ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT fk_mathang_nhacungcap
    FOREIGN KEY (macongty)REFERENCES nhacungcap(macongty)
    ON DELETE CASCADE ON UPDATE CASCADE
    go

    ALTER TABLE dondathang
    ADD CONSTRAINT fk_dondathang_khachhang FOREIGN KEY (makhachhang)
    REFERENCES khachhang(makhachhang)
    ON DELETE CASCADE ON UPDATE CASCADE ,CONSTRAINT fk_dondathang_nhanvien
    FOREIGN KEY (manhanvien)REFERENCES nhanvien(manhanvien)
    ON DELETE CASCADE ON UPDATE CASCADE
    go

    ALTER TABLE chitietdathang
    ADD CONSTRAINT fk_chitiet_dondathang FOREIGN KEY (sohoadon)
    REFERENCES dondathang(sohoadon)
    ON DELETE CASCADE ON UPDATE CASCADE ,
    CONSTRAINT fk_chitiet_mathang FOREIGN KEY (mahang)
    REFERENCES mathang(mahang)
    ON DELETE CASCADE ON UPDATE CASCADE
    go

    ALTER TABLE chitietdathang
    ADD CONSTRAINT df_chitietdathang_soluong DEFAULT(1) FOR soluong,
    CONSTRAINT df_chitietdathang_mucgiamgia DEFAULT(0) FOR Mucgiamgia
    go

    ALTER TABLE dondathang
    ADD CONSTRAINT chk_dondathang_ngay CHECK (ngaygiaohang>=ngaydathang AND
    ngaychuyenhang>=ngaydathang)
    go

    ALTER TABLE nhanvien
    ADD CONSTRAINT chk_nhanvien_ngaylamviec CHECK (datediff(yy,ngaysinh,ngaylamviec)
    BETWEEN 18 AND 60)
    Chúc các bạn học tốt.(Mời các bạn đọc phần 2 tại đây)

    Lỗi thường gặp khi cài MS SQL server 2000

    Đây là cái hình chụp khi gặp phải lỗi mà chúng ta hay mắc phải:

    Các bước thực hiện để sửa như sau:

    Tắt hết các phần cài đặt của SQL đi đã nhé.

    Vào của sổ Run, gõ regedit

    Phần bên trái của cửa sổ, các bạn mở các nút của cây sau.

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager

    Nhìn khung bên phải, chọn dòng có tên là PendingFileRenameOperations

    Sau đó xóa nó đi.

    Đóng cửa sổ này lại, và cài bình thường

    Cách khác ngắn hơn là vào Run gõ Regedit

    sau đó nhấn ctrl + F và tìm dòng chữ PendingFileRenameOperations , tìm thấy xóa nó đi là OK.

    Sau đó tắt cửa sổ Regeditor đi. và cài bình thường. :D
    Chúc các bạn thành công.

    Dùng TRIGGER thay cho CONSTRAINT CHECK

    Các Table sử dụng ràng buộc CONSTRAINT CHECK để định dạng kiểu dữ liệu nhập vào như số Phone: 4444-123456 nếu ta nhập không đúng kiểu định dạng thì SQL sẽ trả lời 1 câu tiếng Anh thấy ghét (tại mình dở tiếng Anh) mà nhiều khi kiếm lỗi hoài mà không biết vì sao.

    Vì vậy mình có thể tạo 1 TRIGGER dùng để kiểm tra lại cách đó nhưng mình sẽ ra 1 câu thông báo mà mình muốn cảnh báo cho người nhập sai kiểu định dạng dữ liệu.
    Đầu tiên ta tạo 1 Table mà không dùng CONSTRAINT CHECK

    CREATE TABLE Sinhvien
    (
    masv varchar(6) CONSTRAINT pk_masv PRIMARY KEY,
    Tensv varchar(30),
    Dienthoai varchar(15)
    )
    go


    /*-- thay vì Dienthoai dung CONSTRAINT chk_DT CHECK (Dienthoai like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]'), thì sẽ chấp nhận kiểu dữ liệu nhập vào XXXX-YYYYYY ; X và Y là các số tu 0-9*/
    Tạo 1 TRIGGER

    CREATE TRIGGER trgcheckphone
    ON Sinhvien
    FOR INSERT, UPDATE
    AS
    BEGIN
    DECLARE @dienthoai varchar(15)
    SELECT @dienthoai= Dienthoai FROM Inserted
    IF @dienthoai not like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]'
    BEGIN
    PRINT 'So dien thoai cap nhat phai dinh dang: XXXX-XXXXXX'
    ROLLBACK TRANSACTION
    END
    END


    Như vậy là ta có thể an tâm sử dụng cái trigger này để kiểm tra cách nhập dữ liệu của trường Dienthoai rồi. Thử nhập

    INSERT Sinhvien VALUES('SV0001','Nguyen van A','1234-124512') --du lieu nay chap nhan
    go
    INSERT Sinhvien VALUES('SV0002','Tran van B','1234124512') --du lieu nay se khong chap