✨SQL

SQL

SQL (, hoặc ; viết tắt của Structured Query Language), dịch là Ngôn ngữ truy vấn mang tính cấu trúc, là một loại ngôn ngữ máy tính phổ biến để tạo, sửa, và lấy dữ liệu từ một hệ quản trị cơ sở dữ liệu quan hệ. Ngôn ngữ này phát triển vượt xa so với mục đích ban đầu là để phục vụ các hệ quản trị cơ sở dữ liệu đối tượng-quan hệ. Nó là một tiêu chuẩn ANSI/ISO.

Lịch sử

Từ một bài báo tham dự hội thảo khoa học A Relational Model of Data for Large Share Data Banks (tạm dịch là "Mô hình quan hệ cho dữ liệu dùng trong ngân hàng dữ liệu chia sẻ có khối lượng lớn") của tiến sĩ Edgar F. Codd xuất bản tháng 6 năm 1970 trong tạp chí Communications of the ACM của Hiệp hội ACM, một mô hình đã được chấp nhận rộng rãi là mô hình tiêu chuẩn dùng cho hệ thống quản lý cơ sở dữ liệu quan hệ.

Giữa những năm 1970, một nhóm các nhà phát triển tại trung tâm nghiên cứu của IBM tại San Jose phát triển hệ thống cơ sở dữ liệu "Hệ thống R" dựa trên mô hình của Codd. Structured English Query Language, viết tắt là "SEQUEL" (tạm dịch là "Ngôn ngữ truy vấn tiếng Anh có cấu trúc"), được thiết kế để quản lý và truy lục dữ liệu được lưu trữ trong Hệ thống R. Sau này, tên viết tắt SEQUEL được rút gọn thành SQL để tránh việc tranh chấp nhãn hiệu (từ SEQUEL đã được một công ty máy bay của UK là Hawker-Siddeley đăng ký). Mặc dù SQL bị ảnh hưởng bởi công trình của tiến sĩ Codd nhưng nó không do tiến sĩ Codd thiết kế ra. Ngôn ngữ SEQUEL được thiết kế bởi Donald D. Chamberlin và Raymond F. Boyce tại IBM, và khái niệm của họ được phổ biến để tăng sự chú ý về SQL.

Phiên bản cơ sở dữ liệu quan hệ phi thương mại, không hỗ trợ SQL đầu tiên được phát triển năm 1974.(Ingres from U.C. Berkeley.)

Năm 1978, việc thử nghiệm phương pháp được khởi đầu tại một cơ sở thử nghiệm của khách hàng. Cuộc thử nghiệm đã chứng minh được sự có ích và tính thực tiễn của hệ thống và đã chứng tỏ sự thành công của IBM. Dựa vào kết quả đó, IBM bắt đầu phát triển các sản phẩm thương mại bổ sung thêm SQL dựa trên nguyên mẫu Hệ thống R bao gồm System/38 (Hệ thống/38) (được công bố năm 1978 và được thương mại hóa tháng 8 năm 1979, SQL/DS (được giới thiệu vào năm 1981) và DB2 (năm 1983).

Cùng thời điểm đó Relational Software, Inc. (bây giờ là Oracle Corporation) đã nhận thấy tiềm năng của những khái niệm được Chamberlin and Boyce đưa ra và đã phát triển phiên bản Hệ quản trị cơ sở dự liệu quan hệ riêng của họ cho Navy, CIA và các tổ chức khác. Vào mùa hè năm 1979, Relational Software, Inc. giới thiệu Oracle V2 (Phiên bản 2), phiên bản thương mại đầu tiên hỗ trợ SQL cho máy tính VAX. Oracle thường xuyên được nhắc tới một cách không nghiêm túc vì đã tấn công thị trường của IBM trong 2 năm, nhưng việc táo bạo nhất trong quan hệ công chúng của họ là tấn công một phiên bản của IBM System/38 chỉ trong có vài tuần. Tương lai của Oracle đã được đảm bảo vì có sự quan tâm đáng kể của công chúng sau đó mới phát triển, trong khi đã có nhiều phiên bản của các nhà cung cấp khác.

IBM đã quá chậm trong việc phát triển SQL và các sản phẩm quan hệ, có lẽ vì ban đầu nó không dùng được trong môi trường Unix và máy tính lớn (Mainframe), và họ sợ nó sẽ làm giảm lợi nhuận thu được từ việc bán các sản phẩm cơ sở dữ liệu IMS (những sản phẩm dựa trên mô hình cơ sở dữ liệu định hướng chứ không phải cơ sở dữ liệu quan hệ) của mình. Trong lúc đó, Oracle vẫn đang phát triển, IBM đang phát triển System/38, được mong đợi là hệ cơ sở dữ liệu quan hệ đầu tiên của họ. Với năng lực và thiết kế tiên tiến của nó, người ta cho rằng nó có thể sẽ thay thế cho hệ thống Unix và máy tính lớn.

SQL được thừa nhận là tiêu chuẩn của ANSI (American National Standards Institute) vào năm 1986 và ISO (International Organization for Standardization) năm 1987. ANSI đã công bố cách phát âm chính thức của SQL là "ess kyoo ell", nhưng rất nhiều các chuyên gia cơ sở dữ liệu nói tiếng Anh vẫn gọi nó là sequel. Một quan niệm sai khác cũng được phổ biến rộng rãi đó là "SQL" là chữ viết tắt của "Structured Query Language" (Ngôn ngữ truy vấn có cấu trúc). Thực tế không phải như vậy!

Tiêu chuẩn SQL đã trải qua một số phiên bản:

Các từ khóa SQL

Từ khóa SQL chia thành nhiều nhóm:

Lấy dữ liệu

Thao tác sử dụng nhiều nhất trong một cơ sở dữ liệu dựa trên giao dịch là thao tác lấy dữ liệu.

  • SELECT được sử dụng để lấy dữ liệu từ một hoặc nhiều bảng trong cơ sở dữ liệu, SELECT là lệnh thường dùng nhất của ngôn ngữ sửa đổi dữ liệu (tạm dịch) (tiếng Anh: Data Manipulation Language - DML). Trong việc tạo ra câu truy vấn SELECT, người sử dụng phải đưa ra mô tả cho những dữ liệu mình muốn lấy ra chứ không chỉ ra những hành động vật lý nào bắt buộc phải thực hiện để lấy ra kết quả đó. Hệ thống cơ sở dữ liệu, hay chính xác hơn là bộ tối ưu hóa câu truy vấn sẽ dịch từ câu truy vấn sang kế hoạch truy vấn tối ưu.
  • Những từ khóa liên quan tới SELECT bao gồm: FROM dùng để chỉ định dữ liệu sẽ được lấy ra từ những bảng nào, và các bảng đó quan hệ với nhau như thế nào. WHERE dùng để xác định những bản ghi nào sẽ được lấy ra, hoặc áp dụng với GROUP BY. GROUP BY dùng để kết hợp các bản ghi có những giá trị liên quan với nhau thành các phần tử của một tập hợp nhỏ hơn các bản ghi. HAVING dùng để xác định những bản ghi nào, là kết quả từ từ khóa GROUP BY, sẽ được lấy ra. *** ORDER BY dùng để xác định dữ liệu lấy ra sẽ được sắp xếp theo những cột nào.

Ví dụ sau về việc sử dụng câu lệnh SELECT để lấy danh sách những cuốn sách có giá trị. Câu truy vấn này sẽ truy lục tất cả các bản ghi trong bảng books với giá trị của cột price lớn hơn 100.00. Kết quả sẽ được sắp xếp theo thứ tự tăng dần của các giá trị trong cột title. Dấu (*) trong phần select list cho biết tất cả các cột của bảng books sẽ được lấy ra và thể hiện ở kết quả.

SELECT * FROM books WHERE price > 100.00 ORDER BY title;

Ví dụ sau giải thích cách liên kết nhiều bảng, tập hợp các bản ghi trong câu truy vấn SQL, nó sẽ trả về danh sách các cuốn sách và số tác giả của từng cuốn sách.

SELECT books.title, count(*) AS Authors FROM books JOIN book_authors ON books.isbn = book_authors.isbn GROUP BY books.title; Kết quả của ví dụ trên giống như sau:

Title Authors


SQL Examples and Guide 3 The Joy of SQL 1 How to use Wikipedia 2 Pitfalls of SQL 1 How SQL Saved my Dog 1

(Ký tự gạch chân "_" thường được sử dụng trong tên bảng và tên cột để phân cách các từ vì các ký tự khác có thể mâu thuẫn với cú pháp SQL. Ví dụ như, dấu "-" có thể được hiểu là dấu trừ.)

Với điều kiện cột isbn là cột chung duy nhất của hai bảng và cột title chỉ tồn tại trong bảng books thì câu truy vấn trên có thể được viết lại theo mẫu sau:

SELECT title, count(*) AS Authors FROM books NATURAL JOIN book_authors GROUP BY title; Tuy nhiên nhiều nhà cung cấp không hỗ trợ các thức này, hoặc nó yêu cầu một số quy ước về tên cột nào đó. Như vậy, câu truy vấn trên không được phổ biến.

Sửa đổi dữ liệu

Ngôn ngữ sửa đổi dữ liệu (Data Manipulation Language - DML), là một phần nhỏ của ngôn ngữ, có những thành phần tiêu chuẩn dùng để thêm, cập nhật và xóa dữ liệu delete data.

  • INSERT dùng để thêm dữ liệu vào một bảng đã tồn tại.
  • UPDATE dùng để thay đổi giá trị của một tập hợp các bản ghi trong một bảng.
  • MERGE dùng để kết hợp dữ liệu của nhiều bảng. Nó được dùng như việc kết hợp giữa hai phần tử INSERTUPDATE.
  • DELETE xóa những bản ghi tồn tại trong một bảng.
  • TRUNCATE Xóa toàn bộ dữ liệu trong một bảng (không phải là tiêu chuẩn, nhưng là một lệnh SQL phổ biến).

Giao dịch

Giao dịch, nếu có, dùng để bao bọc các thao tác sửa đổi dữ liệu. Giao dịch (transaction) là một tập các thao tác đi cùng với nhau. Trên môi trường khách/chủ (client/server) hay môi trường cơ sở dữ liệu phân tán việc đảm bảo tính đúng đắn của dữ liệu rất quan trọng. Ví dụ: Một người rút tiền khỏi tài khoản tại ngân hàng, thì tại thời điểm rút tiền, thao tác rút tiền khác phải bị từ chối. Các thao tác trên tài khoản đó có thể hình dung như sau:

Thao tác 1: Thao tác 2: Thao tác 3:

Để đảm bảo các thao tác 1-3 phải đi liền với nhau thì phải đưa vào trong một transaction

Thao tác 1: Thao tác 2: Thao tác 3:

Các lệnh liên quan đến giao dịch:

  • BEGIN WORK (hoặc START TRANSACTION, tùy theo các ngôn ngữ SQL khác nhau) được sử dụng để đánh dấu việc bắt đầu một giao dịch dữ liệu (giao dịch dữ liệu đó có kết thúc hoàn toàn hay không).
  • COMMIT dùng để lưu lại những thay đổi trong giao dịch.
  • ROLLBACK dùng để quay lại thời điểm sử dụng lệnh COMMIT cuối cùng.

SQL Injection

Là một cách chèn đoạn lệnh SQL vào để thực hiện việc vượt qua sự kiểm tra của mệnh đề WHERE. Ví dụ một câu truy vấn lấy tài khoản người dùng:

SELECT ID, NAME FROM USERS WHERE USERNAME='JONH' AND PASSWORD='1234' Câu trên chỉ có thể đúng nếu cặp USERNAME và PASSWORD tồn tại trong cơ sở dữ liệu. Câu trên có thể viết injection như sau: thay cụm từ JONH thành: ' OR 1=1 or''=' (lưu ý ký tự nháy đơn ') khi đó câu SQL sẽ trở thành: SELECT ID, NAME FROM USERS WHERE USERNAME=_ OR 1=1 or_='' AND PASSWORD='1234'

đoạn mã này hoạt động với bất cứ password nào. Việc phòng chống SQL Injection cũng không khó, chỉ cần chú ý khi viết là có thể chống lại được.

Định nghĩa dữ liệu

Ngôn ngữ định nghĩa dữ liệu (Data Definition Language, viết tắt là DDL) là một trong những phần chính của ngôn ngữ truy vấn. Các câu lệnh này dùng để định nghĩa cấu trúc của cơ sở dữ liệu, bao gồm định nghĩa các hàng, các cột, các bảng dữ liệu, các chỉ số và một số thuộc tính khác liên quan đến cơ sở dữ liệu như vị trí của file. Các câu lệnh ngôn ngữ định nghĩa dữ liệu là thành phần chính trong các hệ quản lý dữ liệu và có sự khác biệt rất nhiều giữa các ngôn ngữ truy vấn trên các hệ khác nhau.

Điều khiển dữ liệu

Hệ thống cơ sở dữ liệu sử dụng SQL

  • Danh sách các hệ quản trị cơ sở dữ liệu SQL
👁️ 2 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**SQL** (, hoặc ; viết tắt của **Structured Query Language**), dịch là _Ngôn ngữ truy vấn mang tính cấu trúc_, là một loại ngôn ngữ máy tính phổ biến để tạo, sửa, và lấy dữ
**SQL injection** là một kỹ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng của việc kiểm tra dữ liệu đầu vào trong các ứng dụng web và các thông báo lỗi của
Câu lệnh SQL **UPDATE** thay đổi hay cập nhật dữ liệu của một hay nhiều hàng trong bảng dữ liệu. Tùy theo điều kiện mà một số hàng hay tất cả các hàng trong bảng
Câu lệnh SQL **INSERT** (có nghĩa là **thêm**) dùng để thêm dữ liệu vào một bảng trong cơ sở dữ liệu quan hệ. ## Cấu trúc cơ bản Câu lệnh insert có cấu trúc như
Một từ khóa **join ** kết nối nhiều bản ghi từ 2 bảng dữ liệu trong 1 cơ sở dữ liệu quan hệ và kết quả được đưa vào một bảng (tạm). Trong ngôn ngữ
Câu lệnh **SELECT** (mang nghĩa **lấy dữ liệu** hay **câu lệnh truy vấn**) trong SQL trả về một tập kết quả các bản ghi từ một hoặc nhiều bảng. Nó được sử dụng để lấy
Câu lệnh SQL **DELETE** xóa một hoặc nhiều hàng trong bảng dữ liệu. Nếu thực hiện câu lệnh **DELETE** với 1 điều kiện nào đó thì một số hàng thỏa điều kiện sẽ bị xóa
**Microsoft SQL Server** là một hệ quản trị cơ sở dữ liệu quan hệ được phát triển bởi Microsoft. Là một máy chủ cơ sở dữ liệu, nó là một sản phẩm phần mềm có
Dưới đây là các bước chi tiết để tải xuống SQL Server cùng với SQL Server Management Studio. Hãy theo dõi để tải mượt và nhanh hơn bạn nhé!!!- Cấu hình máy tính đề xuất:-
## Phần mềm có bản quyền * 4th Dimension * ANTs Data Server * Dataphor * Daffodil database * DB2 * Tập tinMaker Pro * Informix * InterBase * Matisse [http://www.matisse.com] * Microsoft Access *
**Lịch sử của Microsoft SQL Server** bắt đầu bằng Microsoft SQL Server SQL Server 1.0, phiên bản 16-bit dành cho OS/2 ## Bộ xử lý hỗ trợ
Trong bối cảnh các hệ thống thông tin ngày càng phụ thuộc vào kết nối mạng và dữ liệu, việc đảm bảo an toàn cho các nền tảng cơ sở dữ liệu trở thành một
**Ràng buộc kiểm tra** (hay **ràng buộc CHECK**) là một loại ràng buộc tính toàn vẹn trong SQL, ràng buộc này chỉ rõ những yêu cầu mà mỗi hàng trong một bảng của cơ sở
**Khóa ngoại lai**, thường gọi là **khoá ngoại** hay **khóa ngoài**, (tiếng Anh: _foreign key_) là một trường (_field_) hay một nhóm trường trong một bản ghi (_record_) của một bảng (_table_), trỏ (_point_) đến
Trong các công nghệ cơ sở dữ liệu, **rollback** là thao tác lùi cơ sở dữ liệu về một trạng thái cũ. Các thao tác rollback có tầm quan trọng đối với tính toàn vẹn
Trong tin học, **ODBC** (viết tắt của **Open Database Connectivity** - _kết nối cơ sở dữ liệu mở_) cung cấp một phương pháp API phần mềm chuẩn cho việc sử dụng các hệ quản trị
thumb|Một ví dụ về lấy dữ liệu đầu ra từ truy vấn cơ sở dữ liệu SQL. **Cơ sở dữ liệu** () là một tập hợp các dữ liệu có tổ chức liên quan đến
Cơ sở dữ liệu **NoSQL** (tên gốc là "Non SQL" (phi SQL) hoặc "non relational" (phi quan hệ)) cung cấp một cơ chế để lưu trữ và truy xuất dữ liệu được mô hình hóa
**ADOdb** là một thư viện ở mức trừu tượng dành cho PHP và Python dựa trên cùng khái niệm với ActiveX Data Objects của Microsoft. Nó cho phép nhà phát triển (developer) viết các ứng
[[Tập tin:SQL data types.png|nhỏ|Các kiểu dữ liệu trong ngôn ngữ SQL, một trong những ngôn ngữ truy vấn phổ biến nhất với các lập trình viên. ]] **_Ngôn ngữ truy vấn_** () là tên gọi
**DB2** là một trong các dòng phần mềm quản trị cơ sở dữ liệu quan hệ của IBM (RDBMS: relational Database Management System). Có nhiều phiên bản khác nhau của DB2 để chạy trên các
**Microsoft Imagine**, trước đây có tên là **DreamSpark**, là một chương trình của Microsoft cho phép sinh viên sử dụng các công cụ phát triển và thiết kế phần mềm miễn phí. Chương trình này
trái|Biểu trưng Informix **Informix** là một họ các sản phẩm hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) của IBM. Nó là một máy chủ cơ sở dữ liệu cho xử lý giao
**Microsoft Visual Studio** là một môi trường phát triển tích hợp (IDE) từ Microsoft. Microsoft Visual Studio còn được gọi là "Trình soạn thảo mã nhiều người sử dụng nhất thế giới ", được dùng
**Ngôn ngữ truy vấn tích hợp** (tiếng Anh: _Language Integrated Query_, viết tắt _LINQ_) là một thành phần của .NET và .NET Framework cung cấp khả năng truy vấn cấp độ ngôn ngữ và cùng
**CrushFTP** là một chương trình máy chủ truyền tải file đa nền tảng, đa giao thức, có sở hữu, được phát triển kể từ năm 1999. CrushFTP là một phần mềm shareware với nhiều mức
nhỏ|Java 2 **Java 2 Platform, Enterprise Edition** (_Nền tảng Java, phiên bản 2 - phiên bản công nghiệp_ là công nghệ của Sun Microsystems) hay **Java EE** (gọi tắt là J2EE) là một nền lập
**Quản trị viên cơ sở dữ liệu** (tiếng Anh: **Database administrator -** **DBA**) sử dụng phần mềm chuyên dụng để lưu trữ và sắp xếp dữ liệu. Vai trò có thể bao gồm lập kế
**Adminer** (trước đây gọi là phpMinAdmin) là một công cụ để quản lý nội dung trong cơ sở dữ liệu MySQL (kể từ phiên bản 2 cũng có thể truy xuất các cơ sở dữ
**An ninh mạng (cybersecurity), an ninh máy tính (computer security), bảo mật công nghệ thông tin (IT security)** là việc bảo vệ **hệ thống mạng máy tính** khỏi các hành vi trộm cắp hoặc làm
Apache **Log4j** là một trình ghi nhật ký trên nền tảng Java. Ban đầu, Log4j được phát triển bởi Ceki Gülcü và hiện nay là một dự án của Quỹ Phần mềm Apache. Log4j là
**Microsoft Power BI** là một sản phẩm phần mềm trực quan hóa dữ liệu tương tác được phát triển bởi Microsoft với trọng tâm chính là kinh doanh thông minh (BI). Power BI là một
**Ingres database** ( ) là một hệ thống quan hệ quản lý cơ sở dữ liệu SQL độc quyền nhằm hỗ trợ các ứng dụng thương mại và chính phủ lớn. Actian Corporation là công
**Giao dịch cơ sở dữ liệu** (_database transaction_) là đơn vị tương tác của một hệ quản lý cơ sở dữ liệu hoặc các hệ tương tự, mỗi giao dịch được xử lý một cách
Đây là một danh sách chưa đầy đủ của các tiêu chuẩn ISO. Một số tiêu chuẩn được ISO/IEC JTC1 công bố, đã được đăng cho mọi người [http://isotc.iso.org/livelink/livelink/fetch/2000/2489/Ittf_Home/PubliclyAvailableStandards.htm tự do truy cập] ## ISO
**phpMyAdmin** là một công cụ nguồn mở miễn phí được viết bằng ngôn ngữ lập trình PHP để xử lý các tác vụ quản trị của MySQL thông qua một trình duyệt web. Nó có
**TWiki** là một ứng dụng wiki dựa trên ngôn ngữ lập trình Perl. Dự án TWiki được lập bởi Peter Thoeny vào năm 1998 như là một nền tảng ứng dụng dựa trên wiki mã
**Ký tự đại diện** có nhiều loại. ## Truyền thông Trong lĩnh vựctruyền thông, ký tự đại diện là ký tự [điện toán] được quy ước là sự thay thế cho một hoặc nhiều ký
**Danh sách điều khiển truy cập** () là một kỹ thuật phần mềm - mà hệ điều hành và Phần mềm ứng dụng có thể dùng để giới hạn quyền truy cập vào dữ liệu
**Phát triển bán hàng** là một tổ chức nằm giữa chức năng tiếp thị và bán hàng của một doanh nghiệp và chịu trách nhiệm trước về chu kỳ bán hàng: xác định, kết nối
**Cơ sở dữ liệu quan hệ** () là một cơ sở dữ liệu (phổ biến nhất là kỹ thuật số) dựa trên mô hình quan hệ dữ liệu, theo đề xuất của Edgar F. Codd
**Google Cloud Platform** (**GCP**), được cung cấp bởi Google, là một bộ dịch vụ điện toán đám mây chạy trên cùng một cơ sở hạ tầng mà Google sử dụng nội bộ cho các sản
thumb|Minh họa mã nguồn [[Java (programming language)|Java với comment **mở đầu** được biểu thị bằng màu **đỏ** và comment **nội dòng** bằng màu **lục**. **Mã chương trình** là bằng màu **lam**.]]Trong lập
**Máy chủ cơ sở dữ liệu** (_database server_) là một máy chủ sử dụng ứng dụng cơ sở dữ liệu cung cấp các dịch vụ cơ sở dữ liệu cho các chương trình máy tính
**Null** có thể là: ## Khoa học, công nghệ và toán học ### Tin học * Null (SQL) (hoặc NULL), một từ khóa đặc biệt trong SQL chỉ ra rằng giá trị đó không tồn
Bảng sau đây so sánh các thông tin chung và chi tiết về kỹ thuật của các hệ thống quản trị cơ sở dữ liệu quan hệ. Nhắp chuột vào tên hệ thống để xem
**Kho dữ liệu** (tiếng Anh: _data warehouse_) là kho lưu trữ dữ liệu lưu trữ bằng thiết bị điện tử của một tổ chức. Các kho dữ liệu được thiết kế để hỗ trợ việc
**Aptech** là một công ty giáo dục và đào tạo công nghệ thông tin với hơn 3500 trung tâm đào tạo tại 53 quốc gia (Theo nguồn thông tin của Aptech World Wide). Công ty
**phpBB** là gói phần mềm dùng để xây dựng các diễn đàn, phpBB viết bằng ngôn ngữ lập trình PHP có sử dụng cơ sở dữ liệu như MySQL... Tên gọi "phpBB" là viết tắt
**Windows Server 2003** là hệ điều hành dành cho máy chủ được sản xuất bởi Microsoft, được giới thiệu vào ngày 24 tháng 4 năm 2003. Phiên bản cập nhật là Windows Server 2003 R2