Bạn đang xem : thực hành sql cho người mới bắt đầu

Trong hướng dẫn SQL cho người mới bắt đầu này, bạn sẽ tạo cơ sở dữ liệu của riêng mình, chèn dữ liệu vào cơ sở dữ liệu đó, rồi chạy các truy vấn chống lại cơ sở dữ liệu đó.

Hướng dẫn SQL này sẽ giúp bạn chạy các truy vấn SQL ngay lập tức!

Ví dụ SQL

Đây là một câu lệnh SQL mẫu:

  CHỌN *
TỪ Thú cưng;  

Đây là một ví dụ hoàn hảo về việc viết SQL dễ dàng như thế nào. Câu lệnh SQL đơn giản này thực sự làm được rất nhiều điều. Nó trả về toàn bộ bảng. Nó trả về tất cả Cột và tất cả Hàng từ bảng được gọi là Thú cưng .

Dấu hoa thị ( * ) là một ký tự đại diện, có nghĩa là “tất cả các cột”. Đó là một cách nhanh chóng và dễ dàng để lấy tất cả các cột mà không cần phải gõ hết chúng.

Đó là một trong những điều tuyệt vời về SQL. Các truy vấn SQL đơn giản nhất thường là các truy vấn mạnh mẽ nhất. Nếu chúng tôi muốn trả lại ít dữ liệu hơn, chúng tôi thực sự cần phải viết nhiều hơn.

Ví dụ: nếu chúng tôi chỉ muốn vật nuôi có tên Tìm nạp , chúng tôi sẽ thêm điều khoản WHERE quy định yêu cầu đó.

Như thế này:

  CHỌN *
TỪ Thú cưng
WHERE PetName = 'Tìm nạp';  

Mệnh đề WHERE lọc truy vấn của chúng tôi để chỉ các hàng trong đó cột PetName có giá trị là Tìm nạp .

Truy vấn này giả định rằng có một cột được gọi là PetName và một bảng có tên là Pets trong cơ sở dữ liệu.

Trong hướng dẫn SQL này, tôi sẽ chỉ cho bạn cách tạo cơ sở dữ liệu như vậy bằng SQL.

Tôi cũng sẽ chỉ cho bạn cách chèn dữ liệu vào cơ sở dữ liệu đó, cập nhật dữ liệu, xóa dữ liệu và chạy các truy vấn dựa trên cơ sở dữ liệu đó.

SQL là gì?

SQL là từ viết tắt của Ngôn ngữ truy vấn có cấu trúc.

SQL là ngôn ngữ truy vấn chuẩn được sử dụng để làm việc với cơ sở dữ liệu quan hệ.

SQL được sử dụng bởi tất cả các Hệ thống quản lý cơ sở dữ liệu quan hệ chính ( RDBMS s), bao gồm:

Tôi có thể làm gì với SQL?

Bạn có thể sử dụng SQL để chạy các truy vấn dựa trên cơ sở dữ liệu, chèn bản ghi, cập nhật bản ghi và xóa bản ghi. Bạn cũng có thể tạo các đối tượng cơ sở dữ liệu mới như cơ sở dữ liệu và bảng. Bạn cũng có thể thực hiện các tác vụ quản trị cơ sở dữ liệu, chẳng hạn như tạo thông tin đăng nhập, công việc tự động, sao lưu cơ sở dữ liệu, v.v.

Ngay cả khi bạn thực hiện công việc bằng Giao diện người dùng đồ họa (GUI), Hệ thống quản lý cơ sở dữ liệu của bạn ( DBMS ) gần như chắc chắn sẽ sử dụng SQL đằng sau để thực hiện ra nhiệm vụ đó.

Ví dụ: khi bạn tạo cơ sở dữ liệu bằng cách nhấp vào Tạo cơ sở dữ liệu và nhập chi tiết của cơ sở dữ liệu mới vào hộp thoại, khi bạn nhấp vào OK hoặc Tạo hoặc bất kỳ nội dung nào nút đọc, hệ thống cơ sở dữ liệu của bạn sẽ sử dụng câu lệnh SQL CREATE DATABASE để tiếp tục và tạo cơ sở dữ liệu như đã chỉ định.

Điều này cũng đúng với các tác vụ khác, chẳng hạn như chạy truy vấn, chèn dữ liệu, v.v.

< / p>

Điều đó nói lên rằng, bạn không cần phải học tất cả những thứ nâng cao để bắt đầu với SQL. Điều tốt về SQL là, một số tác vụ phổ biến nhất lại dễ viết nhất.

Chuẩn SQL

SQL được chuẩn hóa trong ANSI X3.135 vào năm 1986 và trong vòng vài tháng, nó đã được ISO chấp nhận là ISO 9075-1987. Tiêu chuẩn quốc tế (nay là ISO / IEC 9075) đã được sửa đổi định kỳ kể từ đó và hiện có 9 phần.

Hầu hết các nhà cung cấp cơ sở dữ liệu lớn có xu hướng tuân thủ tiêu chuẩn SQL. Điều tốt về điều đó là bạn không phải học một ngôn ngữ truy vấn mới mỗi khi bạn học một DBMS mới.

Tuy nhiên, trong thực tế, có những khác biệt giữa cách mỗi nhà cung cấp cơ sở dữ liệu triển khai tiêu chuẩn SQL. Do đó, mã mà bạn viết trong một DBMS có thể không phải lúc nào cũng hoạt động trong một DBMS khác mà không cần phải sửa đổi.

Tin tốt là tất cả các DBMS chính đều hỗ trợ các tác vụ phổ biến nhất nói chung theo cùng một cách.

Cách phát âm của SQL

SQL thường được phát âm theo một trong hai cách:

  • ess-que-el ” (tức là viết chính tả từng chữ cái)
  • phần tiếp theo ” (như cách viết gốc /phát âm).

Xem Nó được phát âm là S-Q-L hay Phần tiếp theo nếu bạn đang thắc mắc tại sao.

Tôi cần gì cho Hướng dẫn SQL này?

Để thực sự hưởng lợi từ hướng dẫn SQL này, bạn nên làm theo các ví dụ. Điều đó có nghĩa là bạn sẽ cần một nơi nào đó để nhập các truy vấn SQL. Bạn sẽ cần có những thứ như sau:

Ảnh chụp màn hình Azure Data Studio

Nếu định chạy các truy vấn SQL, bạn sẽ cần:

  • Một RDBMS được cài đặt (chẳng hạn như SQL Server, MySQL, PostgreSQL, SQLite, v.v.).
  • Một công cụ cơ sở dữ liệu cho phép bạn chạy các truy vấn SQL dựa trên RDBMS đó (chẳng hạn như MySQL WorkBench , Azure Data Studio (trong hình), DBeaver SSMS ).

Nếu bạn đã cài đặt một trong mỗi cái, thật tuyệt! Bạn có thể tiếp tục với hướng dẫn.

Nếu bạn chưa cài đặt những thứ này, hãy xem Tôi cần làm gì để chạy SQL? để biết hướng dẫn về cách cài đặt RDBMS và cơ sở dữ liệu liên quan của nó công cụ quản lý, trước khi quay lại hướng dẫn SQL này.

Tạo cơ sở dữ liệu

Khi bạn đã cài đặt RDBMS của mình và công cụ cơ sở dữ liệu thích hợp, bạn đã sẵn sàng tạo cơ sở dữ liệu:

  TẠO CƠ SỞ DỮ LIỆU PetHotel;  

Đã xong!

Câu lệnh đó thực sự đã tạo ra một cơ sở dữ liệu. Một cơ sở dữ liệu trống, nhưng vẫn là một cơ sở dữ liệu.

Cơ sở dữ liệu này sẽ chứa các bảng và dữ liệu được sử dụng trong hướng dẫn SQL này. Khi chúng tôi tạo bảng hoặc chèn dữ liệu, chúng tôi sẽ thực hiện việc đó bên trong cơ sở dữ liệu này.

Tôi nên đề cập rằng SQLite sử dụng một cú pháp khác để tạo cơ sở dữ liệu. Nếu bạn đang sử dụng SQLite, đây là cách tạo cơ sở dữ liệu trong SQLite .

Kết nối với Cơ sở dữ liệu

Trước khi bắt đầu tạo bảng, chèn dữ liệu, v.v., bạn cần đảm bảo rằng mình đang ở trong cơ sở dữ liệu phù hợp. Việc tạo cơ sở dữ liệu (như chúng tôi vừa làm) không nhất thiết phải kết nối bạn với cơ sở dữ liệu đó.

Trong nhiều DBMS (chẳng hạn như SQL Server , MySQL MariaDB ), chúng tôi có thể sử dụng phần sau để chuyển sang cơ sở dữ liệu được chỉ định :

  SỬ DỤNG PetHotel;  

Điều đó làm cho PetHotel trở thành cơ sở dữ liệu hiện tại.

Trong SQLite , có thể bạn đã ở trong cơ sở dữ liệu sau khi tạo nó. Nếu không, bạn có thể đính kèm cơ sở dữ liệu (cũng sẽ tạo cơ sở dữ liệu nếu chưa tồn tại):

  ATTACH DATABASE 'PetHotel.db' AS Pets;  

Trong PostgreSQL , nếu bạn đang sử dụng công cụ psql, bạn có thể sử dụng các công cụ sau:

  \ connect PetHotel  

Hoặc phiên bản rút gọn:

  \ c PetHotel  

Tôi nên đề cập rằng quá trình tạo và kết nối với cơ sở dữ liệu có thể rất khác nhau giữa các DBMS.

May mắn thay, hầu hết các công cụ GUI cho phép bạn kết nối với cơ sở dữ liệu bằng cách nhấp đúp vào cơ sở dữ liệu hoặc nhấp chuột phải vào tên cơ sở dữ liệu và chọn tab truy vấn mới từ trình đơn ngữ cảnh. Nếu bạn thấy mình bị mắc kẹt ở bước này, chỉ cần sử dụng GUI để tạo và / hoặc kết nối với DB của bạn.

Tạo bảng

Bây giờ bạn đã kết nối với cơ sở dữ liệu phù hợp, bạn có thể tiếp tục và tạo một số bảng.

Để tạo bảng trong SQL, hãy sử dụng câu lệnh CREATE TABLE .

Khi tạo bảng, bạn cần chỉ định các cột sẽ có trong bảng, cũng như kiểu dữ liệu của chúng. Bạn cũng có thể nêu rõ các chi tiết khác, nhưng đừng tự hiểu.

Hãy tạo một bảng:

  TẠO BẢNG PetTypes
(
    PetTypeId int NOT NULL PRIMARY KEY,
    PetType varchar (60) KHÔNG ĐẦY ĐỦ
);  

Trong trường hợp này, chúng tôi tạo một bảng có tên PetTypes . Chúng tôi biết điều đó, vì tên bảng đứng ngay sau bit CREATE TABLE .

Sau đó là danh sách các cột, được đặt trong dấu ngoặc đơn.

Bảng trên chứa các cột sau:

  • PetIdId
  • PetType

Mỗi cột được theo sau bởi kiểu dữ liệu của nó:

  • int có nghĩa là cột này chấp nhận số nguyên. Theo như tôi được biết, hầu hết các DBMS chính đều hỗ trợ khai báo các cột là int . Nếu bạn gặp bất kỳ sự cố nào, hãy thử sử dụng integer .
  • varchar (60) có nghĩa là cột này chấp nhận các chuỗi dài tối đa 60 ký tự. Các cột varchar là các chuỗi có độ dài thay đổi. Một kiểu dữ liệu chuỗi khác là char (là một chuỗi có độ dài cố định). Nếu bạn gặp sự cố khi cố gắng xác định một cột là varchar (60) , hãy thử sử dụng char (60) .

Các ràng buộc

NOT NULL

Trong ví dụ này, cả hai cột đều được xác định với các ràng buộc NOT NULL . Ràng buộc NOT NULL có nghĩa là cột này không được để trống. Khi một hàng mới được chèn, mọi cột NOT NULL phải chứa một giá trị. Các cột khác có thể vẫn trống nếu không có dữ liệu cho các cột đó.

Nếu các giá trị NULL được cho phép trong cột, bạn có thể bỏ qua phần NOT NULL hoặc khai báo nó là NULL (nghĩa là Giá trị NULL được phép trong cột này).

Một số DBMS (chẳng hạn như DB2) không hỗ trợ từ khóa NULL , và vì vậy bạn sẽ cần phải bỏ qua nó khi làm việc với các DBMS như vậy.

Khóa chính

Chúng tôi cũng đặt cột PetTypeId thành khóa chính . Khóa chính là một hoặc nhiều cột xác định duy nhất mỗi hàng trong bảng. Bạn chỉ định / các cột đã chọn của mình làm khóa chính bằng cách sử dụng ràng buộc khóa chính. Bạn có thể thực hiện việc này trong câu lệnh CREATE TABLE (giống như chúng tôi đã làm ở đây) hoặc bạn có thể thêm một câu lệnh sau bằng ALTER TABLE .

Các khóa chính phải chứa các giá trị duy nhất. Nghĩa là, đối với mỗi hàng trong bảng đó, giá trị trong cột / s khóa chính phải khác nhau trong mỗi hàng. Điều này có thể đơn giản như có các số tăng dần (như 1, 2, 3… vv) hoặc nó có thể là một mã sản phẩm (như pr4650, pr2784, pr5981… vv).

Ngoài ra, khóa chính phải chứa một giá trị. Nó không thể là NULL .

Mặc dù khóa chính là không bắt buộc, nhưng thường được coi là phương pháp hay để xác định khóa chính trên mỗi bảng.

Tạo thêm bảng

Hãy tạo thêm hai bảng:

  TẠO BẢNG Chủ sở hữu
(
    OwnerId int NOT NULL PRIMARY KEY,
    FirstName varchar (60) KHÔNG ĐỦ,
    LastName varchar (60) KHÔNG ĐỦ,
    Điện thoại varchar (20) KHÔNG ĐỦ,
    Email varchar (254)
);

TẠO Thú cưng trong BẢNG
(
    PetId int NOT NULL PRIMARY KEY,
    PetTypeId int KHÔNG ĐẦY ĐỦ TÀI LIỆU THAM KHẢO PetTypes (PetTypeId),
    OwnerId int KHÔNG ĐẦY ĐỦ TÀI LIỆU THAM KHẢO Chủ sở hữu (OwnerId),
    PetName varchar (60) KHÔNG ĐỦ,
    DOB ngày NULL
);  

Cả hai bảng này đều tương tự như bảng đầu tiên, ngoại trừ chúng có nhiều hàng hơn và một vài phần bổ sung, tôi sẽ giải thích bên dưới.

Nếu bạn quan tâm, hãy xem BẢNG TẠO SQL cho người mới bắt đầu để biết thêm một số ví dụ đơn giản về cách tạo bảng trong SQL.

Mối quan hệ

Khi chúng tôi tạo bảng Thú cưng , chúng tôi thực sự đã tạo một mối quan hệ giữa ba bảng.

Mối quan hệ đó được mô tả trong sơ đồ sau.

Sơ đồ cơ sở dữ liệu của cơ sở dữ liệu PetHotel của chúng tôi

Mối quan hệ cơ sở dữ liệu là một phần quan trọng của SQL. Mối quan hệ cho phép chúng tôi truy vấn nhiều bảng để tìm dữ liệu liên quan và nhận được kết quả chính xác và nhất quán.

Trong trường hợp của chúng tôi, chúng tôi muốn có thể tìm kiếm vật nuôi theo chủ sở hữu hoặc vật nuôi theo loại vật nuôi, v.v. Và chúng tôi muốn kết quả của mình chính xác và nhất quán.

Để đạt được điều này, chúng tôi cần nhấn mạnh rằng tất cả vật nuôi đều được nhập cùng với chủ nhân và loại vật nuôi của chúng. Do đó, chúng tôi cần đảm bảo rằng, bất cứ khi nào một vật nuôi mới được thêm vào bảng Thú cưng , thì đã có một chủ sở hữu tương ứng trong bảng Chủ sở hữu và một loại vật nuôi tương ứng trong < bảng mã> PetTypes .

Về cơ bản, các yêu cầu của chúng tôi như sau:

  • Mọi giá trị trong cột Pets.PetTypeId phải khớp với một giá trị trong cột PetTypes.PetTypeId .
  • Bất kỳ giá trị nào trong cột Cột Pets.OwnerId phải khớp với một giá trị trong cột Owners.OwnerId .

Chúng tôi có thể đảm bảo các yêu cầu trên bằng cách tạo ràng buộc khoá ngoại đối với các cột hiện hành. Ràng buộc khóa ngoại được sử dụng để chỉ định rằng một cột nhất định tham chiếu đến khóa chính của bảng khác.

Đoạn mã trên đã thực sự tạo ra hai ràng buộc khóa ngoại trên bảng Pets .

Lưu ý rằng cột PetTypeId OwnerId có một số mã bổ sung bắt đầu bằng REFERENCES ... . Đó là những phần đã tạo ra hai khóa ngoại.

Khi chúng tôi tạo bảng Pets , cột PetTypeId của nó có một bit chuyển sang TÀI LIỆU THAM KHẢO PetTypes (PetTypeId) . Điều này có nghĩa là cột Pets.PetTypeId tham chiếu đến cột PetTypeId trong bảng PetTypes .

Đó là giao dịch tương tự cho cột OwnerId . Nó tham chiếu đến OwnerIdcột của bảng Chủ sở hữu .

Trong hầu hết các DBMS, khóa ngoại cũng có thể được tạo trên một bảng hiện có bằng cách sử dụng câu lệnh ALTER TABLE , nhưng chúng tôi sẽ không xem xét điều đó ở đây. Xem Cách tạo mối quan hệ trong SQL để biết thêm về điều đó.

Dù sao, khóa ngoại của chúng tôi đã được tạo. Bây giờ, bất cứ khi nào ai đó chèn một con vật cưng mới vào bảng Pets , các giá trị PetTypeId OwnerId sẽ cần có giá trị tương ứng trong PetTypes Owners tương ứng. Nếu bất kỳ lỗi nào trong số đó không có, cơ sở dữ liệu sẽ trả về lỗi.

Đây là lợi ích của khóa ngoại. Nó giúp ngăn chặn việc nhập dữ liệu xấu. Nó giúp duy trì Toàn vẹn dữ liệu và cụ thể hơn, Toàn vẹn tham chiếu .

Kiểm tra các ràng buộc

Ràng buộc kiểm tra là một loại ràng buộc khác mà bạn nên biết. Ràng buộc kiểm tra kiểm tra dữ liệu trước khi nó đi vào cơ sở dữ liệu. Khi bảng đã bật giới hạn kiểm tra, dữ liệu chỉ có thể vào bảng nếu nó không vi phạm giới hạn đó. Dữ liệu vi phạm ràng buộc không thể nhập vào bảng.

Ví dụ: bạn có thể tạo ràng buộc kiểm tra trên cột Giá để đảm bảo rằng cột này chỉ chấp nhận các giá trị lớn hơn 0. Hoặc chúng tôi có thể áp dụng ràng buộc kiểm tra cho bảng Thú cưng để đảm bảo rằng cột DOB không có trong tương lai.

Để có ví dụ, hãy xem Ràng buộc CHECK là gì?

Khoảng trắng

Bạn có thể nhận thấy rằng các ví dụ của tôi bao gồm khoảng trắng. Ví dụ: tôi đã giãn cách mã trên nhiều dòng và tôi đã sử dụng các tab để thụt lề các loại dữ liệu, v.v.

Điều này hoàn toàn hợp lệ trong SQL. Bạn có thể làm điều này một cách an toàn và nó sẽ không ảnh hưởng đến kết quả. SQL cho phép bạn trải rộng mã của mình trên nhiều dòng nếu bạn muốn và nó cho phép bạn sử dụng nhiều dấu cách hoặc tab để cải thiện khả năng đọc.

Nhận xét

Bạn cũng có thể bao gồm các nhận xét trong mã của mình. Nhận xét có thể hữu ích khi bạn bắt đầu viết các tập lệnh SQL dài hơn. Khi một kịch bản trở nên khá dài, các nhận xét có thể giúp bạn nhanh chóng xác định chức năng của từng phần dễ dàng hơn.

Nhận xét nội tuyến

Bạn có thể tạo các nhận xét nội dòng bằng cách đặt trước nhận xét của mình bằng hai ký tự gạch nối ( - ):

  SELECT * FROM Pets; --Đây là một nhận xét

- Đây là một nhận xét
CHỌN * TỪ chủ sở hữu;  

Trong ví dụ này, cả hai truy vấn sẽ chạy mà không gặp bất kỳ sự cố nào. Các nhận xét sẽ bị DBMS bỏ qua.

Nhận xét nhiều dòng

Bạn có thể trải rộng các nhận xét trên nhiều dòng bằng cách bao quanh nhận xét bằng / * * / :

  / *
Đây là một bình luận dài hơn vì vậy
nó trải dài trên nhiều dòng
* /
CHỌN * TỪ Thú cưng;  

Trong ví dụ này, cả hai truy vấn sẽ chạy mà không gặp bất kỳ sự cố nào. Các nhận xét sẽ bị DBMS bỏ qua.

MySQL

Nếu đang sử dụng MySQL, bạn cũng có thể sử dụng ký hiệu số / ký hiệu băm ( # ) cho các nhận xét dòng đơn.

  # Đây là một nhận xét
CHỌN * TỪ Thú cưng;  

Viết bình luận về mã

Một lợi ích thú vị khác của nhận xét là bạn có thể nhận xét ra mã. Ví dụ: nếu bạn có một tập lệnh SQL dài thực hiện nhiều việc, nhưng bạn chỉ muốn chạy một hoặc hai phần của nó, bạn có thể nhận xét phần còn lại của tập lệnh.

Đây là một ví dụ:

  - CHỌN * TỪ Vật nuôi;

CHỌN * TỪ chủ sở hữu;  

Trong trường hợp này, câu lệnh SELECT đầu tiên đã được nhận xét và do đó chỉ câu lệnh SELECT thứ hai sẽ chạy.

Bạn cũng có thể sử dụng các nhận xét nhiều dòng cho kỹ thuật này.

Chèn dữ liệu

Bây giờ chúng tôi đã tạo ba bảng và tạo các khóa ngoại thích hợp, chúng tôi có thể tiếp tục và thêm dữ liệu.

Cách phổ biến nhất để chèn dữ liệu trong SQL là sử dụng câu lệnh INSERT . Nó diễn ra như thế này:

  CHÈN VÀO MyTable (Column1, Column2, Column3, ...)
GIÁ TRỊ (Value1, Value2, Value3, ...);  

Bạn chỉ cần thay thế MyTable bằng tên của bảng mà bạn đang chèn dữ liệu vào. Tương tự như vậy, bạn thay thế Column1 , v.v. bằng tên cột và Value1 , v.v. bằng các giá trị đi vào các cột đó.

Ví dụ: chúng tôi có thể làm điều này:

  CHÈN VÀO Thú cưng (PetId, PetTypeId, OwnerId, PetName, DOB)
CÁC GIÁ TRỊ (1, 2, 3, 'Fluffy', '2020-12-20');  

Mỗi giá trị có cùng thứ tự mà cột được chỉ định.

Lưu ý rằng tên cột khớp với tên chúng tôi đã sử dụng khi tạo bảng.

Bạn có thể bỏ qua tên cột nếu bạn đang chèn dữ liệu vào tất cả các cột. Vì vậy, chúng ta có thể thay đổi ví dụ trên thành như sau:

  CHÈN VÀO Thú cưng
CÁC GIÁ TRỊ (1, 2, 3, 'Fluffy', '2020-12-20');  

Đối với hướng dẫn này, chúng tôi sẽ thêm khá nhiều hàng, vì vậy chúng tôi sẽ thêm nhiều câu lệnh INSERT INTO – một câu lệnh cho mỗi hàng mà chúng tôi muốn chèn.

Vì vậy, hãy tiếp tục và điền vào các bàn của chúng ta.

  INSERT INTO Owners (OwnerId, FirstName, LastName, Phone, Email)
VALUES (1, 'Homer', 'Connery', '(308) 555-0100', ' [email protected] ');
CHÈN VÀO chủ sở hữu (OwnerId, FirstName, LastName, Phone, Email)
VALUES (2, 'Bart', 'Pitt', '(231) 465-3497', ' [email được bảo vệ] ');
CHÈN VÀO chủ sở hữu (OwnerId, FirstName, LastName, Phone)
VALUES (3, 'Nancy', 'Simpson', '(489) 591-0408');
CHÈN VÀO chủ sở hữu (OwnerId, FirstName, LastName, Phone)
GIÁ TRỊ (4, 'Boris', 'Trump', '(349) 611-8908');

CHÈN VÀO PetTypes (PetTypeId, PetType)
VALUES (1, 'Chim');
CHÈN VÀO PetTypes (PetTypeId, PetType)
VALUES (2, 'Cat');
CHÈN VÀO PetTypes (PetTypeId, PetType)
VALUES (3, 'Con chó');
CHÈN VÀO PetTypes (PetTypeId, PetType)
VALUES (4, 'Con thỏ');

CHÈN VÀO Thú cưng (PetId, PetTypeId, OwnerId, PetName, DOB)
VALUES (1, 2, 3, 'Fluffy', '2020-11-20');
CHÈN VÀO Thú cưng (PetId, PetTypeId, OwnerId, PetName, DOB)
VALUES (2, 3, 3, 'Tìm nạp', '2019-08-16');
CHÈN VÀO Thú cưng (PetId, PetTypeId, OwnerId, PetName, DOB)
VALUES (3, 2, 2, 'Scratch', '2018-10-01');
CHÈN VÀO Thú cưng (PetId, PetTypeId, OwnerId, PetName, DOB)
VALUES (4, 3, 3, 'Wag', '2020-03-15');
CHÈN VÀO Thú cưng (PetId, PetTypeId, OwnerId, PetName, DOB)
VALUES (5, 1, 1, 'Tweet', '2020-11-28');
CHÈN VÀO Thú cưng (PetId, PetTypeId, OwnerId, PetName, DOB)
VALUES (6, 3, 4, 'Fluffy', '2020-09-17');
CHÈN VÀO Thú cưng (PetId, PetTypeId, OwnerId, PetName)
GIÁ TRỊ (7, 3, 2, 'Vỏ cây');
CHÈN VÀO Thú cưng (PetId, PetTypeId, OwnerId, PetName)
GIÁ TRỊ (8, 2, 4, 'Meo meo');  

Lưu ý rằng chúng tôi đã điền bảng Thú cưng sau cùng. Có lý do cho điều này.

Nếu chúng tôi đã cố gắng chèn dữ liệu vào bảng Pets trước khi điền hai bảng kia, chúng tôi sẽ gặp lỗi do ràng buộc khóa ngoại của chúng tôi. Và vì lý do chính đáng. Sau cùng, chúng tôi sẽ cố gắng chèn các giá trị vào các cột khóa ngoại chưa tồn tại trong các cột khóa chính trên các bảng khác. Đó là một “không không” lớn khi nói đến khóa ngoại.

Vì vậy, bằng cách điền các bảng Owners PetTypes trước, chúng tôi đảm bảo rằng các giá trị thích hợp đã có trong các cột khóa chính trước khi chúng tôi điền các cột khóa ngoại vào < bảng mã> Thú cưng .

Xem CHÈN SQL cho người mới bắt đầu để biết thêm ví dụ về cách chèn dữ liệu vào bảng.

Kiểm tra dữ liệu của chúng tôi

Phù! Cuối cùng, chúng tôi có thể bắt đầu chạy các truy vấn dựa trên cơ sở dữ liệu của mình.

Hãy kiểm tra dữ liệu trong tất cả các bảng của chúng ta.

  SELECT * FROM Pets;
CHỌN * TỪ PetTypes;
CHỌN * TỪ chủ sở hữu;  

Kết quả:

 + --------- + ------------- + ----------- + - ---------- + ------------ +
| PetId | PetTypeId | OwnerId | PetName | DOB |
| --------- + ------------- + ----------- + ----------- + - ----------- |
| 1 | 2 | 3 | Bông xù | 2020-11-20 |
| 2 | 3 | 3 | Tìm nạp | 2019-08-16 |
| 3 | 2 | 2 | Cào | 2018-10-01 |
| 4 | 3 | 3 | Wag | 2020-03-15 |
| 5 | 1 | 1 | Tweet | 2020-11-28 |
| 6 | 3 | 4 | Bông xù | 2020-09-17 |
| 7 | 3 | 2 | Vỏ cây | NULL |
| 8 | 2 | 4 | Meo meo | NULL |
+ --------- + ------------- + ----------- + ----------- + - ----------- +
(8 hàng bị ảnh hưởng)
+ ------------- + ----------- +
| PetTypeId | PetType |
| ------------- + ----------- |
| 1 | Chim |
| 2 | Con mèo |
| 3 | Con chó |
| 4 | Con thỏ |
+ ------------- + ----------- +
(4 hàng bị ảnh hưởng)
+ ----------- + ------------- + ------------ + ---------- ------ + ------------------- +
| OwnerId | FirstName | LastName | Điện thoại | Email |
| ----------- + ------------- + ------------ + ---------- ------ + ------------------- |
| 1 | Homer | Kết nối | (308) 555-0100 |  [email được bảo vệ]  |
| 2 | Bart | Pittông | (231) 465-3497 |  [email được bảo vệ]  |
| 3 | Nancy | Simpson | (489) 591-0408 | NULL |
| 4 | Boris | Trump | (349) 611-8908 | NULL |
+ ----------- + ------------- + ------------ + ---------- ------ + ------------------- +
(4 hàng bị ảnh hưởng) 

Tuyệt vời, có vẻ như dữ liệu đã được chèn thành công.

Chọn các cột cụ thể

Thông thường, việc chọn tất cả các hàng và tất cả các cột từ một bảng (như chúng tôi đã làm trong ví dụ trước) thường được coi là phương pháp không tốt, trừ khi bạn thực sự cần. Việc này có thể ảnh hưởng đến hiệu suất của máy chủ cơ sở dữ liệu của bạn, đặc biệt nếu có nhiều hàng trong bảng.

Đó không phải là vấn đề khi bạn đang sử dụng các tập dữ liệu nhỏ như chúng tôi đang ở đây hoặc nếu bạn đang ở trong một môi trường phát triển hoặc môi trường tương tự. Nếu không, tốt hơn là bạn chỉ nên chọn các cột mà bạn yêu cầu.

Do đó, nếu chúng tôi muốn có ID, tên và ngày sinh của tất cả vật nuôi, chúng tôi có thể thực hiện điều này:

  CHỌN PetId, PetName, DOB
TỪ Thú cưng;  

Kết quả:

 + --------- + ----------- + ------------ +
| PetId | PetName | DOB |
| --------- + ----------- + ------------ |
| 1 | Bông xù | 2020-11-20 |
| 2 | Tìm nạp | 2019-08-16 |
| 3 | Cào | 2018-10-01 |
| 4 | Wag | 2020-03-15 |
| 5 | Tweet | 2020-11-28 |
| 6 | Bông xù | 2020-09-17 |
| 7 | Vỏ cây | NULL |
| 8 | Meo meo | NULL |
+ --------- + ----------- + ------------ + 

Nếu chúng tôi muốn có ID và ngày sinh của tất cả các vật nuôi có tên Fluffy, chúng tôi có thể sử dụng thông tin này:

  CHỌN PetId, DOB
TỪ Thú cưng
WHERE PetName = 'Fluffy';  

Kết quả:

 + --------- + ------------ +
| PetId | DOB |
| --------- + ------------ |
| 1 | 2020-11-20 |
| 6 | 2020-09-17 |
+ --------- + ------------ + 

Bạn cũng có thể sử dụng câu lệnh SELECT để trả về dữ liệu không có bảng. Nghĩa là, nó có thể trả về dữ liệu không được lưu trữ trong bảng. Xem Câu lệnh SQL SELECT cho người mới bắt đầu để xem ví dụ.

Sắp xếp

SQL cung cấp mệnh đề ORDER BY cho phép chúng tôi sắp xếp dữ liệu.

Chúng tôi có thể thêm mệnh đề ORDER BY vào ví dụ trước đó của chúng tôi để các vật nuôi được sắp xếp theo tên của chúng:

  CHỌN PetId, PetName, DOB
TỪ Thú cưng
ĐẶT HÀNG BỞI PetName ASC;  

Kết quả:

 + --------- + ----------- + ------------ +
| PetId | PetName | DOB |
| --------- + ----------- + ------------ |
| 7 | Vỏ cây | NULL |
| 2 | Tìm nạp | 2019-08-16 |
| 1 | Bông xù | 2020-11-20 |
| 6 | Bông xù | 2020-09-17 |
| 8 | Meo meo | NULL |
| 3 | Cào | 2018-10-01 |
| 5 | Tweet | 2020-11-28 |
| 4 | Wag | 2020-03-15 |
+ --------- + ----------- + ------------ + 

Phần ASC có nghĩa là tăng dần. Khi bạn sử dụng mệnh đề ORDER BY , mệnh đề này mặc định là tăng dần, vì vậy bạn có thể bỏ qua phần ASC nếu muốn.

Để sắp xếp nó theo thứ tự giảm dần, hãy sử dụng DESC .

  CHỌN PetId, PetName, DOB
TỪ Thú cưng
ĐẶT HÀNG BẰNG PetName DESC;  

Kết quả:

 + --------- + ----------- + ------------ +
| PetId | PetName | DOB |
| --------- + ----------- + ------------ |
| 4 | Wag | 2020-03-15 |
| 5 | Tweet | 2020-11-28 |
| 3 | Cào | 2018-10-01 |
| 8 | Meo meo | NULL |
| 1 | Bông xù | 2020-11-20 |
| 6 | Bông xù | 2020-09-17 |
| 2 | Tìm nạp | 2019-08-16 |
| 7 | Vỏ cây | NULL |
+ --------- + ----------- + ------------ + 

Bạn cũng có thể sắp xếp kết quả bằng nhiều cột. Nó sẽ sắp xếp theo cột đầu tiên được chỉ định, sau đó nếu có bất kỳ bản sao nào trong cột đó, nó sẽ sắp xếp các bản sao đó theo cột thứ hai được chỉ định, v.v.

  CHỌN PetId, PetName, DOB
TỪ Thú cưng
ĐẶT HÀNG BỞI PetName DESC, DOB ASC;  

Kết quả:

 + --------- + ----------- + ------------ +
| PetId | PetName | DOB |
| --------- + ----------- + ------------ |
| 4 | Wag | 2020-03-15 |
| 5 | Tweet | 2020-11-28 |
| 3 | Cào | 2018-10-01 |
| 8 | Meo meo | NULL |
| 6 | Bông xù | 2020-09-17 |
| 1 | Bông xù | 2020-11-20 |
| 2 | Tìm nạp | 2019-08-16 |
| 7 | Vỏ cây | NULL |
+ --------- + ----------- + ------------ + 

Xem hai Fluffys đã hoán đổi vị trí của chúng như thế nào.

Nếu bạn không sử dụng mệnh đề ORDER BY , không có gì đảm bảo kết quả của bạn sẽ theo thứ tự. Mặc dù có thể cơ sở dữ liệu của bạn đang sắp xếp các kết quả theo một cột cụ thể, nhưng điều này có thể thực tế không phải như vậy. Nói chung, không có mệnh đề ORDER BY , dữ liệu sẽ được sắp xếp theo thứ tự mà nó được tải vào bảng. Tuy nhiên, nếu các hàng đã bị xóa hoặc cập nhật, thứ tự sẽ bị ảnh hưởng bởi cách DBMS sử dụng lại không gian lưu trữ đã thu hồi.

Do đó, đừng dựa vào DBMS để sắp xếp kết quả theo bất kỳ thứ tự có ý nghĩa nào.

Điểm mấu chốt: Nếu bạn muốn sắp xếp kết quả của mình, hãy sử dụng ORDER BY .

Xem Mệnh đề SQL ORDER BY cho người mới bắt đầu để biết thêm ví dụ.

Đếm các hàng trong một tập hợp kết quả

Bạn có thể sử dụng hàm tổng hợp COUNT () để đếm các hàng sẽ được trả về trong một truy vấn.

  CHỌN ĐẾM (*) AS Đếm
TỪ Thú cưng;  

Kết quả:

 + --------- +
| Đếm |
| --------- |
| 8 |
+ --------- + 

Điều này cho chúng ta biết rằng có 8 hàng trong bảng. Chúng tôi biết điều đó vì chúng tôi đã chọn tất cả các hàng và tất cả các cột.

Bạn có thể sử dụng COUNT () trên bất kỳ truy vấn nào, ví dụ: các truy vấn sử dụng mệnh đề WHERE để lọc kết quả.

Bạn cũng có thể chỉ định một cột cụ thể để đếm. Hàm COUNT () chỉ đếm các kết quả không phải là NULL , vì vậy nếu bạn chỉ định một cột chứa các giá trị NULL , thì những giá trị đó sẽ không được tính.

Đây là một ví dụ để chứng minh ý tôi muốn nói.

  SELECT COUNT (DOB) AS Count
TỪ Thú cưng;  

Kết quả:

 + --------- +
| Đếm |
| --------- |
| 6 |
+ --------- +
Cảnh báo: Giá trị rỗng bị loại bỏ bởi hoạt động tổng hợp hoặc SET khác. 

Bạn có thể nhớ lại rằng bảng Pets chứa hai giá trị NULL trong cột DOB (hai vật nuôi chưa cung cấp ngày sinh của chúng ), và vì vậy COUNT (DOB) trả về 6, thay vì 8 khi chúng tôi sử dụng COUNT (*) . Lý do COUNT (*) trả về tất cả các hàng là vì hai hàng đó có dữ liệu trong các cột khác.

Trong ví dụ của tôi, DBMS của tôi cũng trả lại cảnh báo về điều này. Bạn có thể nhận được cảnh báo hoặc không, tùy thuộc vào DBMS và cấu hình cụ thể của bạn.

Xem SQL COUNT cho người mới bắt đầu để biết thêm ví dụ.

Các hàm tổng hợp khác bao gồm: AVG () , SUM () , MIN () MAX () .

Nhóm Theo

Một mệnh đề hữu ích khác là mệnh đề GROUP BY . Điều này thực hiện khá nhiều những gì tên của nó hứa hẹn. Nó cho phép bạn nhóm các kết quả theo một cột nhất định.

  CHỌN
    PetTypeId,
    COUNT (PetTypeId) AS Đếm
TỪ Thú cưng
NHÓM THEO PetTypeId
ĐẶT HÀNG THEO Đếm DESC;  

Kết quả:

 + ------------- + --------- +
| PetTypeId | Đếm |
| ------------- + --------- |
| 3 | 4 |
| 2 | 3 |
| 1 | 1 |
+ ------------- + --------- + 

Trong ví dụ này, chúng tôi đang đếm số lượng vật nuôi mà chúng tôi có cho mỗi loại vật nuôi, sau đó sắp xếp nó theo thứ tự giảm dần (với số lượng cao nhất ở trên cùng).

Xem Mệnh đề SQL GROUP BY cho người mới bắt đầu để biết thêm ví dụ.

Mệnh đề HAVING

Chúng tôi có thể sử dụng mệnh đề HAVING để lọc kết quả trong mệnh đề GROUP BY . Mệnh đề HAVING trả về các hàng trong đó các giá trị tổng hợp đáp ứng các điều kiện đã chỉ định.

Đây là một ví dụ.

  CHỌN
    PetTypeId,
    COUNT (PetTypeId) AS Đếm
TỪ Thú cưng
NHÓM THEO PetTypeId
CÓ COUNT (PetTypeId) & gt; 2
ĐẶT HÀNG THEO Đếm DESC;  

Kết quả:

 + ------------- + --------- +
| PetTypeId | Đếm |
| ------------- + --------- |
| 3 | 4 |
| 2 | 3 |
+ ------------- + --------- + 

Trong trường hợp này, chúng tôi chỉ trả lại dữ liệu cho các loại vật nuôi có nhiều hơn 2 vật nuôi được chỉ định cho loại đó.

Xem Mệnh đề HAVING SQL dành cho người mới bắt đầu để biết thêm ví dụ.

Tham gia

Trong SQL, nối là nơi bạn chạy một truy vấn kết hợp dữ liệu từ nhiều bảng.

Hai ví dụ trước là OK, nhưng sẽ tốt hơn nếu chúng trả về loại vật nuôi thực tế (ví dụ: Mèo, Chó, Chim, v.v.) thay vì ID (ví dụ: 1, 2, 3, v.v.).

Vấn đề duy nhất là bảng Thú cưng không chứa dữ liệu đó. Dữ liệu đó nằm trong bảng PetTypes .

Thật may mắn cho chúng tôi, chúng tôi có thể thực hiện phép nối giữa hai bảng này. Dưới đây là một ví dụ sử dụng LEFT JOIN :

  CHỌN
    PetTypes.PetType,
    COUNT (Pets.PetTypeId) AS Đếm
TỪ Thú cưng
TRÁI THAM GIA PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId
NHÓM THEO PetTypes.PetType
ĐẶT HÀNG THEO Đếm DESC;  

Kết quả:

 + ----------- + --------- +
| PetType | Đếm |
| ----------- + --------- |
| Con chó | 4 |
| Con mèo | 3 |
| Chim | 1 |
+ ----------- + --------- + 

Bộ kết quả này dễ đọc hơn nhiều so với các bộ trước đó. Dễ hiểu hơn về số lượng từng loại vật nuôi trong bảng.

Cú pháp sử dụng kiểu kết hợp (trong trường hợp này là LEFT JOIN ), theo sau là bảng đầu tiên (bên trái), tiếp theo là ON , tiếp theo là điều kiện kết hợp.

Hãy sử dụng INNER JOIN để trả về tất cả tên vật nuôi cùng với các loại vật nuôi tương ứng của chúng.

  CHỌN
    Pets.PetName,
    PetTypes.PetType
TỪ Thú cưng
INNER THAM GIA PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId;  

Kết quả:

 + ----------- + ----------- +
| PetName | PetType |
| ----------- + ----------- |
| Bông xù | Con mèo |
| Tìm nạp | Con chó |
| Cào | Con mèo |
| Wag | Con chó |
| Tweet | Chim |
| Bông xù | Con chó |
| Vỏ cây | Con chó |
| Meo meo | Con mèo |
+ ----------- + ----------- + 

Tham gia thực sự mở ra các tùy chọn của chúng tôi, vì giờ đây chúng tôi có thể lấy dữ liệu từ nhiều bảng và trình bày nó như thể nó là một bảng duy nhất.

Bạn sẽ nhận thấy rằng trong các ví dụ kết hợp, chúng tôi xác định tên cột của mình với tên bảng. Lý do chúng tôi làm điều này là để tránh bất kỳ sự mơ hồ nào liên quan đến tên các cột cột giữa các bảng. Cả hai bảng đều có thể có các cột cùng tên (như trong ví dụ của chúng tôi) và trong những trường hợp như vậy, DBMS sẽ không biết bạn đang đề cập đến cột nào. Việc đặt tiền tố tên cột bằng tên bảng của chúng đảm bảo rằng bạn đang tham chiếu đến cột bên phải và ngăn chặn bất kỳ lỗi nào có thể phát sinh từ bất kỳ sự mơ hồ nào về cột mà bạn đang tham chiếu.

Xem SQL Joins Tutorial của tôi để biết thêm ví dụ và giải thích về các loại kết hợp khác nhau.

Bí danh

Chúng tôi có thể tiến thêm một bước nữa và chỉ định bí danh cho từng tên bảng và tên cột.

  CHỌN
    p.PetName AS Pet,
    pt.PetType AS "Loại vật nuôi"
TỪ Pt PetTypes
THAM GIA TRÁI Thú cưng p
BẬT p.PetTypeId = pt.PetTypeId;  

Kết quả:

 + --------- + ------------ +
| Thú cưng | Loại thú cưng |
| --------- + ------------ |
| Tweet | Chim |
| Bông xù | Con mèo |
| Cào | Con mèo |
| Meo meo | Con mèo |
| Tìm nạp | Con chó |
| Wag | Con chó |
| Bông xù | Con chó |
| Vỏ cây | Con chó |
| NULL | Con thỏ |
+ --------- + ------------ + 

Điều này đã dẫn đến các tiêu đề cột mới, cộng với mã ngắn gọn hơn.

Một bí danh cho phép bạn tạm thời gán một tên khác cho bảng hoặc cột trong thời gian truy vấn SELECT . Điều này có thể đặc biệt hữu ích khi bảng và / hoặc cột có tên rất dài hoặc phức tạp.

Một bí danh được chỉ định thông qua việc sử dụng từ khóa AS , mặc dù từ khóa này là tùy chọn, vì vậy bạn có thể bỏ qua nó một cách an toàn. Lưu ý rằng Oracle không hỗ trợ từ khóa AS trên bí danh bảng (nhưng nó có trên bí danh cột).

Trong ví dụ trên, tôi đã bao gồm từ khóa AS khi chỉ định bí danh cột, nhưng đã bỏ qua từ khóa này khi chỉ định bí danh bảng.

Tên bí danh có thể là bất cứ thứ gì, nhưng thường được viết tắt cho mục đích dễ đọc.

Trong trường hợp của chúng tôi, chúng tôi đã thay đổi hai bảng thành p pt và tên cột thành Pet Pet Type . Lưu ý rằng tôi đã đặt Loại vật nuôi trong dấu ngoặc kép. Tôi đã làm điều này, vì có một khoảng trống trong tên. Đối với các bí danh không có dấu cách, bạn không cần phải làm điều này. Trong SQL Server, bạn có thể sử dụng dấu ngoặc vuông ( [] ) thay vì dấu ngoặc kép (mặc dù nó cũng hỗ trợ dấu ngoặc kép).

Việc sử dụng dấu cách trong cột và bí danh thường không được khuyến khích, vì nó có thể gây ra tất cả các loại vấn đề với một số ứng dụng khách.

Lưu ý rằng chúng tôi vẫn cần sử dụng tên cột đầy đủ khi tham chiếu chúng trong phần nối (sau từ khóa ON ).

Tôi nên chỉ ra rằng việc gán bí danh không thực sự đổi tên cột hoặc bảng.

Xem Giải thích bí danh SQL để biết thêm ví dụ.

Cập nhật dữ liệu

Bạn có thể sử dụng câu lệnh UPDATE để cập nhật dữ liệu trong bảng của mình.

Cú pháp cơ bản khá đơn giản:

  CẬP NHẬT Chủ sở hữu
SET LastName = 'Stallone'
WHERE OwnerId = 3;  

Trong ví dụ đó, chúng tôi cập nhật cột LastName để có giá trị mới là Stallone trong đó OwnerId 3 .

Để cập nhật nhiều cột, hãy sử dụng dấu phẩy để phân tách từng cặp cột / giá trị.

Nhưng dù bạn làm gì, đừng quên mệnh đề WHERE (trừ khi bạn thực sự có ý định cập nhật mọi hàng trong bảng với cùng một giá trị).

Xem CẬP NHẬT cho người mới bắt đầu trong SQL để biết thêm ví dụ và giải thích chi tiết hơn.

Xóa dữ liệu

Bạn có thể sử dụng câu lệnh DELETE để xóa dữ liệu khỏi bảng của mình.

Cú pháp cơ bản thậm chí còn đơn giản hơn câu lệnh UPDATE :

  XÓA khỏi chủ sở hữu
WHERE OwnerId = 5;  

Tại đây, chúng tôi đang xóa chủ sở hữu số 5 khỏi bảng Chủ sở hữu .

Cũng như câu lệnh UPDATE , đừng quên mệnh đề WHERE (trừ khi bạn định xóa mọi hàng trong bảng ).

Xem SQL DELETE cho người mới bắt đầu để biết thêm ví dụ và giải thích chi tiết.

Vật thể rơi

Mặc dù chúng tôi đang nói về chủ đề xóa mọi thứ, nhưng khi bạn xóa một đối tượng cơ sở dữ liệu (chẳng hạn như bảng, chế độ xem, thủ tục được lưu trữ, v.v.), có nghĩa là bạn “bỏ” đối tượng đó. Ví dụ: nếu bạn không cần bàn nữa, bạn "bỏ nó đi".

Cú pháp cực kỳ đơn giản và nó giống như sau:

  DROP TABLE Khách hàng;  

Ba từ đó đã xóa sạch hoàn toàn một bảng có tên Khách hàng . Bảng và tất cả dữ liệu của nó hiện đã biến mất.

Như bạn có thể tưởng tượng, đây có thể là một tuyên bố rất nguy hiểm và cần được sử dụng hết sức thận trọng.

Cú pháp tương tự có thể được sử dụng cho các loại đối tượng khác, ngoại trừ việc bạn sẽ thay thế table bằng loại đối tượng (ví dụ: DROP VIEW vPets giảm một chế độ xem có tên vPets ).

Nếu bạn cố gắng loại bỏ một bảng được tham chiếu bằng khóa ngoại, bạn có thể sẽ gặp lỗi. Trong trường hợp này, bạn cần bỏ khóa ngoại (sử dụng câu lệnh ALTER TABLE ) hoặc chính bảng con.

Toán tử SQL

Trong SQL, toán tử là một ký hiệu chỉ định một hành động được thực hiện trên một hoặc nhiều biểu thức.

Các toán tử thao tác các mục dữ liệu riêng lẻ và trả về một kết quả. Các mục dữ liệu được gọi là toán hạng hoặc đối số. Trong SQL, các toán tử được biểu diễn bằng các ký tự đặc biệt hoặc bằng các từ khóa.

Chúng tôi đã thấy một số toán tử đang hoạt động. Một số truy vấn mẫu trước đây của chúng tôi có mệnh đề WHERE bao gồm toán tử Equals ( = ). Chúng tôi cũng chạy một truy vấn sử dụng toán tử Greater Than ( & gt; ). Cả hai đều là toán tử so sánh - chúng so sánh hai biểu thức.

Xem 12 Toán tử được sử dụng phổ biến trong SQL để biết ví dụ về các toán tử mà bạn có thể cần khi làm việc với SQL.

Bạn cũng có thể sử dụng danh sách các toán tử SQL này làm tham chiếu cho các toán tử có sẵn trong SQL.

Chế độ xem SQL

Trong SQL, một dạng xem là một truy vấn được lưu vào cơ sở dữ liệu dưới dạng một đối tượng cơ sở dữ liệu (giống như một bảng). Thuật ngữ này cũng có thể được sử dụng để chỉ tập hợp kết quả của một truy vấn được lưu trữ. Chế độ xem thường được gọi là bảng ảo .

Để tạo một dạng xem, bạn viết một truy vấn, sau đó lưu nó dưới dạng một dạng xem. Bạn thực hiện việc này bằng cú pháp TẠO CHẾ ĐỘ XEM .

Dưới đây là một ví dụ về cách tạo chế độ xem:

  TẠO CHẾ ĐỘ XEM vPetTypeCount AS
LỰA CHỌN
    PetTypes.PetType,
    COUNT (Pets.PetTypeId) AS Đếm
TỪ Thú cưng
TRÁI THAM GIA PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId
NHÓM THEO PetTypes.PetType;  

Chạy mã đó sẽ tạo chế độ xem và lưu trữ nó dưới dạng một đối tượng trong cơ sở dữ liệu.

Giờ đây, chúng tôi có thể truy vấn chế độ xem, giống như chúng tôi truy vấn một bảng.

Kết quả:

  CHỌN * TỪ vPetTypeCount;  
 + ----------- + --------- +
| PetType | Đếm |
| ----------- + --------- |
| Chim | 1 |
| Con mèo | 3 |
| Con chó | 4 |
+ ----------- + --------- + 

Vì vậy, chúng tôi nhận được kết quả tương tự như chúng tôi sẽ có nếu chúng tôi chạy truy vấn ban đầu, nhưng việc lưu nó trong một chế độ xem giúp việc truy vấn dễ dàng hơn rất nhiều.

Lợi ích này sẽ trở nên lớn hơn, khi truy vấn càng phức tạp.

Lượt xem và Mệnh đề ORDER BY

Một điều tôi nên chỉ ra là truy vấn ban đầu có mệnh đề ORDER BY , nhưng tôi đã không đưa điều đó vào dạng xem. Tiêu chuẩn SQL không cho phép mệnh đề ORDER BY trong bất kỳ định nghĩa dạng xem nào. Ngoài ra, hầu hết các RDBMS sẽ phát sinh lỗi nếu bạn cố bao gồm mệnh đề ORDER BY .

Tuy nhiên, đây không phải là vấn đề vì bạn có thể sắp xếp kết quả khi truy vấn chế độ xem. Do đó, chúng ta có thể làm như sau:

  CHỌN * TỪ vPetTypeCount
ĐẶT HÀNG THEO Đếm DESC;  

Kết quả:

 + ----------- + --------- +
| PetType | Đếm |
| ----------- + --------- |
| Con chó | 4 |
| Con mèo | 3 |
| Chim | 1 |
+ ----------- + --------- + 

Hầu hết các RDBMS cũng bao gồm một tập hợp lớn các chế độ xem hệ thống mà bạn có thể sử dụng để truy xuất thông tin về hệ thống.

Để biết thêm về các chế độ xem, hãy xem Chế độ xem là gì?

Thủ tục được lưu trữ

Thủ tục được lưu trữ là một chuỗi các câu lệnh SQL được biên dịch và lưu vào cơ sở dữ liệu. Các quy trình được lưu trữ tương tự như các chế độ xem ở một số khía cạnh, nhưng rất khác ở các khía cạnh khác.

Một trong những lợi ích của các thủ tục được lưu trữ là chúng cho phép bạn lưu trữ các tập lệnh phức tạp trên máy chủ. Các thủ tục được lưu trữ thường chứa lập trình có điều kiện như câu lệnh IF ... ELSE chẳng hạn. Các thủ tục được lưu trữ cũng có thể chấp nhận các tham số.

Dưới đây là một ví dụ về cách tạo một quy trình đơn giản được lưu trữ trong SQL Server để lấy thông tin vật nuôi từ cơ sở dữ liệu của chúng tôi:

  TẠO THỦ TỤC uspGetPetById
    @PetId int
BẰNG 
    ĐẶT SỐ TÀI KHOẢN BẬT;
    LỰA CHỌN
        p.PetName,
        p.DOB,
        pt.PetType,
        CONCAT (o.FirstName, '', o.LastName) AS OwnerName
    TỪ Thú cưng p
    INNER THAM GIA PetTypes pt
    BẬT p.PetTypeId = pt.PetTypeId
    INNER JOIN Chủ sở hữu o
    ON o.OwnerId = p.OwnerId
    WHERE p.PetId = @PetId;  

Thủ tục được lưu trữ này chấp nhận một tham số có tên là @PetId . Điều này có nghĩa là khi gọi thủ tục, bạn cần chuyển ID của vật nuôi mà bạn muốn biết thông tin. Sau đó, quy trình sẽ chọn dữ liệu từ các bảng khác nhau và trả về.

Để gọi thủ tục đã lưu trữ, hãy sử dụng câu lệnh EXECUTE . Ngoài ra, bạn có thể rút ngắn nó thành EXEC . Trong PostgreSQL, sử dụng câu lệnh CALL .

  EXEC uspGetPetById @PetId = 3;  

Kết quả:

 + ----------- + ------------ + ----------- + ------------- +
| PetName | DOB | PetType | OwnerName |
| ----------- + ------------ + ----------- + ------------ - |
| Cào | 2018-10-01 | Con mèo | Bart Pitt |
+ ----------- + ------------ + ----------- + ------------ - + 

Trong trường hợp này, tôi quan tâm đến vật nuôi số 3 và đó là thông tin tôi nhận được.

Tôi nên đề cập rằng cú pháp để tạo các thủ tục được lưu trữ có thể khác nhau khá nhiều giữa các DBMS (cũng như việc triển khai các câu lệnh và lệnh SQL khác nhau mà bạn sử dụng bên trong một thủ tục), vì vậy tôi khuyên bạn nên xem tài liệu cho DBMS cụ thể của bạn nếu bạn muốn tạo một thủ tục được lưu trữ.

Hầu hết các RDBMS cũng bao gồm một tập hợp lớn các thủ tục được lưu trữ trong hệ thống mà bạn có thể sử dụng để thực hiện các tác vụ quản trị khác nhau và để truy xuất thông tin về hệ thống.

Để biết tổng quan cơ bản về các thủ tục được lưu trữ, bao gồm cả những lợi ích của chúng, hãy xem Thủ tục được Lưu trữ là gì?

Ngoài ra, nếu bạn quan tâm, hãy xem Cách tạo thủ tục được lưu trữ trong SQL Server để xem một ví dụ khác về cách tạo thủ tục được lưu trữ trong SQL Server. Ví dụ đó bao gồm một số ảnh chụp màn hình.

Trình kích hoạt SQL

Trình kích hoạt là một loại thủ tục được lưu trữ đặc biệt tự động thực thi khi một sự kiện xảy ra trong máy chủ cơ sở dữ liệu.

Hầu hết các RDBMS chính đều hỗ trợ trình kích hoạt DML, thực thi khi người dùng cố gắng sửa đổi dữ liệu thông qua sự kiện ngôn ngữ thao tác dữ liệu (DML). Các sự kiện DML là các câu lệnh INSERT , UPDATE hoặc DELETE .

Một số DBMS (chẳng hạn như SQL Server và PostgreSQL) cho phép các trình kích hoạt được liên kết với cả bảng và dạng xem. Những người khác chỉ cho phép các trình kích hoạt được liên kết với các bảng.

SQL Server cũng hỗ trợ trình kích hoạt DDL và trình kích hoạt đăng nhập.

Trình kích hoạt DDL thực thi để phản hồi các sự kiện DDL, chẳng hạn như câu lệnh CREATE , ALTER DROP và một số thủ tục được lưu trữ hệ thống thực hiện Các hoạt động giống như DDL.

Trình kích hoạt đăng nhập được kích hoạt để phản ứng với sự kiện LOGON được đưa ra khi phiên của người dùng đang được thiết lập.

Dưới đây là một số bài viết giải thích cách thực hiện nhiều việc khác nhau với trình kích hoạt trong SQL Server:

Giao dịch SQL

Các giao dịch SQL là một phần quan trọng của cơ sở dữ liệu giao dịch, nơi tính nhất quán của dữ liệu là điều tối quan trọng.

Một giao dịch quản lý một chuỗi các câu lệnh SQL phải được thực thi như một đơn vị công việc. Điều này nhằm đảm bảo rằng cơ sở dữ liệu không bao giờ chứa kết quả của các hoạt động từng phần.

Khi một giao dịch thực hiện nhiều thay đổi đối với cơ sở dữ liệu, tất cả các thay đổi sẽ thành công khi giao dịch được cam kết hoặc tất cả các thay đổi sẽ được hoàn tác khi giao dịch được khôi phục.

Các giao dịch giúp duy trì tính toàn vẹn của dữ liệu bằng cách đảm bảo rằng một chuỗi các câu lệnh SQL thực thi hoàn toàn hoặc không thực thi hoàn toàn.

Một ví dụ cổ điển về giao dịch là chuyển tiền từ tài khoản ngân hàng này sang tài khoản ngân hàng khác. Bạn sẽ không muốn tiền bị trừ từ tài khoản ngân hàng đầu tiên nhưng không xuất hiện trong tài khoản ngân hàng thứ hai.

Do đó, bạn có thể sử dụng một giao dịch tương tự như sau:

  BẮT ĐẦU GIAO DỊCH
Nợ tài khoản 1
Có tài khoản 2
Ghi lại giao dịch trong nhật ký giao dịch
KẾT THÚC GIAO DỊCH  

Bạn có thể viết logic có điều kiện bên trong giao dịch đó để khôi phục giao dịch nếu có gì sai.

Kết quả cuối cùng là, hoặc giao dịch được hoàn thành toàn bộ hoặc hoàn tất. Nó không bao giờ hoàn thành một nửa.

Xem Hướng dẫn giao dịch SQL của tôi để biết các ví dụ về giao dịch SQL.

Hàm SQL

Hàm là một quy trình có thể nhận các tham số, thực hiện các phép tính hoặc các hành động khác và trả về một kết quả.

Hầu hết các DBMS đều cung cấp cho bạn khả năng tạo các chức năng của riêng bạn, đồng thời cung cấp một loạt các chức năng có sẵn.

Chức năng do người dùng xác định

Hàm do người dùng xác định (UDF) là một hàm mà bạn tạo cho một mục đích cụ thể và lưu vào cơ sở dữ liệu. Bạn sẽ tạo một chức năng như vậy cho các tác vụ không được cung cấp bởi một chức năng có sẵn.

Xem Giới thiệu về hàm do người dùng xác định trong SQL Server để biết tổng quan. Mặc dù bài viết đó được viết cho SQL Server, hầu hết các khái niệm chung cũng áp dụng cho các DBMS khác.

Các hàm sẵn có

Hầu hết các DBMS có một loạt các hàm có sẵn mà bạn có thể sử dụng trong các truy vấn SQL của mình. Ví dụ: có các hàm trả về ngày và giờ hiện tại, các hàm định dạng ngày và số, các hàm chuyển đổi dữ liệu từ kiểu dữ liệu này sang kiểu dữ liệu khác, v.v.

Phạm vi của các hàm có sẵn có thể khá rộng và phụ thuộc vào DBMS đang được sử dụng, vì vậy tôi sẽ không giới thiệu qua trong hướng dẫn SQL này. Nhưng tôi khuyến khích bạn thử tìm hiểu những chức năng sẵn có mà DBMS của bạn hỗ trợ.

Để giúp bạn bắt đầu, các bài viết sau chứa một số hàm được sử dụng phổ biến nhất trong lập trình SQL.

Máy chủ SQL

MySQL

PostgreSQL

SQLite


Xem thêm những thông tin liên quan đến chủ đề thực hành sql cho người mới bắt đầu

Bài 1: [Học SQL từ đầu] - Tạo database, tạo table, tạo khóa chính, khóa ngoại bằng câu lênh SQL

alt

  • Tác giả: GROUP PTC
  • Ngày đăng: 2020-05-24
  • Đánh giá: 4 ⭐ ( 3936 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: SQL server
    - Hướng dẫn tạo databse, khóa chính, khóa ngoại, insert database bằng câu lệnh SQL.
    - Nếu thấy hay các bạn đăng ký ủng hộ mình nhé, để mình có thêm động lực làm thêm nhiều bài khác.
    - File Script hướng dẩn trên vedeo: https://drive.google.com/file/d/1Do-2qKVYuUWWAVu_iQlgjTzEbQ0gvUeb/view?usp=sharing

Hướng dẫn SQL cho người mới bắt đầu

  • Tác giả: techmaster.vn
  • Đánh giá: 3 ⭐ ( 7935 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Giáo trình PHP & MySQL - Trình độ: Cao đẳng - Trường Cao đẳng cơ giới Ninh Bình

  • Tác giả: tailieusinhvien.net
  • Đánh giá: 5 ⭐ ( 3306 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Giáo trình PHP & MySQL - Trình độ: Cao đẳng - Trường Cao đẳng cơ giới Ninh Bình: BỘ NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔNG TRƯỜNG CAO ĐẲNG CƠ GIỚI NINH BÌNH GIÁO TRÌNH MÔ ĐUN: PHP &MYSQL NGHỀ: LẬP TRÌNH MÁY TÍNH TRÌNH ĐỘ: CAO ĐẲNG NGHỀ Ban hành kèm theo Quyết định số: /QĐ- ngày .tháng .năm của Trường

[MySQL Tutorial] Hướng dẫn SQL cho người mới bắt đầu

  • Tác giả: www.codelean.vn
  • Đánh giá: 4 ⭐ ( 1368 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: CodeLean.vn là nơi chia sẻ kiến thức của những người học, làm và dạy trong lĩnh vực công nghệ thông tin.

SQL cơ bản cho người mới bắt đầu – Elearning

  • Tác giả: elearning.drb.com.vn
  • Đánh giá: 3 ⭐ ( 1879 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Học SQL: Hướng dẫn học SQL hoàn chỉnh cho người mới bắt đầu

  • Tác giả: vn.bitdegree.org
  • Đánh giá: 3 ⭐ ( 4452 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hướng dẫn học SQL hoàn chỉnh: khám phá các cách học SQL tốt nhất từ hướng dẫn dạy cách học SQL dành cho người mới bắt đầu cũng như đã có kinh nghiệm

Học Phân Tích Dữ Liệu Miễn Phí Cho Người Mới Bắt Đầu »

  • Tác giả: inda.vn
  • Đánh giá: 3 ⭐ ( 7026 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Học Phân tích dữ liệu miễn phí, cũng như có những cơ hội nghề nghiệp nào cho các bạn Phân tích dữ liệu trong tương lai

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Làm cách nào để thêm phương thức liên hệ văn bản (SMS) trong Canvas với tư cách là sinh viên? - cách thêm văn bản vào canvas

By ads_php