SQL – Wikipedia Tiếng Việt
Có thể bạn quan tâm
Bài này không có nguồn tham khảo nào. Mời bạn giúp cải thiện bài bằng cách bổ sung các nguồn tham khảo đáng tin cậy. Các nội dung không nguồn có thể bị nghi ngờ và xóa bỏ. Nếu bài được dịch từ Wikipedia ngôn ngữ khác thì bạn có thể chép nguồn tham khảo bên đó sang đây. |
Mẫu hình | Multi-paradigm |
---|---|
Thiết kế bởi | Donald D. ChamberlinRaymond F. Boyce |
Nhà phát triển | ISO/IEC |
Xuất hiện lần đầu | 1974 |
Phiên bản ổn định | SQL:2011 / 2011 |
Kiểm tra kiểu | Static, strong |
Hệ điều hành | Cross-platform |
Định dạng tập tin | Chi tiết định dạng tệp tin |
Phần mở rộng tên file | .sql |
Kiểu phương tiện | application/sql[1][2] |
Phát triển bởi | ISO/IEC |
Phát hành lần đầu | 1986 |
Bản mới nhất | SQL:2011 / 2011; 13 năm trước |
Kiểu định dạng | Database |
Tiêu chuẩn | ISO/IEC 9075 |
Định dạng mở? | Yes |
Trang mạng | www.iso.org/standard/76583.html |
Các bản triển khai lớn | |
Many | |
Phương ngữ | |
SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2006, SQL:2008, SQL:2011 | |
Ảnh hưởng từ | |
Datalog | |
Ảnh hưởng tới | |
CQL, LINQ, SOQL, Windows PowerShell,[3] JPQL, jOOQ |
SQL (/ˈɛs kjuː ˈɛl/ ⓘ,[4] hoặc /ˈsiːkwəl/ ⓘ;[5] viết tắt của Structured Query Language[6][7][8][9]), 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ử
[sửa | sửa mã nguồn]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[10], 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ệ[11][12].
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:
Năm | Tên | Tên khác | Chú giải |
---|---|---|---|
1986 | SQL-86 | SQL-87 | Được công bố đầu tiên bởi ANSI. Được phê chuẩn bởi ISO năm 1987. |
1989 | SQL-89 | Thay đổi nhỏ. | |
1992 | SQL-92 | SQL2 | Thay đổi lớn. |
1999 | SQL:1999 | SQL3 | |
2003 | SQL:2003 |
Các từ khóa SQL
[sửa | sửa mã nguồn]Từ khóa SQL chia thành nhiều nhóm:
Lấy dữ liệu
[sửa | sửa mã nguồn]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* FROMbooks WHEREprice>100.00 ORDERBYtitle;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.
SELECTbooks.title,count(*)ASAuthors FROMbooks JOINbook_authors ONbooks.isbn=book_authors.isbn GROUPBYbooks.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:
SELECTtitle,count(*)ASAuthors FROMbooks NATURALJOINbook_authors GROUPBYtitle;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
[sửa | sửa mã nguồn]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ử INSERT và UPDATE.
- 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
[sửa | sửa mã nguồn]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:
Thaotác1:<Mởkhóatàikhoản> Thaotác2:<Thựchiệnthaotácrúttiền> Thaotác3:<Khóatàikhoản>Để đả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
<STARTTRANSACTION> Thaotác1:<Mởkhóatàikhoản> Thaotác2:<Thựchiệnthaotácrúttiền> Thaotác3:<Khóatàikhoản> <ENDTRANSACTION>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
[sửa | sửa mã nguồn]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:
SELECTID,NAMEFROMUSERSWHEREUSERNAME='JONH'ANDPASSWORD='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:
SELECTID,NAMEFROMUSERSWHEREUSERNAME=''OR1=1or''=''ANDPASSWORD='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
[sửa | sửa mã nguồn]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
[sửa | sửa mã nguồn]Hệ thống cơ sở dữ liệu sử dụng SQL
[sửa | sửa mã nguồn]- Danh sách các hệ quản trị cơ sở dữ liệu SQL
Tham khảo
[sửa | sửa mã nguồn]- ^ a b “Media Type registration for application/sql”. Internet Assigned Numbers Authority. ngày 10 tháng 4 năm 2013. Truy cập ngày 10 tháng 4 năm 2013.
- ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên application/sql
- ^ a b Paul, Ryan. “A guided tour of the Microsoft Command Shell”. Ars Technica. Truy cập ngày 10 tháng 4 năm 2011.
- ^ a b Beaulieu, Alan (tháng 4 năm 2009). Mary E Treseler (biên tập). Learning SQL (ấn bản thứ 2). Sebastapol, CA, USA: O'Reilly. ISBN 978-0-596-52083-0.
- ^ a b “SQL, n.”. Oxford English Dictionary. Oxford University Press. Truy cập ngày 27 tháng 11 năm 2014.
- ^ a b Encyclopedia Britannica. “SQL”. Truy cập ngày 2 tháng 4 năm 2013.
- ^ a b Oxford Dictionaries. “SQL”. Bản gốc lưu trữ ngày 3 tháng 8 năm 2016. Truy cập ngày 25 tháng 9 năm 2015.
- ^ a b IBM. “SQL Guide”.
- ^ a b Microsoft. “Structured Query Language (SQL)”.
- ^ a b Codd, Edgar F (tháng 6 năm 1970). “A Relational Model of Data for Large Shared Data Banks”. Communications of the ACM. Association for Computing Machinery. 13 (6): 377–87. doi:10.1145/362384.362685. Bản gốc lưu trữ ngày 12 tháng 6 năm 2007. Truy cập ngày 9 tháng 6 năm 2007.
- ^ a b Chapple, Mike. “SQL Fundamentals”. Databases. About.com. Bản gốc lưu trữ ngày 22 tháng 2 năm 2009. Truy cập ngày 28 tháng 1 năm 2009.
- ^ a b “Structured Query Language (SQL)”. International Business Machines. ngày 27 tháng 10 năm 2006. Truy cập ngày 10 tháng 6 năm 2007.
| |
---|---|
Các nền tảng toán học | Logic toán · Lý thuyết tập hợp · Lý thuyết số · Lý thuyết đồ thị · Lý thuyết kiểu · Lý thuyết thể loại · Giải tích số · Lý thuyết thông tin · Đại số · Nhận dạng mẫu · Nhận dạng tiếng nói · Toán học tổ hợp · Đại số Boole · Toán rời rạc |
Lý thuyết phép tính | Độ phức tạp Kolmogorov · Lý thuyết Automat · Lý thuyết tính được · Lý thuyết độ phức tạp tính toán · Lý thuyết điện toán lượng tử |
Các cấu trúc dữ liệu và các giải thuật | Phân tích giải thuật · Thiết kế giải thuật · Hình học tính toán · Tối ưu hóa tổ hợp |
Các ngôn ngữ lập trình và Các trình biên dịch | Các bộ phân tích cú pháp · Các trình thông dịch · Lập trình cấu trúc · Lập trình thủ tục · Lập trình hướng đối tượng · Lập trình hướng khía cạnh · Lập trình hàm · Lập trình logic · Lập trình máy tính · Lập trình mệnh lệnh · Lập trình song song · Lập trình tương tranh · Các mô hình lập trình · Prolog · Tối ưu hóa trình biên dịch |
Tính song hành, Song song, và các hệ thống phân tán | Đa xử lý · Điện toán lưới · Kiểm soát song hành · Hiệu năng hệ thống · Tính toán phân tán |
Công nghệ phần mềm | Phân tích yêu cầu · Thiết kế phần mềm · Các phương pháp hình thức · Kiểm thử phần mềm · Quy trình phát triển phần mềm · Các phép đo phần mềm · Đặc tả chương trình · LISP · Mẫu thiết kế · Tối ưu hóa phần mềm |
Kiến trúc hệ thống | Kiến trúc máy tính · Tổ chức máy tính · Các hệ điều hành · Các cấu trúc điều khiển · Cấu trúc bộ nhớ lưu trữ · Vi mạch · Thiết kế ASIC · Vi lập trình · Vào/ra dữ liệu · VLSI design · Xử lý tín hiệu số |
Viễn thông và Mạng máy tính | Audio máy tính · Chọn tuyến · Cấu trúc liên kết mạng · Mật mã học |
Các cơ sở dữ liệu và Các hệ thống thông tin | Hệ quản trị cơ sở dữ liệu · Cơ sở dữ liệu quan hệ · SQL · Các giao dịch · Các chỉ số cơ sở dữ liệu · Khai phá dữ liệu · Biểu diễn và giao diện thông tin · Các hệ thống thông tin · Khôi phục dữ liệu · Lưu trữ thông tin · Lý thuyết thông tin · Mã hóa dữ liệu · Nén dữ liệu · Thu thập thông tin |
Trí tuệ nhân tạo | Lập luận tự động · Ngôn ngữ học tính toán · Thị giác máy tính · Tính toán tiến hóa · Các hệ chuyên gia · Học máy · Xử lý ngôn ngữ tự nhiên · Robot học · Biểu diễn tri thức và suy luận |
Đồ họa máy tính | Trực quan hóa · Hoạt họa máy tính · Xử lý ảnh |
Giao diện người-máy tính | Khả năng truy cập máy tính · Giao diện người dùng · Điện toán mang được · Điện toán khắp mọi nơi · Thực tế ảo |
Khoa học tính toán | Cuộc sống nhân tạo · Tin sinh học · Khoa học nhận thức · Hóa học tính toán · Khoa học thần kinh tính toán · Vật Lý học tính toán · Các giải thuật số · Toán học kí hiệu |
Chú ý: khoa học máy tính còn có thể được chia thành nhiều chủ đề hay nhiều lĩnh vực khác dựa theo Hệ thống xếp loại điện toán ACM. |
Từ khóa » Syntax Sql Là Gì
-
Cú Pháp SQL Cơ Bản
-
Sql Là Gì? 6 Lý Do Tại Sao Bạn Nên Học SQL | TopDev
-
Tổng Hợp Những Câu Lệnh SQL Cơ Bản | TopDev
-
SQL Là Gì? Các Lệnh Cơ Bản Trong Lập Trình Cơ Sở Dữ Liệu SQL
-
SQL Là Gì? Các Câu Lệnh Phổ Biến Trong SQL - Vietnix
-
Truy Vấn Cơ Sở Dữ Liệu Là Gì? Tất Tần Tật Về Ngôn Ngữ SQL ... - ITviec
-
SQL Là Gì? Những điều Cần Biết Về SQL - Viblo
-
SQL Là Gì? - Học Sql Cơ Bản đến Nâng Cao - VietTuts
-
SQL Là Gì? Tìm Hiểu Tổng Quan Về “Structured Query Language”
-
Sửa Các Câu Lệnh SQL để Tinh Chỉnh Kết Quả Truy Vấn
-
Học SQL Cho Data Anslyst - Sức Mạnh Của Lệnh With Và MySQL CTE
-
Query Là Gì? Giải Thích Về Truy Vấn Database Cho Người Mới Bắt đầu
-
SQL Là Gì? Tìm Hiểu Căn Bản Và Cách Sử Dụng SQL
-
Access SQL: Khái Niệm Cơ Bản, Từ Vựng Và Cú Pháp