Khóa học
Nếu bạn làm việc trong một ngành sử dụng nhiều dữ liệu, chắc chắn bạn đã nghe đến cơ sở dữ liệu. Một cách rất phổ biến để truy cập dữ liệu được lưu trữ trong cơ sở dữ liệu là thông qua SQL. Trong bài viết này, bạn sẽ tìm hiểu thêm về SQL. Nhưng thay vì lao ngay vào việc học cú pháp và thuật ngữ dùng trong SQL, chúng ta sẽ điểm qua một số khái niệm then chốt trong khoa học máy tính để giúp trả lời câu hỏi: SQL có phải là một ngôn ngữ lập trình không?
SQL là gì?
Trước hết, hãy cùng định nghĩa cơ sở dữ liệu là gì. Nói một cách đơn giản, cơ sở dữ liệu là một hệ thống lưu trữ để chứa dữ liệu có cấu trúc của bạn. Bên cạnh đó, hệ quản trị cơ sở dữ liệu (DBMS) đóng vai trò giao diện giữa cơ sở dữ liệu và người dùng cuối hoặc các chương trình. Bạn có thể tìm hiểu thêm về mối quan hệ này trong khóa học Database Design của DataCamp.
Loại DBMS phổ biến nhất là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) nơi chúng ta lưu trữ dữ liệu có cấu trúc, tức là dữ liệu bao hàm các quan hệ giữa thực thể và biến. Các thực thể và biến này được tổ chức thành một tập các bảng với cột và hàng.
Dữ liệu trong RDBMS được lưu trong một đối tượng cơ sở dữ liệu gọi là bảng. Một cơ sở dữ liệu thường chứa nhiều bảng. Mỗi bảng được nhận diện bằng một tên duy nhất và chứa một tập hợp các mục dữ liệu liên quan được cấu trúc thành các hàng và cột. Các cột trong một bảng được gọi là trường và giữ các giá trị cho một thuộc tính cụ thể của bảng. Mỗi hàng trong bảng được gọi là một bản ghi.
SQL, phát âm là “S-Q-L” hoặc “sequel”, là viết tắt của Structured Query Language. SQL được sử dụng trong lập trình và được thiết kế để quản lý dữ liệu lưu trữ trong RDBMS bằng các truy vấn SQL.
Một truy vấn về bản chất là một câu lệnh gồm nhiều lệnh SQL khác nhau cùng thực hiện một tác vụ cụ thể để truy cập, quản lý, chỉnh sửa, cập nhật, kiểm soát và tổ chức dữ liệu của bạn. Định nghĩa này nghe rất gần với một “chương trình máy tính”; vậy điều đó có nghĩa SQL là một ngôn ngữ lập trình?
Hãy cùng hiểu rõ hơn ngôn ngữ lập trình là gì trong phần tiếp theo.
Ngôn ngữ lập trình là gì?
Một ngôn ngữ lập trình bao gồm một tập từ vựng và quy tắc ngữ pháp được định nghĩa trước. Ngôn ngữ này có thể hướng dẫn máy tính hoặc thiết bị tính toán thực hiện các tác vụ cụ thể.
Có nhiều loại ngôn ngữ lập trình khác nhau, mỗi loại có đặc điểm và mục đích riêng. Tuy nhiên, nhìn chung, chúng có thể được chia thành hai nhóm: ngôn ngữ bậc thấp và ngôn ngữ bậc cao.
Các ngôn ngữ lập trình gần với mã máy hoặc nhị phân (1 và 0) được gọi là ngôn ngữ bậc thấp.
Ngôn ngữ bậc thấp thường khó đọc với con người vì chúng được cấu trúc để viết chỉ dẫn theo cách “máy nghĩ”. Dù vậy, chúng vẫn dễ hiểu hơn so với chuỗi 1 và 0 thuần túy.
Vậy tại sao dùng ngôn ngữ bậc thấp? Bởi vì chúng nhanh! Và chúng cho lập trình viên quyền kiểm soát chính xác hơn cách phần cứng máy tính sẽ hoạt động.
Ngược lại, ngôn ngữ bậc cao gần với cách con người giao tiếp hơn. Chúng sử dụng các từ trong chỉ dẫn gần với ngôn ngữ đời thường, giúp việc lập trình và bảo trì dễ dàng hơn. Điểm hạn chế là chúng tốn nhiều thời gian hơn để dịch sang mã máy mà máy tính có thể hiểu.
Nhưng khi máy tính ngày càng mạnh mẽ, khác biệt hiệu năng giữa ngôn ngữ bậc thấp và bậc cao thường chỉ tính bằng mili giây. Đó là lý do hầu hết công việc lập trình hiện nay tìm kiếm người có kỹ năng ngôn ngữ bậc cao.
Tính đầy đủ Turing là gì?
Để đo lường “sức mạnh” của một ngôn ngữ lập trình, các nhà khoa học máy tính thường dùng khái niệm tính đầy đủ Turing. Thuật ngữ này được đặt theo Alan Turing, nhà khoa học máy tính đã đề xuất máy Turing vào năm 1936. Đây trở thành nền tảng cho các lý thuyết về tính toán và máy tính.
Máy Turing là một thiết bị in các ký hiệu lên băng giấy theo cách mô phỏng một người tuân theo các chỉ dẫn logic.
Ngôn ngữ lập trình là các hệ thống quy tắc hình thức để truy cập và sửa đổi dữ liệu. Nếu các quy tắc có thể mô phỏng cỗ máy tính toán giả định của Turing, chúng được coi là “đầy đủ Turing”. Một hệ thống đầy đủ Turing có thể được chứng minh về mặt toán học là có thể thực hiện mọi phép tính khả dĩ.
Chúng tôi rất khuyến khích bạn xem video này từ Computerphile để tìm hiểu thêm về Máy Turing và các video tiếp theo về khái niệm tính đầy đủ Turing.
Ngôn ngữ lập trình đa dụng so với ngôn ngữ đặc thù miền
SQL có một tập từ khóa được định nghĩa trước và tuân theo cú pháp chặt chẽ. Để bắt đầu lập trình với SQL, hãy xem khóa học Introduction to SQL của DataCamp, nơi chúng ta bắt đầu với việc chọn và lọc bản ghi, trường rồi tiến đến các hàm tổng hợp, sắp xếp và nhóm.
Dựa trên định nghĩa về ngôn ngữ lập trình là có một vốn từ và cú pháp cụ thể, SQL chắc chắn đủ tư cách là một ngôn ngữ lập trình. Tuy nhiên, nó không phải là Ngôn ngữ Đa dụng (GPL) mà thực chất là một Ngôn ngữ Đặc thù miền (DSL).
Ngôn ngữ đặc thù miền là ngôn ngữ máy tính được tạo ra để giải quyết vấn đề trong một miền cụ thể và không nhằm giải quyết vấn đề bên ngoài miền đó.
Chúng được xây dựng với những mục tiêu cụ thể trong thiết kế và triển khai. Ví dụ, SQL được tạo ra đặc biệt để làm việc với cơ sở dữ liệu, để truy vấn cơ sở dữ liệu và xử lý dữ liệu lưu trong đó. Bạn không thể xây dựng toàn bộ một ứng dụng chỉ bằng SQL.
Một ví dụ khác về DSL là Cascading Style Sheets - thường gọi là CSS, được dùng để định kiểu cho HTML trên các trang web.
DSL trái ngược với General Purpose Language (GPL), vốn có phạm vi áp dụng rộng trên nhiều miền. Chúng được thiết kế để cho phép bạn viết bất kỳ loại chương trình nào với mọi kiểu logic cần thiết.
Bạn có thể tạo mọi loại ứng dụng bằng GPL, bao gồm ứng dụng máy tính để bàn, di động hoặc web. Một số GPL được dùng rộng rãi nhất gồm Python, C++, Ruby, Java và JavaScript.
Nói rộng ra, DSL kém mạnh mẽ hơn GPL. Tuy nhiên, điều này đi kèm một lợi thế. Do miền ứng dụng hẹp, SQL tương đối dễ học hơn hầu hết ngôn ngữ lập trình đa dụng.
Chúng tôi khuyến khích bạn theo học lộ trình SQL Fundamentals của DataCamp, nơi chúng tôi giúp bạn từ người mới bắt đầu trở thành người thành thạo SQL với 5 khóa học chỉ trong 21 giờ.
Vậy SQL có phải là ngôn ngữ lập trình không?
Tính đầy đủ Turing, như đã bàn ở trên, là chỉ báo về sức mạnh của một ngôn ngữ lập trình. Ngôn ngữ càng mạnh, càng có thể thực hiện các phép tính phức tạp hơn. Với sự xuất hiện của biểu thức bảng chung (CTE) và hàm cửa sổ trong SQL, chúng ta có thể thực hiện các phép tính đệ quy và phân cấp bằng SQL, khiến nó càng mạnh mẽ hơn và đủ điều kiện là đầy đủ Turing.
Tuy nhiên, phải mất một thời gian dài Tiêu chuẩn SQL mới bổ sung các tính năng truy vấn phân cấp và đệ quy. Do đó, một số RDBMS truyền thống, cũ hơn có thể không được coi là đầy đủ Turing.
Chúng ta đã thảo luận trước đó về sự khác biệt giữa ngôn ngữ lập trình đa dụng và ngôn ngữ lập trình đặc thù miền. Khi mọi người nói “ngôn ngữ lập trình”, họ thường ám chỉ “ngôn ngữ lập trình đa dụng”, điều này đôi khi gây nhầm lẫn.
Vì vậy, theo định nghĩa chuẩn về một ngôn ngữ lập trình, SQL là một ngôn ngữ lập trình đặc thù miền có tính đầy đủ Turing. Do đó, SQL được xếp là một ngôn ngữ lập trình.
Với những ai đã biết các kiến thức cơ bản về SQL và muốn tiến xa hơn để bắt đầu với hàm cửa sổ, hãy xem khóa học tương tác PostgreSQl Summary Stats and Window Functions của DataCamp. Bạn sẽ học cách tạo truy vấn phục vụ phân tích và kỹ thuật dữ liệu bằng hàm cửa sổ, vũ khí bí mật của SQL!
Các loại SQL khác nhau
Có thể bạn đã nghe về các loại hay phương ngữ khác nhau của SQL: T-SQL, PostgreSQL, MySQL, v.v. Nhưng bạn có thể tự hỏi các loại SQL này là gì và vì sao chúng tồn tại? Hãy cùng điểm qua lịch sử ngắn gọn của SQL.
Edgar Frank Codd, một nhà khoa học máy tính người Anh làm việc tại IBM, đã công bố bài báo “A Relational Model of Data for Large Shared Data Banks” vào năm 1970. Đây là lúc ông phát minh ra mô hình quan hệ cho quản lý cơ sở dữ liệu, từ đó trở thành nền tảng lý thuyết cho cơ sở dữ liệu quan hệ và hệ quản trị cơ sở dữ liệu quan hệ cho đến nay.
Sau đó, đã có những nỗ lực xây dựng một tiêu chuẩn SQL chính thức vào cuối những năm 1980.
SQL trở thành tiêu chuẩn của Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI) vào năm 1986 và của Tổ chức Tiêu chuẩn hóa Quốc tế (ISO) vào năm 1987. Tiêu chuẩn SQL đã được sửa đổi nhiều lần kể từ thập niên 1980, mặc dù các tính năng cốt lõi của chuẩn SQL đã ổn định từ năm 1992.
Tuy nhiên, các biến thể mới liên tục xuất hiện khi những người triển khai cơ sở dữ liệu tại các công ty khác nhau cần giải quyết vấn đề mới hoặc tìm cách vượt qua những vấn đề tồn tại mà tiêu chuẩn SQL chưa đề cập. Điều này lý giải vì sao nhiều phương ngữ SQL ra đời và vẫn cùng tồn tại đến ngày nay.
Ngày nay chỉ có một ngôn ngữ SQL, nhưng các Hệ quản trị Cơ sở dữ liệu khác nhau đã mở rộng tiêu chuẩn SQL gốc để bổ sung chức năng riêng hoặc điều chỉnh cú pháp theo cách hoạt động của mình. Bằng cách đó, họ tạo ra nhiều phương ngữ SQL đa dạng.
Bạn có thể đọc thêm về các phương ngữ này trong bài viết trên blog của chúng tôi có tựa đề rất phù hợp ‘SQL Server, PostgreSQL, MySQL... khác nhau thế nào? Bắt đầu từ đâu?’
Nên bắt đầu với phương ngữ SQL nào?
Chúng tôi gợi ý bạn bắt đầu với PostgreSQL.
PostgreSQL là một hệ thống cơ sở dữ liệu hướng đối tượng - quan hệ, mã nguồn mở, mạnh mẽ, sử dụng và mở rộng ngôn ngữ SQL. Nó cũng có nhiều tính năng giúp lưu trữ an toàn và mở rộng khối lượng công việc dữ liệu phức tạp nhất.
Đây là phương ngữ gần với chuẩn SQL nhất và được sử dụng rộng rãi. Bắt đầu với PostgreSQL sẽ cho bạn công cụ linh hoạt nhất để thích ứng với các phương ngữ SQL khác sau này và chuyển giao kỹ năng sang các RDBMS khác.
Khóa học Functions for Manipulating Data in PostgreSQL của DataCamp là một khóa học tương tác ở mức trung cấp tuyệt vời để giúp bạn đi đúng hướng.
SQL và các ngôn ngữ thủ tục
Vì vậy, chúng ta biết SQL không phải là ngôn ngữ lập trình đa dụng. Tuy nhiên, bạn có thể kết hợp SQL với các ngôn ngữ thủ tục để mô phỏng một số hành vi giống GPL. Làm như vậy về mặt kỹ thuật khiến việc dùng SQL trong miền ngoài dự định ban đầu trở nên khả thi.
Ngôn ngữ thủ tục là những ngôn ngữ lập trình đặc biệt sử dụng hàm, câu lệnh điều kiện và biến để viết các chương trình mà máy tính có thể nhận ra nhằm đạt được kết quả tính toán nhất định.
Tất cả hệ quản trị cơ sở dữ liệu (DBMS) đều chấp nhận một hoặc nhiều phương ngữ của ngôn ngữ thủ tục. Một số ví dụ bao gồm:
Procedural Language for SQL (PL/SQL)
Đây là phần mở rộng cho SQL do Oracle Corporation tạo ra. Tương tự các ngôn ngữ lập trình đa dụng, PL/SQL hỗ trợ điều kiện và vòng lặp. Với PL/SQL, bạn cũng có thể khai báo hằng, biến, kiểu biến, trigger, thủ tục và hàm.
Procedural Language/PostgreSQL (PL/pgSQL)
Đây là một ngôn ngữ thủ tục được hệ quản trị cơ sở dữ liệu quan hệ - hướng đối tượng mã nguồn mở PostgreSQL hỗ trợ. Nó rất giống với PL/SQL của Oracle mô tả ở trên và bao gồm các thành phần như vòng lặp và điều kiện. Nó cho phép định nghĩa hàm do người dùng tạo và cũng hỗ trợ kế thừa toán tử.
Transact-SQL (T-SQL)
Đây là một phần mở rộng lập trình từ Sybase và Microsoft cho phép khai báo biến cục bộ. Nó cũng thay đổi các câu lệnh DELETE và UPDATE truyền thống so với chuẩn SQL. Nó bao gồm điều khiển giao dịch, xử lý ngoại lệ và lỗi. T-SQL được sử dụng trong Microsoft SQL Server, một hệ cơ sở dữ liệu phổ biến.
Thông qua việc sử dụng các phần mở rộng như vậy, SQL có thể hoạt động tương tự một GPL, khiến nó càng trở nên mạnh mẽ và là kỹ năng quan trọng để học!
Bắt đầu với SQL.
Hy vọng rằng chúng tôi đã thuyết phục bạn rằng SQL không chỉ là một ngôn ngữ lập trình. Mà đúng hơn là một ngôn ngữ lập trình mạnh mẽ giúp bạn khai thác tối đa dữ liệu của mình!
Datacamp là một nền tảng tuyệt vời để học khoa học dữ liệu và phân tích trực tuyến. Chúng tôi có rất nhiều khóa học trực tuyến chất lượng cao có thể giúp bạn hiểu SQL và những tinh tế của nó.
Introduction to SQL Server là một khóa học tương tác như vậy, nơi bạn sẽ có cơ hội kiểm tra kiến thức và xây dựng sự tự tin bằng cách áp dụng những gì đã học. Bạn sẽ làm việc với cơ sở dữ liệu truyền thông số để xem xét doanh số của nhiều nghệ sĩ và bản nhạc, bộ dữ liệu Eurovision, và tìm hiểu xu hướng sự cố mất điện tại Mỹ để khám phá nhiều kiểu dữ liệu và kịch bản khác nhau.
Chúc bạn học tốt!