intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giới thiệu về MYSQL

Chia sẻ: Ngô Anh Tân | Ngày: | Loại File: DOC | Số trang:13

202
lượt xem
66
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

SQL là một chuẩn của ANSI (American National Standards Institute - Viện tiêu chuẩn quốc gia Hoa kỳ)

Chủ đề:
Lưu

Nội dung Text: Giới thiệu về MYSQL

  1. Giới thiệu về MYSQL SQL là chuẩn ngôn ngữ ANSI để truy cập CSDL. SQL là gì? * SQL là viết tắt của Structured Query Language - Ngôn ngữ truy vấn cấu trúc. * SQL cho phép bạn truy cập vào CSDL. * SQL là một chuẩn ngôn ngữ của ANSI. * SQL có thể thực thi các câu truy vấn trên CSDL. * SQL có thể lấy dữ liệu từ CSDL. * SQL có thể chèn dữ liệu mới vào CSDL. * SQL có thể xoá dữ liệu trong CSDL. * SQL có thể sửa đổi dữ liệu hiện có trong CSDL. * SQL dễ học SQL là một chuẩn SQL là một chuẩn của ANSI (American National Standards Institute - Viện tiêu chuẩn quốc gia Hoa kỳ) về truy xuất các hệ thống CSDL. Các câu lệnh SQL được sử dụng để truy xuất và c ập nhật dữ liệu trong một CSDL. SQL hoạt động với hầu hết các chương trình CSDL như MS Access, DB2, Informix, MS SQL Server, Oracle, Sybase v.v... Lưu ý: Hầu hết các chương trình CSDL hỗ trợ SQL đều có phần mở rộng cho SQL chỉ hoạt động với chính chương trình đó. Bảng CSDL Một CSDL thường bao gồm một hoặc nhiều bảng (table). Mỗi b ảng đ ược xác đ ịnh thông qua một tên (ví dụ Customers hoặc Orders). Bảng chứa các mẩu tin - dòng (record - row), là dữ li ệu của bảng. Dưới đây là một ví dụ về một bảng có tên là Persons (người): LastName FirstName Address City Hansen Ola Timoteivn 10 Sandnes Svendson Tove Borgvn 23 Sandnes Pettersen Kari Storgt 20 Stavanger Bảng ở trên bao gồm 3 mẩu tin (dòng), mỗi mẩu tin tương ứng với m ột ng ười, và b ốn c ột (LastName, FirstName, Address và City). Câu truy vấn SQL Với SQL ta có thể truy vấn CSDL và nhận lấy kết quả trả về thông qua các câu truy v ấn. Một câu truy vấn như sau: SELECT LastName FROM Persons Sẽ trả về kết quả như sau: LastName Hansen Svendson Pettersen Lưu ý: Một số hệ thống CSDL đòi hỏi câu lệnh SQL phải kết thúc bằng m ột d ấu ch ấm ph ảy ( ;). Chúng ta sẽ không dùng dấu chấm phảy trong bài viết này. SQL là ngôn ngữ thao tác dữ liệu (DML - Data Manipulation Language) SQL là cú pháp để thực thi các câu truy vấn. SQL cũng bao g ồm cú pháp đ ể c ập nh ật - s ửa đ ổi, chèn thêm và xoá các mẩu tin. Sau đây là danh sách các lệnh và truy vấn dạng DML của SQL: • SELECT - lấy dữ liệu từ một bảng CSDL. • UPDATE - cập nhật/sửa đổi dữ liệu trong bảng. • DELETE - xoá dữ liệu trong bảng. • INSERT INTO - thêm dữ liệu mới vào bảng. SQL là ngôn ngữ định nghĩa dữ liệu (DDL - Data Definition Language) Phần DDL của SQL cho phép tạo ra hoặc xoá các bảng. Chúng ta cũng có thể đ ịnh nghĩa các khoá (key), chỉ mục (index), chỉ định các liên kết giữa các bảng và thi ết lập các quan h ệ ràng
  2. buộc giữa các bảng trong CSDL. Các lệnh DDL quan trọng nhất của SQL là: • CREATE TABLE - tạo ra một bảng mới. • ALTER TABLE - thay đổi cấu trúc của bảng. • DROP TABLE - xoá một bảng. • CREATE INDEX - tạo chỉ mục (khoá để tìm kiếm - search key). • DROP INDEX - xoá chỉ mục đã được tạo. Mệnh đề WHERE Mệnh đề WHERE được dùng để thiết lập điều kiện truy xuất. Mệnh đề WHERE Để truy xuất dữ liệu trong bảng theo các điều kiện nào đó, m ột m ệnh đ ề WHERE có thể được thêm vào câu lệnh SELECT. Cú pháp Cú pháp mệnh đề WHERE trong câu lệnh SELECT như sau: SELECT tên_cột FROM tên_bảng WHERE tên_cột phép_toán giá_trị Trong mệnh đề WHERE, các phép toán được sử dụng là Phép toán Mô tả = So sánh bằng So sánh không bằng > Lớn hơn < Nhỏ hơn >= Lớn hơn hoặc bằng
  3. Câu lệnh đúng: SELECT * FROM Persons WHERE FirstName = 'Tove' Câu lệnh sai: SELECT * FROM Persons WHERE FirstName = Tove Với dữ liệu dạng số: Câu lệnh đúng: SELECT * FROM Persons WHERE Year > 1965 Câu lệnh sai: SELECT * FROM Persons WHERE Year > '1965' Phép toán điều kiện LIKE Phép toán LIKE được dùng để tìm kiếm một chuỗi mẫu văn bản trên một c ột. Cú pháp Cú pháp của phép toán LIKE như sau: SELECT tên_cột FROM tên_bảng WHERE tên_cột LIKE mẫu Một ký hiệu % có thể được sử dụng để định nghĩa các ký tự đại diện. % có thể được đặt trước và/hoặc sau mẫu. Sử dụng LIKE Câu lệnh SQL sau sẽ trả về danh sách những người có tên bắt đầu b ằng ch ữ O: SELECT * FROM Persons WHERE FirstName LIKE 'O%' Câu lệnh SQL sau sẽ trả về danh sách những người có tên k ết thúc b ằng ch ữ a: SELECT * FROM Persons WHERE FirstName LIKE '%a' Câu lệnh SQL sau sẽ trả về danh sách những người có tên k ết ch ứa chu ỗi la:SELECT * FROM Persons WHERE FirstName LIKE '%la%' Toán tử lô-gic AND và OR AND và OR Hai toán tử AND và OR nối hai hoặc nhiều điều kiện trong m ệnh đ ề WHERE l ại với nhau. Toán tử AND sẽ hiển thị 1 dòng nếu TẤT CẢ các điều kiện đều tho ả mãn. Toán tử OR hiển thị một dòng nếu BẤT KỲ điều kiện nào được thoả. Bảng dữ liệu dùng trong ví dụ LastNameFirstNameAddressCityHansenOlaTimoteivn 10SandnesSvendsonToveBorgvn 23SandnesSvendsonStephenKaivn 18Sandnes Ví dụ 1 Sử dụng AND để tìm những người có tên là Tove và họ là Svendson: SELECT * FROM PersonsWHERE FirstName = 'Tove'AND LastName = 'Svendson' Kết quả trả về: LastNameFirstNameAddressCitySvendsonToveBorgvn 23Sandnes Ví dụ 2 Sử dụng OR để tìm những người có tên là Tove hoặc họ là Svendson: SELECT * FROM PersonsWHERE firstname = 'Tove'OR lastname = 'Svendson' Kết quả trả về: LastNameFirstNameAddressCitySvendsonToveBorgvn 23SandnesSvendsonStephenKaivn 18Sandnes
  4. Ví dụ 3 Bạn cũng có thể sử dụng kết hợp AND và OR cùng với dấu ngo ặc đ ơn đ ể t ạo nên các câu truy vấn phức tạp: SELECT * FROM Persons WHERE(FirstName = 'Tove' OR FirstName = 'Stephen')AND LastName = 'Svendson' Kết quả trả về: LastNameFirstNameAddressCitySvendsonToveBorgvn 23SandnesSvendsonStephenKaivn 18Sandnes Toán tử BETWEEN...AND Toán tử BETWEEN...AND lấy ra một miền dữ liệu nằm giữa hai giá trị. Hai giá trị này có thể là số, chuỗi văn bản hoặc ngày tháng. SELECT tên_cột FROM tên_bảng WHERE tên_cột BETWEEN giá_trị_1 AND giá_trị_2 Bảng dữ liệu dùng trong ví dụ LastNameFirstNameAddressCityHansenOlaTimoteivn 10SandnesNordmannAnnaNeset 18SandnesPettersenKariStorgt 20StavangerSvendsonToveBorgvn 23Sandnes Ví dụ 1 Tìm tất cả những người có họ (sắp xếp theo ABC) nằm giữa Hansen (tính luôn Hansen) và Pettersen (không tính Pettersen): SELECT * FROM Persons WHERE LastName BETWEEN 'Hansen' AND 'Pettersen' Kết quả trả về: LastNameFirstNameAddressCityHansenOlaTimoteivn 10SandnesNordmannAnnaNeset 18Sandnes Lưu ý quan trọng: Toán tử BETWEEN...END sẽ trả về những kết quả khác nhau trên các hệ CSDL khác nhau. Với một số hệ CSDL, toán t ử BETWEEN...END sẽ trả về các dòng mà có giá trị thực sự "nằm giữa" hai khoảng giá trị (tức là bỏ qua không tính đến các giá tr ị trùng v ới giá tr ị c ủa hai đầu mút). Một số hệ CSDL thì sẽ tính luôn các giá trị trùng với hai đầu mút. Trong khi đó một số hệ CSDL khác lại chỉ tính các giá tr ị trùng v ới đ ầu mút th ứ nhất mà không tính đầu mút thứ hai (như ở ví dụ phía trên). Do v ậy, b ạn ph ải kiểm tra lại hệ CSDL mà bạn đang dùng khi sử dụng toán tử BETWEEN...AND. Ví dụ 2 Để tìm những người có họ (sắp xếp theo ABC) nằm ngoài khoảng hai giá tr ị ở ví dụ 1, ta dùng thêm toán tử NOT: SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Hansen' AND 'Pettersen' Kết quả trả về: LastNameFirstNameAddressCityPettersenKariStorgt 20StavangerSvendsonToveBorgvn 23Sandnes Câu lệnh INSERT INTO. Câu lệnh INSERT INTO Câu lệnh INSERT INTO được dùng để chèn dòng mới vào b ảng. Cú pháp: INSERT INTO tên_bảng VALUES (giá_trị_1, giá_trị_2,.... ) Bạn cũng có thể chỉ rõ các cột/trường nào cần chèn dữ liệu: INSERT INTO tên_bảng (cột_1, cột_2,...)
  5. VALUES (giá_trị_1, giá_trị_2,.... ) Chèn 1 dòng mới Ta có bảng Persons như sau: LastNameFirstNameAddressCityPettersenKariStorgt 20Stavanger Câu lệnh SQL sau: INSERT INTO Persons VALUES ('Hetland', 'Camilla', 'Hagabakka 24', 'Sandnes') sẽ tạora kết quả trong bảng Persons như sau: LastNameFirstNameAddressCityPettersenKariStorgt 20StavangerHetlandCamillaHagabakka 24Stavanger Chèn dữ liệu vào các cột/trường cụ thể Với bảng Persons như trên, câu lệnh SQL sau: INSERT INTO Persons (LastName, Address) VALUES ('Rasmussen', 'Storgt 67') Sẽ tạo ra kết quả: LastNameFirstNameAddressCityPettersenKariStorgt 20StavangerHetlandCamillaHagabakka 24StavangerRasmussenStorgt 67 Câu lệnh UPDATE Câu lệnh UPDATE Câu lệnh UPDATE được sử dụng để cập nhật/sửa đổi dữ liệu đã có trong b ảng. Cú pháp: UPDATE tên_bảng SET tên_cột = giá_trị_mới WHERE tên_cột = giá_trị Ví dụ: bảng Person của ta như sau: LastNameFirstNameAddressCityNilsenFredKirkegt 56StavangerRasmussenStorgt 67 Cập nhật 1 cột trên 1 dòng Giả sử ta muốn bổ xung thêm phần tên cho người có họ là Rasmussen: UPDATE Person SET FirstName = 'Nina' WHERE LastName = 'Rasmussen' Ta sẽ có kết quả như sau: LastNameFirstNameAddressCityNilsenFredKirkegt 56StavangerRasmussenNinaStorgt 67 Cập nhật nhiều cột trên 1 dòng Bây giờ ta lại muốn đổi tên và địa chỉ: UPDATE Person SET Address = 'Stien 12', City = 'Stavanger' WHERE LastName = 'Rasmussen' Kết quả sẽ là: LastNameFirstNameAddressCityNilsenFredKirkegt 56StavangerRasmussenNinaStien 12Stavanger Câu lệnh DELETE
  6. Câu lệnh DELETE được dùng để xoá các dòng ra khỏi bảng. Cú pháp: DELETE FROM tên_bảng WHERE tên_cột = giá_trị Ví dụ: Bảng Person của ta như sau: LastNameFirstNameAddressCityNilsenFredKirkegt 56StavangerRasmussenNinaStien 12Stavanger Xoá 1 dòng: Ta xoá người có tên là Nina Rasmussen: DELETE FROM Person WHERE LastName = 'Rasmussen' Kết quả sau khi xoá: LastNameFirstNameAddressCityNilsenFredKirkegt 56Stavanger Xoá tất cả các dòng: Đôi khi ta muốn xoá tất cả dữ liệu trong bảng nhưng vẫn gi ữ lại bảng cùng v ới cấu trúc và tất cả các thuộc tính của bảng, ta có thể dùng câu lệnh: DELETE FROM table_name hoặcDELETE * FROM table_name Hàm COUNT SQL có sẵn lệnh để đếm các dòng trong CSDL. Cú pháp của hàm COUNT: SELECT COUNT(tên_cột) FROM tên_bảng Hàm COUNT : trả về số lượng các dòng được chọn ở trong bảng. Hàm COUNT Ví dụ ta có bảng Persons như sau: NameAgeHansen, Ola34Svendson, Tove45Pettersen, Kari19 Câu lệnh sau sẽ trả về số lượng các dòng trong bảng: SELECT COUNT(*) FROM Persons và kết quả trả về sẽ là: 3 Câu lệnh sau sẽ trả về số lượng những người lớn hơn 20 tuổi: SELECT COUNT(*) FROM Persons WHERE Age > 20 kết quả trả về sẽ là: 2 Hàm COUNT(column): Hàm COUNT(column) sẽ trả về số lượng các dòng có giá trị khác NULL ở c ột được chỉ định. Ví dụ ta có bảng Persons như sau: NameAgeHansen, Ola34Svendson, Tove45Pettersen, Kari Câu lệnh sau sẽ trả về số lượng những người mà cột Age trong bảng không rỗng: SELECT COUNT(Age) FROM Persons và kết quả trả về sẽ là: 2 Mệnh đề COUNT DISTINCT Lưu ý: Các ví dụ dưới đây chỉ hoạt động với CSDL Oracle và MS SQL Server, không hoạt động trên MS Access (chưa thử nhiệm với các hệ CSDL khác!) Từ khoá DISTINCT và COUNT có thể được dùng chung với nhau để đếm số
  7. lượng các kết quả không trùng nhau. Cú pháp như sau: SELECT COUNT(DISTINCT column(s)) FROM table Ví dụ ta có bảng Orders như sau: CompanyOrderNumberSega3412W3Schools2312Trio4678W3Schools6798 Câu lệnh SQL sau: SELECT COUNT(DISTINCT Company) FROM Orders sẽ trả về kết quả là:3 Phần Nâng cao-Hàm SQL có sẵn khá nhiều hàm để thực hiện đếm và tính toán. Cú pháp: Cú pháp để gọi hàm trong câu lệnh SQL như sau: SELECT function(tên_cột) FROM tên_bảng Bảng dữ liệu chúng ta sẽ dùng trong các ví sụ tiếp theo: NameAgeHansen, Ola34Svendson, Tove45Pettersen, Kari19 Hàm AVG(column) Hàm AVG trả về giá trị trung bình tính theo cột được ch ỉ đ ịnh c ủa các dòng được chọn. Các giá trị NULL sẽ không được xét đến khi tính giá tr ị trung bình. Ví dụ: Câu lệnh sau sẽ tính số tuổi trung bình của những ng ười có tu ổi trên 20: SELECT AVG(Age) FROM Persons WHERE Age > 20 kết quả trả về sẽ là: 39.5 Hàm MAX(column) Hàm MAX trả về giá trị lớn nhất trong cột. Các giá trị NULL s ẽ không đ ược xét đến. Ví dụ: SELECT MAX(Age) FROM Persons kết quả trả về: 45 Hàm MIN(column) Hàm MAX trả về giá trị nhỏ nhất trong cột. Các giá trị NULL s ẽ không đ ược xét đến. Ví dụ: SELECT MIN(Age) FROM Persons kết quả trả về: 19 Lưu ý: Hàm MIN và MAX cũng có thể áp dụng cho các cột có d ữ li ệu là chu ỗi văn bản. Dữ liệu trong cột sẽ được so sánh theo thứ tự tăng dần của t ừ điển Hàm SUM(column) Hàm SUM trả về tổng giá trị của cột. Các giá trị NULL sẽ không đ ược xét đ ến. Ví dụ: Tìm tổng số tuổi của tất cả những người có trong bảng: SELECT SUM(Age) FROM Persons kết quả trả về: 98
  8. Ví dụ: Tìm tổng số tuổi của tất cả những người có tuổi lớn hơn 20: SELECT SUM(Age) FROM Persons WHERE Age > 20 kết quả trả về:79 Tạo CSDL và bảng với CREATE Tạo một CSDL CREATE DATABASE tên_CSDL Tạo một bảng trong một CSDL CREATE TABLE tên_bảng ( tên_cột_1 kiểu_dữ_liệu, tên_cột_2 kiểu_dữ_liệu, ....... ) Ví dụ Tạo một bảng tên Person có bốn cột: LastName, FirstName, Address và Age: CREATE TABLE Person ( LastName varchar, FirstName varchar, Address varchar, Age int ) Tạo bảng và đặt kích thước tối đa của các cột: CREATE TABLE Person ( LastName varchar(30), FirstName varchar, Address varchar, Age int(3) ) Kiểu dữ liệu sẽ qui định loại dữ liệu nào được phép lưu trữ trong c ột. Sau đây là các kiểu dữ liệu thường dùng nhất trong SQL: integer(n) int(n) smallint(n) tinyint(n)Chỉ lưu trữ dữ liệu là số nguyên. Số lượng tối đa các ch ữ số đ ược qui định bởi n.decimal(n,d) numeric(n,d)Lưu trữ số thập nhân. Số lượng tối đa các chữ số được qui đ ịnh b ởi n. Số lượng tối đa các chữ số sau dấu phảy thập phân được qui định b ởi d.char(n)Lưu trữ n ký tự.varchar(n)Lưu trữ tối đa n ký tự.date(yyyymmdd)Lưu trữ ngày tháng (dạng năm-tháng-ngày) Tạo chỉ mục Chỉ mục được tạo ra nhằm để các dòng trong bảng được truy xuất nhanh và
  9. hiệu quả hơn. Chỉ mục có thể được tạo trên một hoặc nhiều cột của bảng, và mỗi chỉ mục được đặt một tên. Người dùng không thấy được các chỉ mục này, chúng chỉ được dùng để tăng tốc cho CSDL. Lưu ý: Sau khi bảng đã được tạo chỉ mục thì việc cập nhật thay thêm dòng m ới vào bảng sẽ mất nhiều thời gian hơn là đối với bảng không có ch ỉ m ục. Lý do là vì khi cập nhật bảng, các chỉ mục đồng thời cũng phải được cập nhật theo. Vì thế, ta chỉ nên tạo chỉ mục cho các cột thường xuyên dùng trong các tác v ụ tìm kiếm. Chỉ mục đơn nhất (Unique Index) Chỉ mục đơn nhất sẽ bắt buộc hai dòng bất kỳ của bảng sẽ không được phép mang cùng giá trị ở cột được tạo chỉ mục. Cú pháp: CREATE UNIQUE INDEX tên_chỉ_mục ON tên_bảng (tên_cột) Chỉ mục đơn (Simple Index) Khi không dùng từ khoá UNIQUE trong câu lệnh t ạo ch ỉ m ục, các giá tr ị trùng nhau trong cột sẽ được phép. Cú pháp: CREATE INDEX tên_chỉ_mục ON tên_bảng (tên_cột) Ví dụ Tạo một chỉ mục đơn có tên là PersonIndex trên cột LastName của bảng Person: CREATE INDEX PersonIndex ON Person (LastName) Nếu bạn muốn tạo chỉ mục sắp xếp giảm dần, bạn sử dụng thêm từ dành riêng DESC: CREATE INDEX PersonIndex ON Person (LastName DESC) Nếu bạn muốn tạo chỉ mục trên nhiều cột: CREATE INDEX PersonIndex ON Person (LastName, Firstname) Xoá chỉ mục Bạn có thể xoá chỉ mục đã tạo bằng lệnh DROP. DROP INDEX tên_bảng.tên_chỉ_mục Xoá CSDL hoặc bảng Để xoá một CSDL (các bảng trong CSDL cũng đồng thời được xoá): DROP DATABASE tên_CSDL Để xoá một bảng (toàn bộ cấu trúc, dữ liệu và chỉ mục của bảng sẽ được xoá):DROP TABLE tên_bảng Câu lệnh ALTER Thay đổi cấu trúc bảng. Câu lệnh ALTER TABLE được sử dụng để thêm hoặc xoá cột trong m ột b ảng. ALTER TABLE tên_bảng ADD tên_cột kiểu_dữ_liệu
  10. ALTER TABLE tên_bảng DROP COLUMN tên_cột Lưu ý: Một số hệ CSDL không cho phép việc xoá bỏ cột trong b ảng. Ví dụ: ta có bảng Person như sau: LastNameFirstNameAddressPettersenKariStorgt 20 Thêm một cột tên là City vào bảng Person: ALTER TABLE Person ADD City varchar(30) kết quả: LastNameFirstNameAddressCityPettersenKariStorgt 20 Xoá cột Address: ALTER TABLE Person DROP COLUMN Address kết quả: LastNameFirstNameCityPettersenKari GROUP BY và HAVING Các hàm tập hợp (ví dụ như SUM) thông thường cần thêm chức năng của mệnh đề GROUP BY. GROUP BY... Mệnh đề GROUP BY...được thêm vào SQL bởi vì các hàm tập hợp (như SUM) trả về một tập hợp của các giá trị trong cột mỗi khi chúng được g ọi, và nếu không có GROUP BY ta không thể nào tính được t ổng c ủa các giá tr ị theo t ừng nhóm riêng lẻ trong cột. Cú pháp của GROUP BY như sau: SELECT tên_cột, SUM(tên_cột) FROM tên_bảng GROUP BY tên_cột Ví dụ sử dụng GROUP BY: Giả sử ta có bảng Sales như sau: CompanyAmountW3Schools5500IBM4500W3Schools7100 Câu lệnh SQL sau: SELECT Company, SUM(Amount) FROM Sales sẽ trả về kết quả: CompanySUM(Amount)W3Schools17100IBM17100W3Schools17100 Kết quả trả về ở trên đôi khi không phải là cái mà ta mong đ ợi. Ta thêm mệnh đề GROUP BY vào trong câu lệnh SQL: SELECT Company, SUM(Amount) FROM Sales GROUP BY Company và kết quả trả về lần này sẽ là: CompanySUM(Amount)W3Schools12600IBM4500 Kết quả này đúng là cái mà ta mong muốn. HAVING... Mệnh đề HAVING...được thêm vào SQL vì mệnh đề WHERE không áp dụng được đối với các hàm tập hợp (như SUM). Nếu không có HAVING, ta không th ể nào kiểm tra được điều kiện với các hàm tập hợp. Cú pháp của HAVING như sau: SELECT tên_cột, SUM(tên_cột) FROM tên_bảng GROUP BY tên_cột HAVING SUM(tên_cột) điều_kiện giá_trị Ta sử dụng lại bảng Sales ở trên. Câu lệnh SQL sau:
  11. SELECT Company, SUM(Amount) FROM Sales GROUP BY Company HAVING SUM(Amount) > 10000 sẽ trả về kết quả: CompanySUM(Amount)W3Schools12600 Bí danh Với SQL, bí danh có thể được sử dụng cho tên của cột và tên của bảng. Bí danh cột: Cú pháp bí danh cột như sau: SELECT tên_cột AS bí_danh_cột FROM tên_bảng Bí danh bảng: Bí danh bảng có cú pháp như sau: SELECT tên_cột FROM tên_bảng AS bí_danh_bảng Ví dụ sử dụng bí danh cột: Ta có bảng Persons như sau: LastNameFirstNameAddressCityHansenOlaTimoteivn 10SandnesSvendsonToveBorgvn 23SandnesPettersenKariStorgt 20Stavanger Câu lệnh SQL sau: SELECT LastName AS Họ, FirstName AS Tên FROM Persons Sẽ trả về kết quả: HọTênHansenOlaSvendsonTovePettersenKari Câu lệnh JOIN Nối kết và khoá Đôi khi chúng ta phải lấy dữ liệu từ hai bảng cùng một lúc, chúng ta th ực hi ện một kết nối. Các bảng trong CSDL có thể quan hệ ràng buộc với nhau thông qua các khoá. Một khoá chính (primary key) là một cột mà trong đó m ỗi giá tr ị c ủa hàng ph ải là duy nhất. Mục đích của khoá là kết nối dữ liệu lại với nhau, t ừ nhi ều b ảng khác nhau mà không gây trùng lắp dữ liệu giữa các bảng. Trong bảng Employees (nhân viên) ở ví dụ dưới đây có cột Employees_ID là khoá chính, bảo đảm rằng không thể có hai dòng nào có trùng Employees_ID. Employees_ID dùng để phân biệt hai nhân viên khi họ trùng tên. Trong ví dụ dưới đây: Employee_ID là khoá chính của bảng Employees. • Prod_ID là khoá chính của bảng Orders. • Cột Employeed_ID trong bảng Orders được sử dụng để kết nối với bảng • Employees, chỉ đến nhân viên trong bảng Employees. Bảng Employees: Employees_IDName01Hansen, Ola02Svendson, Tove03Svendson, Stephen04Pettersen, Kari Bảng Orders: Prod_IDProductEmployee_ID234Printer01657Table03865Chair03
  12. Kết nối hai bảng với nhau Chúng ta có thể lấy dữ liệu từ hai bảng bằng cách kết nối chúng, t ương t ự nh ư sau: Ví dụ: Tìm xem ai đã đặt hàng sản phẩm và họ đã đặt món hàng gì: SELECT Employees.Name, Orders.Product FROM Employees, Orders WHERE Employees.Employee_ID = Orders.Employee_ID kết quả trả về: NameProductHansen, OlaPrinterSvendson, StephenTableSvendson, StephenChair Ví dụ: Tìm xem ai đã đặt hàng máy in: SELECT Employees.Name FROM Employees, Orders WHERE Employees.Employee_ID = Orders.Employee_ID AND Orders.Product = 'Printer' kết quả trả về: NameHansen, Ola Sử dụng JOIN Ta có thể sử dụng từ khoá JOIN để kết nối dữ liệu từ hai bảng. Ví dụ: INNER JOIN Cú pháp: SELECT cột_1, cột_2, cột_3 FROM bảng_1 INNER JOIN bảng_2 ON bảng_1.khoá_chính = bảng_2.khoá_ngoại Ai đã đặt hàng và họ đã đặt món hàng nào: SELECT Employees.Name, Orders.Product FROM Employees INNER JOIN Orders ON Employees.Employee_ID = Orders.Employee_ID INNER JOIN trả về tất cả các dòng ở cả hai bảng khi chúng t ương ứng v ới nhau. Nếu có một dòng ở bảng Employees không ứng với dòng nào ở bảng Orders, dòng đó sẽ không được tính. kết quả trả về: NameProductHansen, OlaPrinterSvendson, StephenTableSvendson, StephenChair Ví dụ: LEFT JOIN Cú pháp: SELECT cột_1, cột_2, cột_3 FROM bảng_1 LEFT JOIN bảng_2 ON bảng_1.khoá_chính = bảng_2.khoá_ngoại Liệt kê tất cả các nhân viên và món hàng mà họ đặt (nếu có): SELECT Employees.Name, Orders.Product FROM Employees LEFT JOIN Orders ON Employees.Employee_ID = Orders.Employee_ID LEFT JOIN trả về tất cả các dòng của bảng thứ nhất ( Employees), ngay cả khi các dòng đó không ứng với dòng nào ở bảng th ứ hai ( Orders). Nếu có một dòng nào ở bảng Employees không ứng với bất cứ dòng nào ở bảng Orders thì dòng
  13. đó cũng vẫn được tính. kết quả trả về: NameProductHansen, OlaPrinterSvendson, ToveSvendson, StephenTableSvendson, StephenChairPettersen, Kari Ví dụ: RIGHT JOIN Cú pháp: SELECT cột_1, cột_2, cột_3 FROM bảng_1 RIGHT JOIN bảng_2 ON bảng_1.khoá_chính = bảng_2.khoá_ngoại Liệt kê tất cả các mặt hàng được đặt và tên người đặt hàng (nếu có): SELECT Employees.Name, Orders.Product FROM Employees RIGHT JOIN Orders ON Employees.Employee_ID = Orders.Employee_ID RIGHT JOIN trả về tất cả các dòng ở bảng thứ hai (Orders), ngay cả khi các dòng đó không ứng với dòng nào ở bảng thứ nhất ( Employees). Nếu có một dòng nào ở bảng Orders không ứng với bất cứ dòng nào ở bảng Employees thì dòng đó cũng vẫn được tính. kết quả trả về: NameProductHansen, OlaPrinterSvendson, StephenTableSvendson, StephenChair Ví dụ: Ai đã đặt hàng máy in: SELECT Employees.Name FROM Employees INNER JOIN Orders ON Employees.Employee_ID = Orders.Employee_ID WHERE Orders.Product = 'Printer' kết quả trả về: NameHansen, Ola http://knic.vn/showthread.php?4075-Co-ban-ve-MySQL-pha-n-3-Ca-c-toa-n-tu-va-ha-m- co-ba-n&s=9507b773fefc26db30f6dc44aecdcf01
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2