Ngôn ngữ lập trình SQL. Cấu trúc lệnh SQL

07/02/07 11.6K

Giới thiệu về quản lý cơ sở dữ liệu quan hệ

sql thường được gọi là ngôn ngữ Esperanto dành cho hệ thống quản lý cơ sở dữ liệu (DBMS). Quả thực, không có ngôn ngữ nào khác trên thế giới để làm việc với cơ sở dữ liệu lại được sử dụng rộng rãi trong các chương trình như vậy. Tiêu chuẩn sol đầu tiên xuất hiện vào năm 1986 và hiện đã được công nhận rộng rãi. Nó có thể được sử dụng ngay cả khi làm việc với các DBMS không quan hệ. Không giống như các công cụ phần mềm khác, chẳng hạn như ngôn ngữ C và Cobol, vốn là đặc quyền của các lập trình viên chuyên nghiệp, sql được các chuyên gia từ nhiều lĩnh vực khác nhau sử dụng. Lập trình viên, quản trị viên DBMS, nhà phân tích kinh doanh - tất cả họ đều xử lý thành công dữ liệu bằng sql. Kiến thức về ngôn ngữ này rất hữu ích cho tất cả những ai phải làm việc với cơ sở dữ liệu.

Trong bài viết này chúng ta sẽ xem xét các khái niệm cơ bản về sql. Hãy kể lại câu chuyện cốt truyện của anh ấy (và xóa tan một số huyền thoại trên đường đi). Bạn sẽ làm quen với mô hình quan hệ và có thể có được những kỹ năng đầu tiên khi làm việc với sql, điều này sẽ giúp bạn thành thạo ngôn ngữ hơn nữa.

Học sql có khó không? Nó phụ thuộc vào mức độ bạn sẽ đi sâu. Để trở thành một người chuyên nghiệp, bạn phải học rất nhiều. Ngôn ngữ sql bắt đầu ra đời vào năm 1974 như là chủ đề của một bài nghiên cứu ngắn 23 trang và đã đi được một chặng đường dài kể từ đó. Văn bản của tiêu chuẩn hiện hành - tài liệu chính thức "ngôn ngữ cơ sở dữ liệu tiêu chuẩn quốc tế sql" (thường được gọi là sql-92) - gồm hơn sáu trăm trang, nhưng không nói gì về các tính năng cụ thể của các phiên bản sol được triển khai trong DBMS từ Microsoft, Oracle, Sybase, v.v. Ngôn ngữ này phát triển và đa dạng đến mức chỉ liệt kê các khả năng của nó sẽ cần một số bài báo và nếu bạn thu thập mọi thứ đã được viết về chủ đề sol, bạn sẽ có được một thư viện nhiều tập.

Tuy nhiên, đối với người dùng bình thường thì không cần thiết phải biết hoàn toàn về sql. Giống như một khách du lịch đến một đất nước nơi họ nói một ngôn ngữ khó hiểu chỉ cần học một số cách diễn đạt và quy tắc ngữ pháp phổ biến, vì vậy, trong SQL - biết một chút, bạn có thể nhận được nhiều kết quả hữu ích. Trong bài viết này, chúng ta sẽ xem xét các lệnh sql cơ bản, các quy tắc đặt tiêu chí chọn dữ liệu và chỉ ra cách lấy kết quả. Do đó, bạn sẽ có thể tự tạo bảng và nhập thông tin vào chúng, tạo truy vấn và làm việc với báo cáo. Kiến thức này có thể trở thành cơ sở cho sự phát triển độc lập hơn nữa của sql.

sql là gì?

sql là ngôn ngữ phi thủ tục chuyên dụng cho phép bạn mô tả dữ liệu, truy xuất và xử lý thông tin từ các DBMS quan hệ. Chuyên môn hóa có nghĩa là sol chỉ nhằm mục đích làm việc với cơ sở dữ liệu; Bạn không thể tạo một hệ thống ứng dụng chính thức chỉ bằng ngôn ngữ này - điều này sẽ yêu cầu sử dụng các ngôn ngữ khác mà bạn có thể nhúng các lệnh SQL. Vì vậy, sql còn được gọi là công cụ ngôn ngữ phụ trợ cho việc xử lý dữ liệu. Ngôn ngữ phụ trợ chỉ được sử dụng kết hợp với các ngôn ngữ khác.

Ngôn ngữ ứng dụng có mục đích chung thường có các phương tiện để tạo thủ tục, nhưng SQL thì không. Với sự trợ giúp của nó, bạn không thể chỉ định cách thực hiện một nhiệm vụ nhất định mà chỉ có thể xác định chính xác nhiệm vụ đó là gì. Nói cách khác, khi làm việc với sql, chúng ta quan tâm đến kết quả chứ không phải quy trình để có được chúng.

Thuộc tính quan trọng nhất của sql là khả năng truy cập cơ sở dữ liệu quan hệ. Nhiều người thậm chí còn tin rằng các cụm từ “cơ sở dữ liệu được xử lý bằng sql” và “cơ sở dữ liệu quan hệ” là đồng nghĩa. Tuy nhiên, bạn sẽ sớm thấy rằng có sự khác biệt giữa chúng. Tiêu chuẩn sql-92 thậm chí không có mối quan hệ thuật ngữ.

DBMS quan hệ là gì?

Không đi sâu vào chi tiết, DBMS quan hệ là một hệ thống dựa trên mô hình quản lý dữ liệu quan hệ.

Khái niệm mô hình quan hệ lần đầu tiên được đề xuất trong tác phẩm của Tiến sĩ E. F. Codd, xuất bản năm 1970. Nó mô tả một công cụ toán học để cấu trúc và thao tác dữ liệu, đồng thời cũng đề xuất một mô hình trừu tượng để biểu diễn bất kỳ thông tin nào trong thế giới thực. Trước đây, khi sử dụng cơ sở dữ liệu phải tính đến những đặc điểm cụ thể của việc lưu trữ thông tin trong đó. Nếu cấu trúc bên trong của cơ sở dữ liệu thay đổi (ví dụ: để cải thiện hiệu suất), cần phải làm lại các chương trình ứng dụng, ngay cả khi không có thay đổi nào xảy ra ở mức logic. Mô hình quan hệ giúp tách biệt các tính năng riêng tư của việc lưu trữ dữ liệu khỏi cấp độ chương trình ứng dụng. Trên thực tế, mô hình không mô tả cách thức lưu trữ và truy cập thông tin. Điều được tính đến là cách người dùng cảm nhận thông tin này. Nhờ sự xuất hiện của mô hình quan hệ, cách tiếp cận quản lý dữ liệu đã thay đổi về chất: từ một nghệ thuật trở thành một khoa học, dẫn đến sự phát triển mang tính cách mạng của ngành.

Các khái niệm cơ bản của mô hình quan hệ

Theo mô hình quan hệ, mối quan hệ là một bảng chứa dữ liệu. Một mối quan hệ có thể có một hoặc nhiều thuộc tính (đặc điểm) tương ứng với các cột của bảng này và một số tập hợp dữ liệu (có thể trống), là tập hợp của các thuộc tính này (chúng được gọi là bộ dữ liệu n-ary hoặc bản ghi) và tương ứng với các hàng của bảng.

Đối với bất kỳ bộ dữ liệu nào, các giá trị thuộc tính phải thuộc về cái gọi là miền. Trên thực tế, miền là một tập hợp dữ liệu nhất định xác định tập hợp tất cả các giá trị hợp lệ.

Hãy xem một ví dụ. Giả sử có một miền Ngày trong tuần chứa các giá trị từ Thứ Hai đến Chủ Nhật. Nếu một quan hệ có thuộc tính WeekDay tương ứng với miền này thì bất kỳ bộ dữ liệu nào trong quan hệ đều phải có một trong các giá trị được liệt kê trong cột WeekDay. Không được phép xuất hiện các giá trị Tháng Giêng hoặc Mèo.

Xin lưu ý: thuộc tính phải có một trong các giá trị hợp lệ. Việc chỉ định nhiều giá trị cùng một lúc bị cấm. Như vậy, ngoài yêu cầu các giá trị thuộc tính thuộc về một miền nhất định thì phải đáp ứng điều kiện về tính nguyên tử của nó. Điều này có nghĩa là những ý nghĩa này không thể bị phân hủy, tức là chúng không thể chia thành những phần nhỏ hơn mà không làm mất đi ý nghĩa cơ bản. Ví dụ: nếu giá trị thuộc tính chứa đồng thời Thứ Hai và Thứ Ba, thì hai phần có thể được phân biệt, giữ nguyên ý nghĩa ban đầu - Ngày trong Tuần; do đó, giá trị thuộc tính này không phải là nguyên tử. Tuy nhiên, nếu bạn cố gắng chia ý nghĩa “Thứ Hai” thành nhiều phần, bạn sẽ nhận được một tập hợp các chữ cái riêng lẻ - từ “P” đến “K”; nghĩa gốc đã bị mất nên nghĩa của "Thứ Hai" là nguyên tử.

Mối quan hệ cũng có những tính chất khác. Điều quan trọng nhất trong số đó là tính chất toán học của các phép toán khép kín. Điều này có nghĩa là khi thực hiện bất kỳ thao tác nào trên một quan hệ thì một quan hệ mới phải xuất hiện. Thuộc tính này cho phép bạn thu được kết quả có thể dự đoán được khi thực hiện các phép toán trên các mối quan hệ. Ngoài ra, có thể biểu diễn các hoạt động dưới dạng biểu thức trừu tượng với các mức lồng nhau khác nhau.

Trong tác phẩm đầu tiên của mình, Tiến sĩ Codd đã định nghĩa một tập hợp gồm tám toán tử được gọi là đại số quan hệ. Bốn toán tử—phép hợp, phép nhân logic, hiệu và tích Descartes—được chuyển từ lý thuyết tập hợp truyền thống; các toán tử còn lại được tạo riêng để xử lý các mối quan hệ. Công việc tiếp theo của Tiến sĩ Codd, Chris Date và các nhà nghiên cứu khác đã đề xuất các toán tử bổ sung. Ở phần sau của bài viết này, chúng ta sẽ xem xét ba toán tử quan hệ—dự án, chọn hoặc hạn chế và nối.

sql và mô hình quan hệ

Bây giờ bạn đã quen với mô hình quan hệ, hãy quên nó đi. Tất nhiên, không phải mãi mãi mà chỉ để giải thích điều sau: mặc dù mô hình quan hệ do Tiến sĩ Codd đề xuất đã được sử dụng trong quá trình phát triển sql, nhưng không có sự tương ứng hoàn toàn hoặc theo nghĩa đen giữa hai mô hình này (đây là một trong những lý do tại sao tiêu chuẩn sql-92 không có thuật ngữ Thái độ). Ví dụ, các khái niệm về bảng sql và quan hệ là không tương đương, bởi vì các bảng có thể có nhiều hàng giống hệt nhau cùng một lúc, trong khi các bộ dữ liệu giống hệt nhau không được phép xuất hiện trong quan hệ. Ngoài ra, SQL không cung cấp việc sử dụng các miền quan hệ, mặc dù các kiểu dữ liệu đóng một vai trò ở một mức độ nào đó (một số người ủng hộ có ảnh hưởng của mô hình quan hệ hiện đang cố gắng thúc đẩy việc đưa các miền quan hệ vào tiêu chuẩn SQL trong tương lai).

Thật không may, sự mâu thuẫn giữa sql và mô hình quan hệ đã làm nảy sinh nhiều hiểu lầm và tranh chấp trong nhiều năm qua. Nhưng vì chủ đề chính của bài viết là nghiên cứu về sql chứ không phải mô hình quan hệ nên những vấn đề này không được thảo luận ở đây. Chỉ cần nhớ rằng có sự khác biệt giữa các thuật ngữ được sử dụng trong sql và mô hình quan hệ. Hơn nữa trong bài viết này chỉ những thuật ngữ được chấp nhận trong sql mới được sử dụng. Thay vì các mối quan hệ, thuộc tính và bộ dữ liệu, chúng ta sẽ sử dụng các chất tương tự sql của chúng: bảng, cột và hàng.

SQL tĩnh và động

Có thể bạn đã quen thuộc với các thuật ngữ như sql tĩnh và sql động. Truy vấn sql là tĩnh nếu nó được biên dịch và tối ưu hóa ở giai đoạn trước khi thực thi chương trình. Chúng tôi đã đề cập đến một dạng sql tĩnh khi nói về việc nhúng các lệnh sql trong các chương trình C hoặc Cobol (có một tên khác cho các biểu thức như vậy - sql nhúng). Như bạn có thể đoán, một truy vấn SQL động được biên dịch và tối ưu hóa trong quá trình thực thi chương trình. Theo quy định, người dùng thông thường sử dụng sql động, cho phép họ tạo các truy vấn phù hợp với nhu cầu trước mắt của họ. Một trong những tùy chọn để sử dụng truy vấn SQL động là lệnh gọi tương tác hoặc trực tiếp của chúng (thậm chí còn có một thuật ngữ đặc biệt - directsql), khi các truy vấn được gửi để xử lý được nhập tương tác từ thiết bị đầu cuối. Có một số khác biệt nhất định giữa SQL tĩnh và SQL động trong cú pháp của các cấu trúc được sử dụng và các tính năng thực thi, nhưng những vấn đề này nằm ngoài phạm vi của bài viết. Chúng tôi chỉ lưu ý rằng để dễ hiểu, các ví dụ được đưa ra dưới dạng truy vấn sql trực tiếp, vì điều này cho phép không chỉ các lập trình viên mà còn cả hầu hết người dùng cuối học cách sử dụng sql.

cách học sql

Bây giờ bạn đã sẵn sàng viết các truy vấn sql đầu tiên của mình. Nếu bạn có quyền truy cập vào cơ sở dữ liệu thông qua sql và bạn muốn sử dụng các ví dụ của chúng tôi trong thực tế, hãy xem xét những điều sau: bạn phải đăng nhập với tư cách là người dùng có quyền không giới hạn và bạn sẽ cần các công cụ phần mềm để xử lý tương tác các truy vấn sql (nếu chúng tôi nói về cơ sở dữ liệu mạng, Bạn nên trao đổi với quản trị viên cơ sở dữ liệu của mình về việc cấp cho bạn các quyền thích hợp). Nếu bạn không có quyền truy cập vào cơ sở dữ liệu qua sql, đừng lo lắng: tất cả các ví dụ đều rất đơn giản và bạn có thể tìm ra chúng một cách “khô khan” mà không cần đến máy.

Để thực hiện bất kỳ hành động nào trong sql, bạn phải thực thi một biểu thức bằng ngôn ngữ sql. Có một số loại biểu thức, nhưng trong số đó có thể phân biệt ba nhóm chính: lệnh ddl (ngôn ngữ định nghĩa dữ liệu), lệnh dml (ngôn ngữ thao tác dữ liệu) và các công cụ kiểm soát dữ liệu. Vì vậy, theo một nghĩa nào đó, sql kết hợp ba ngôn ngữ khác nhau.

Lệnh ngôn ngữ mô tả dữ liệu

Hãy bắt đầu với một trong những lệnh ddl chính - tạo bảng. Có một số loại bảng trong sql, những loại chính có hai loại: cơ bản (cơ sở) và chọn lọc (dạng xem). Các bảng cơ bản là những bảng liên quan đến dữ liệu thực tế; chọn lọc là các bảng “ảo” được tạo ra dựa trên thông tin thu được từ các bảng cơ sở; nhưng đối với người dùng, các biểu mẫu trông giống như các bảng thông thường. Lệnh tạo bảng được thiết kế để tạo các bảng cơ sở.

Trong lệnh tạo bảng, bạn phải chỉ định tên bảng, chỉ định danh sách các cột và loại dữ liệu chứa trong đó. Các phần tử tùy chọn khác cũng có thể xuất hiện dưới dạng tham số, nhưng trước tiên chúng ta chỉ xem xét các tham số cơ bản. Hãy hiển thị dạng cú pháp đơn giản nhất cho lệnh này:

tạo bảngTableName(ColumnDataType) ;

tạo và bảng là các từ khóa sql; TableName, Column và DataType là các tham số chính thức, thay vào đó người dùng nhập giá trị thực tế mỗi lần. Các tham số Cột và Kiểu dữ liệu được đặt trong dấu ngoặc đơn. Trong sql, dấu ngoặc đơn thường được sử dụng để nhóm các phần tử riêng lẻ. Trong trường hợp này, chúng cho phép bạn kết hợp các định nghĩa cho một cột. Dấu chấm phẩy kết thúc là dấu phân cách lệnh. Nó phải chấm dứt bất kỳ biểu thức nào trong ngôn ngữ sql.

Hãy xem một ví dụ. Giả sử bạn cần tạo một bảng để lưu trữ dữ liệu về tất cả các cuộc hẹn. Để thực hiện việc này, hãy nhập lệnh trong sql:

tạo bảng cuộc hẹn (ngày_ngày_hẹn) ;

Sau khi thực hiện lệnh này, một bảng có tên cuộc hẹn sẽ được tạo, trong đó có một cột, ngày_cuộc hẹn, trong đó dữ liệu kiểu ngày có thể được ghi. Vì chưa có dữ liệu nào được nhập nên số lượng hàng trong bảng bằng 0 (lệnh tạo bảng chỉ xác định bảng; các giá trị thực tế được nhập bằng lệnh chèn, lệnh này sẽ được thảo luận sau).

Các tham số cuộc hẹn và ngày_cuộc hẹn được gọi là mã định danh vì chúng chỉ định tên cho các đối tượng cơ sở dữ liệu cụ thể, trong trường hợp này là tên tương ứng cho một bảng và một cột. Có hai loại mã định danh trong sql: thông thường và phân cách. Mã định danh được đánh dấu được đặt trong dấu ngoặc kép và phân biệt chữ hoa chữ thường. Mã định danh thông thường không được phân biệt bằng bất kỳ ký tự giới hạn nào và cách viết của chúng không phân biệt chữ hoa chữ thường. Bài viết này chỉ sử dụng số nhận dạng thông thường.

Các ký tự được sử dụng để xây dựng mã định danh phải đáp ứng các quy tắc nhất định. Mã định danh thông thường chỉ có thể sử dụng các chữ cái (không nhất thiết phải là tiếng Latinh mà còn cả các bảng chữ cái khác), số và ký tự gạch dưới. Mã định danh không được chứa dấu câu, dấu cách hoặc ký tự đặc biệt (#, @, % hoặc!); Ngoài ra, nó không thể bắt đầu bằng số hoặc dấu gạch dưới. Bạn có thể sử dụng các từ khóa sql riêng biệt cho số nhận dạng, nhưng điều này không được khuyến khích. Mã định danh nhằm mục đích chỉ định một số đối tượng, vì vậy nó phải có một tên duy nhất (trong một ngữ cảnh nhất định): bạn không thể tạo một bảng có tên đã được tìm thấy trong cơ sở dữ liệu; Bạn không thể có các cột có cùng tên trong cùng một bảng. Nhân tiện, hãy nhớ rằng cuộc hẹn và cuộc hẹn đều có tên giống nhau đối với sql. Chỉ thay đổi kiểu chữ không thể tạo ra mã định danh mới.

Mặc dù một bảng có thể chỉ có một cột, nhưng trong thực tế, các bảng có nhiều cột thường được yêu cầu. Lệnh tạo một bảng như vậy nói chung trông như thế này:

tạo tableTableName(ColumnDataType[ ( , ColumnDataType )]) ;

Dấu ngoặc vuông được sử dụng để biểu thị các phần tử tùy chọn, dấu ngoặc nhọn chứa các phần tử có thể biểu thị danh sách các cấu trúc đường dẫn đơn (khi nhập lệnh SQL thực, cả dấu ngoặc này và dấu ngoặc khác đều không được đặt). Cú pháp này cho phép bạn chỉ định số lượng cột bất kỳ. Lưu ý rằng phần tử thứ hai đứng trước dấu phẩy. Nếu có một số tham số trong danh sách, chúng sẽ được phân tách với nhau bằng dấu phẩy.

tạo bảng các cuộc hẹn2 (ngày_ngày_hẹn, ngày_giờ hẹn, mô tả varchar (256)) ;

Lệnh này tạo bảng cuộc hẹn2 (bảng mới phải có tên khác vì bảng cuộc hẹn đã có trong cơ sở dữ liệu). Giống như bảng đầu tiên, nó có cột date_date để ghi ngày của các cuộc hẹn; Ngoài ra, cột date_time đã xuất hiện để ghi lại thời gian của các cuộc họp này. Tham số mô tả là một chuỗi văn bản có thể chứa tối đa 256 ký tự. Tham số này được chỉ định là varchar (viết tắt của ký tự thay đổi) vì không biết trước sẽ cần bao nhiêu khoảng trống cho mục nhập, nhưng rõ ràng là mô tả sẽ không quá 256 ký tự. Khi mô tả một tham số thuộc kiểu chuỗi ký tự (và một số kiểu khác) thì độ dài của tham số được chỉ định. Giá trị của nó được chỉ định trong ngoặc đơn bên phải tên loại.

Bạn có thể nhận thấy rằng trong hai ví dụ được thảo luận, mục lệnh được định dạng khác nhau. Nếu trong trường hợp đầu tiên, lệnh được đặt hoàn toàn trên một dòng, thì trong trường hợp thứ hai sau dấu ngoặc đơn mở đầu tiên, mục nhập sẽ được tiếp tục trên một dòng mới và định nghĩa của mỗi cột tiếp theo bắt đầu trên một dòng mới. Không có yêu cầu đặc biệt nào đối với việc định dạng bản ghi trong sql. Việc chia một bản ghi thành các dòng sẽ giúp dễ đọc hơn. Khi viết lệnh, ngôn ngữ sql cho phép bạn không chỉ chia lệnh thành các dòng mà còn cho phép chèn thụt lề ở đầu dòng và khoảng trắng giữa các phần tử bản ghi.

Bây giờ bạn đã biết các quy tắc cơ bản, hãy xem một ví dụ phức tạp hơn về việc tạo bảng có nhiều cột. Ở đầu bài viết, bảng nhân viên đã được hiển thị. Nó chứa các cột sau: họ, tên, ngày tuyển dụng, bộ phận, danh mục và mức lương trong năm. Lệnh sql sau đây được sử dụng để xác định bảng này:

tạo bảng nhân viên (ký tự họ (13) không rỗng, ký tự tên_tên (10) không rỗng, ngày thuê_ngày, ký tự chi nhánh_office (15), cấp_cấp nhỏ, số thập phân lương (9, 2));

Nhóm nghiên cứu gặp một số yếu tố mới. Trước hết, có biểu thức không null ở cuối định nghĩa của cột Last_name và First_name. Với sự trợ giúp của các cấu trúc như vậy, các yêu cầu được đặt ra phải được tuân thủ. Trong trường hợp này, nó chỉ ra rằng các trường họ và tên phải được điền khi nhập; Bạn không thể để trống các cột này (điều này khá logic: làm sao bạn có thể xác định được một nhân viên mà không biết tên của anh ta?).

Ngoài ra, ví dụ này còn chứa ba kiểu dữ liệu mới: ký tự, ký tự nhỏ và số thập phân. Cho đến nay chúng ta chưa nói nhiều về các loại. Mặc dù sql không có các miền quan hệ nhưng nó có một tập hợp các kiểu dữ liệu cơ bản. Thông tin này được sử dụng khi cấp phát bộ nhớ và so sánh các giá trị; ở một mức độ nhất định thu hẹp danh sách các giá trị đầu vào có thể có, nhưng kiểm soát kiểu trong sql ít nghiêm ngặt hơn so với các ngôn ngữ khác.

Tất cả các loại dữ liệu có sẵn trong sql có thể được chia thành sáu nhóm: chuỗi ký tự, giá trị số chính xác, giá trị số gần đúng, chuỗi bit, ngày giờ và khoảng thời gian. Chúng tôi đã liệt kê tất cả các loại, nhưng bài viết này sẽ chỉ thảo luận chi tiết về một số trong số chúng (ví dụ: chuỗi bit không được người dùng thông thường đặc biệt quan tâm).

Nhân tiện, nếu bạn nghĩ rằng ngày và giờ là lỗi đánh máy thì bạn đã nhầm. Nhóm này (datetime) bao gồm hầu hết các kiểu dữ liệu liên quan đến thời gian được sử dụng trong sql (các tham số như khoảng thời gian được tách thành một nhóm riêng). Trong ví dụ trước, chúng ta đã gặp hai loại dữ liệu từ nhóm ngày giờ - ngày và giờ.

Kiểu dữ liệu tiếp theo mà bạn đã quen thuộc là biến đổi ký tự (hoặc chỉ varchar); nó thuộc nhóm chuỗi ký tự. Nếu varchar được sử dụng để lưu trữ các chuỗi có độ dài thay đổi thì loại char gặp phải trong ví dụ thứ ba nhằm mục đích lưu trữ các chuỗi có số ký tự cố định. Ví dụ: cột Last_name sẽ chứa các chuỗi 13 ký tự, bất kể họ thực tế được nhập là gì, có thể là poe hay penworth-chickering (trong trường hợp là poe, 10 ký tự còn lại sẽ được lấp đầy bằng khoảng trắng).

Theo quan điểm của người dùng, varchar và char có cùng ý nghĩa. Tại sao cần phải giới thiệu hai loại? Thực tế là trong thực tế, bạn thường phải tìm kiếm sự dung hòa giữa hiệu suất và tiết kiệm dung lượng ổ đĩa. Theo quy định, việc sử dụng các chuỗi có độ dài cố định sẽ mang lại một số lợi ích về tốc độ truy cập, nhưng nếu độ dài chuỗi quá dài thì dung lượng ổ đĩa sẽ bị lãng phí. Nếu trong cuộc hẹn2 bạn dành 256 ký tự cho mỗi dòng nhận xét thì điều này có thể trở nên không hợp lý; thông thường các dòng sẽ ngắn hơn đáng kể. Mặt khác, họ cũng có độ dài khác nhau nhưng thường yêu cầu khoảng 13 ký tự; trong trường hợp này, tổn thất sẽ ở mức tối thiểu. Một nguyên tắc nhỏ là: nếu bạn biết độ dài của chuỗi thay đổi rất ít hoặc tương đối nhỏ thì hãy sử dụng char; trong các trường hợp khác - varchar.

Hai kiểu dữ liệu mới tiếp theo, nhỏ và thập phân, thuộc nhóm giá trị số chính xác. Smallint là viết tắt của số nguyên nhỏ. SQL cũng cung cấp kiểu dữ liệu số nguyên. Sự hiện diện của hai loại tương tự trong trường hợp này được giải thích bằng việc cân nhắc tiết kiệm không gian. Trong ví dụ của chúng tôi, các giá trị của tham số Grade_level có thể được biểu thị bằng số có hai chữ số, do đó, loại Smallint được sử dụng; tuy nhiên, trong thực tế không phải lúc nào người ta cũng biết giá trị tối đa mà các tham số có thể có. Nếu không có thông tin đó thì hãy sử dụng số nguyên. Lượng không gian thực tế được phân bổ để lưu trữ các tham số số nguyên và số nhỏ cũng như phạm vi giá trị tương ứng cho các tham số này là dành riêng cho từng nền tảng.

Kiểu dữ liệu thập phân, thường được sử dụng cho kế toán tài chính, cho phép bạn chỉ định một mẫu có số vị trí thập phân được yêu cầu. Vì loại này được sử dụng cho ký hiệu số chính xác nên nó đảm bảo độ chính xác khi thực hiện các phép toán trên dữ liệu thập phân. Nếu bạn sử dụng các kiểu dữ liệu từ nhóm ký hiệu số gần đúng cho các giá trị thập phân, ví dụ float (số dấu phẩy động), điều này sẽ dẫn đến lỗi làm tròn, do đó tùy chọn này không phù hợp cho các tính toán tài chính. Để xác định các tham số của kiểu thập phân, ký hiệu sau được sử dụng:

trong đó p là số chữ số thập phân, d là số chữ số thập phân. Thay vì p, hãy viết tổng số chữ số có nghĩa trong các giá trị được sử dụng và thay vì d, hãy viết số chữ số thập phân.

Thanh bên "Tạo bảng" hiển thị bản tóm tắt đầy đủ về lệnh tạo bảng. Nó chứa các phần tử mới và hiển thị định dạng cho tất cả các loại dữ liệu được xem xét (Về nguyên tắc, có các loại dữ liệu khác, nhưng chúng tôi chưa xem xét chúng).

Lúc đầu, có vẻ như cú pháp của lệnh sql quá phức tạp. Nhưng bạn có thể dễ dàng hiểu được nếu nghiên cứu kỹ các ví dụ trên. Một yếu tố bổ sung xuất hiện trên sơ đồ - một đường thẳng đứng; nó phục vụ để phân biệt giữa các thiết kế thay thế. Nói cách khác, khi xác định từng cột, bạn cần chọn kiểu dữ liệu phù hợp (như bạn nhớ, các tham số tùy chọn được đặt trong dấu ngoặc vuông và các cấu trúc có thể lặp lại nhiều lần được đặt trong dấu ngoặc nhọn; các ký tự đặc biệt này không được viết trong các lệnh sql thực). Phần đầu tiên của sơ đồ hiển thị tên đầy đủ của các loại dữ liệu, phần thứ hai chứa tên viết tắt của chúng; trong thực tế, bạn có thể sử dụng bất kỳ trong số chúng.

Phần đầu tiên của bài viết đã hoàn thành. Phần thứ hai sẽ được dành cho việc nghiên cứu các lệnh DML chèn, chọn, cập nhật và xóa. Các điều kiện lấy mẫu dữ liệu, toán tử so sánh và toán tử logic, việc sử dụng giá trị null và logic ba ngôi cũng sẽ được đề cập.

Tạo một bảng. Cú pháp của lệnh tạo bảng như sau: các tham số tùy chọn được biểu thị trong dấu ngoặc vuông và các cấu trúc lặp lại được biểu thị trong dấu ngoặc nhọn.

tạo bảng bảng (ký tự cột (độ dài) [ ràng buộc ] | ký tự thay đổi (độ dài) [ ràng buộc ] | ngày [ ràng buộc ] | thời gian [ ràng buộc ] | số nguyên [ ràng buộc ] | smallint [ ràng buộc ] | thập phân (độ chính xác, vị trí thập phân) [ ràng buộc ] | float (độ chính xác) [ ràng buộc ] [( , cột char (độ dài) [ ràng buộc ] | varchar (độ dài) [ ràng buộc ] | ngày [ ràng buộc ] | thời gian [ ràng buộc ] | int [ ràng buộc ] | Smallint [ ràng buộc ] | dec (độ chính xác, vị trí thập phân) [ ràng buộc ] | float (độ chính xác) [ ràng buộc ] )]) ​​​​;

Bí mật của tên sql

Vào đầu những năm 1970. ibm bắt đầu triển khai mô hình cơ sở dữ liệu quan hệ do Tiến sĩ Codd đề xuất. Donald Chamberlin và một nhóm người khác tại Đơn vị Nghiên cứu Nâng cao đã tạo ra một ngôn ngữ nguyên mẫu được gọi là ngôn ngữ truy vấn tiếng Anh có cấu trúc, hay đơn giản là phần tiếp theo. Sau đó nó đã được mở rộng và cải tiến. Phiên bản mới do ibm đề xuất được gọi là phần tiếp theo/2. Nó được sử dụng làm giao diện chương trình (api) để thiết kế hệ thống cơ sở dữ liệu quan hệ đầu tiên từ ibm - system/r. Vì lý do liên quan đến sắc thái pháp lý, ibm quyết định đổi tên: thay vì sử dụng next/2, hãy sử dụng sql (ngôn ngữ truy vấn có cấu trúc). Chữ viết tắt này thường được phát âm là “see-ku-el.”

Có sự khác biệt đáng kể giữa các nguyên mẫu phần tiếp theo ban đầu và tiêu chuẩn sql hiện được công nhận ở nhiều tổ chức khác nhau. Jim Melton, người chuẩn bị tiêu chuẩn sql-92, thậm chí còn tuyên bố rằng nhiều người đã nhầm lẫn khi nghĩ rằng từ “có cấu trúc” phản ánh chính xác các đặc điểm cụ thể của ngôn ngữ này (jim melton và Alan R. Simon "hiểu về sql mới: hướng dẫn đầy đủ" ." San Francisco: morgan kaufmann, 1993. isbn: 1-55860-245-3). Vì vậy, trên thực tế, sql chỉ là một cái tên, một dãy chữ cái s-q-l và không có gì hơn thế.

Tốt xấu

Ngôn ngữ truy vấn cấu trúc (SQL) được tạo ra do sự phát triển của mô hình dữ liệu quan hệ và hiện là ngôn ngữ tiêu chuẩn trên thực tế cho các DBMS quan hệ. Ngôn ngữ SQL ngày nay được hỗ trợ bởi một số lượng lớn DBMS thuộc nhiều loại khác nhau.

Tên của ngôn ngữ SQL thường được phát âm là "es-qu-el". Đôi khi cái tên dễ nhớ "See-Quel" được sử dụng.

Ngôn ngữ SQL cung cấp cho người dùng (với nỗ lực tối thiểu) các khả năng sau:

Tạo cơ sở dữ liệu và bảng với mô tả đầy đủ về cấu trúc của chúng

Thực hiện các thao tác thao tác dữ liệu cơ bản: chèn, thay đổi, xóa dữ liệu

Chạy cả truy vấn đơn giản và phức tạp.

Ngôn ngữ SQL hoàn chỉnh về mặt quan hệ.

Cấu trúc và cú pháp các lệnh của nó khá đơn giản và bản thân ngôn ngữ là phổ quát, tức là cú pháp và cấu trúc các lệnh của nó không thay đổi khi chuyển từ DBMS này sang DBMS khác.

Ngôn ngữ SQL có hai thành phần chính:

DDL (Ngôn ngữ định nghĩa dữ liệu) để xác định cấu trúc cơ sở dữ liệu và kiểm soát quyền truy cập vào dữ liệu

Ngôn ngữ DML (Ngôn ngữ thao tác dữ liệu) được thiết kế để truy xuất và cập nhật dữ liệu.

SQL là ngôn ngữ phi thủ tục, nghĩa là khi sử dụng nó, bạn phải chỉ định thông tin nào cần lấy chứ không phải cách lấy thông tin đó. Các lệnh SQL là các từ tiếng Anh thông thường (SELECT, INSERT, v.v.). Trước tiên chúng ta hãy xem các câu lệnh SQL DML:

CHỌN - chọn dữ liệu từ cơ sở dữ liệu

INSERT - chèn dữ liệu vào bảng

CẬP NHẬT - cập nhật dữ liệu trong bảng

DELETE - xóa dữ liệu khỏi bảng

câu lệnh CHỌN

Toán tử SELECT thực hiện các hành động tương đương với các phép toán đại số quan hệ sau: lựa chọn, chiếu và nối.

Truy vấn SQL đơn giản nhất sử dụng nó trông như thế này:

CHỌN col_name TỪ tbl

Từ khóa select được theo sau bởi một danh sách các cột được phân tách bằng dấu phẩy có dữ liệu sẽ được truy vấn trả về. Từ khóa from chỉ định dữ liệu được truy xuất từ ​​bảng (hoặc dạng xem) nào.

Kết quả của truy vấn chọn luôn là một bảng được gọi là bảng kết quả. Hơn nữa, kết quả của một truy vấn được thực hiện bằng câu lệnh select có thể được sử dụng để tạo một bảng mới. Nếu kết quả của hai truy vấn trên các bảng khác nhau có cùng định dạng, bạn có thể kết hợp chúng thành một bảng. Ngoài ra, bảng thu được từ một truy vấn có thể là chủ đề của các truy vấn tiếp theo.

Để chọn tất cả các cột và tất cả các hàng của bảng, chỉ cần đưa ra lệnh SELECT * FROM tbl;

Hãy xem xét bảng Sản phẩm, chứa thông tin về giá của nhiều loại sản phẩm khác nhau:

Yêu cầu kết quả

CHỌN * TỪ Sản phẩm;

sẽ là toàn bộ bảng Sản phẩm.

Bạn có thể chọn các cột bảng cụ thể bằng truy vấn

CHỌN col1, col2, …, coln TỪ tbl;

Vì vậy, kết quả của yêu cầu

CHỌN Loại, Giá TỪ Sản phẩm;

sẽ có một cái bàn

Danh sách các cột trong câu lệnh select cũng được sử dụng nếu cần thay đổi thứ tự các cột trong bảng kết quả:

Để chỉ chọn những hàng trong bảng thỏa mãn một số hạn chế nhất định, một từ khóa đặc biệt sẽ được sử dụng, theo sau là một điều kiện logic. Nếu một bản ghi thỏa mãn điều kiện này thì nó sẽ được đưa vào kết quả. Nếu không, mục nhập sẽ bị loại bỏ.

Ví dụ: chọn những sản phẩm đó từ bảng Sản phẩm có giá thỏa mãn điều kiện Giá<3200, можно осуществить, используя запрос

CHỌN * TỪ Sản phẩm nơi Giá<3200;

Kết quả của mình:

Điều kiện có thể phức tạp và được kết hợp bằng cách sử dụng các toán tử logic NOT , AND, OR, XOR, ví dụ: trong đó id_ Price>500 AND Price<3500. Допускается также использование выражений в условии: where Price>(1+1) và hằng chuỗi: trong đó name= "autoweights".

Sử dụng cấu trúc BETWEEN var1 AND var2 cho phép bạn kiểm tra xem giá trị của bất kỳ biểu thức nào có nằm trong phạm vi từ var1 đến var2 hay không (bao gồm các giá trị này):

CHỌN * TỪ Sản phẩm có Giá TỪ 3000 ĐẾN 3500;

Tương tự như toán tử NOT BETWEEN, có toán tử NOT IN.

Tên cột được chỉ định trong mệnh đề SELECT có thể được đổi tên. Đối với điều này, từ khóa AS được sử dụng, tuy nhiên, từ khóa này có thể được bỏ qua vì nó được ngụ ý ngầm. Ví dụ, yêu cầu

CHỌN Loại AS model, Type_id AS num FROM Product trong đó Type_id =3

sẽ trả về (tên bí danh nên được viết không có dấu ngoặc kép):

Toán tử THÍCH được thiết kế để so sánh một chuỗi với một mẫu:

CHỌN * TỪ tbl trong đó col_name THÍCH "abc"

Truy vấn này chỉ trả về những bản ghi chứa giá trị chuỗi abc trong cột col_name.

Mẫu được phép sử dụng hai ký tự đại diện: "_" và "%". Cái đầu tiên trong số chúng thay thế một ký tự tùy ý trong mẫu và cái thứ hai thay thế một chuỗi ký tự tùy ý. Vì vậy, "abc%" khớp với bất kỳ chuỗi nào bắt đầu bằng abc, "abc_" khớp với chuỗi 4 ký tự bắt đầu bằng abc, "%z" khớp với bất kỳ chuỗi nào kết thúc bằng z và cuối cùng, "%z%" - chuỗi ký tự chứa z.

Bạn có thể tìm thấy tất cả các bản ghi của bảng Sản phẩm trong đó giá trị Loại bắt đầu bằng chữ cái "a" như thế này:

CHỌN * TỪ Sản phẩm trong đó Nhập THÍCH "a%";

cân xe tải

Nếu chuỗi tìm kiếm chứa ký tự đại diện thì bạn phải chỉ định ký tự thoát trong mệnh đề ESCAPE. Ký tự điều khiển này phải được sử dụng trong mẫu trước ký tự đại diện, cho biết rằng ký tự đại diện phải được coi là ký tự thông thường. Ví dụ: nếu bạn tìm kiếm tất cả các giá trị trong một trường chứa ký tự "_", thì mẫu "%_%" sẽ dẫn đến tất cả các bản ghi từ bảng được trả về. Trong trường hợp này, mẫu nên được viết như sau:

"%|_%" THOÁT "|"

Để kiểm tra giá trị tuân thủ chuỗi "20%", bạn có thể sử dụng toán tử sau:

THÍCH "20#%" THOÁT "#"

Toán tử IS NULL cho phép bạn kiểm tra sự vắng mặt (sự hiện diện) của giá trị NULL trong các trường của bảng. Việc sử dụng toán tử so sánh thông thường trong những trường hợp này có thể tạo ra kết quả không chính xác vì so sánh với kết quả NULL trong UNKNOWN. Vì vậy, điều kiện lựa chọn sẽ như thế này:

trong đó col_name LÀ NULL, thay vì col_name=NULL.

Kết quả lựa chọn mặc định trả về các bản ghi theo đúng thứ tự chúng được lưu trữ trong cơ sở dữ liệu. Nếu bạn muốn sắp xếp các bản ghi theo một trong các cột, bạn phải sử dụng mệnh đề ORDER BY, theo sau là tên của cột đó:

CHỌN * TỪ tbl ĐẶT HÀNG THEO col_name;

Truy vấn này sẽ trả về các bản ghi theo thứ tự tăng dần của giá trị thuộc tính col_name.

Bạn cũng có thể sắp xếp các bản ghi theo nhiều cột. Để làm điều này, tên của họ phải được chỉ định sau ORDER BY, phân tách bằng dấu phẩy:

CHỌN * TỪ TBL ĐẶT HÀNG THEO col_name1, col_name2.

Các bản ghi sẽ được sắp xếp theo trường col_name1; nếu có một số bản ghi có giá trị trùng khớp trong cột col_name1 thì chúng sẽ được sắp xếp theo trường col_name2.

Nếu bạn muốn sắp xếp các bản ghi theo thứ tự ngược lại (ví dụ: giảm dần theo ngày), bạn phải chỉ định ORDER BY col_name DESC.

Để sắp xếp trực tiếp, có từ khóa ASC, được chấp nhận làm giá trị mặc định.

Nếu kết quả mẫu chứa hàng trăm hoặc hàng nghìn bản ghi thì việc xuất và xử lý chúng sẽ mất nhiều thời gian.

Do đó, thông tin thường được chia thành các trang và trình bày cho người dùng theo từng phần. Phân trang được sử dụng bằng cách sử dụng từ khóa giới hạn theo sau là số lượng mục cần hiển thị. Truy vấn sau đây truy xuất 10 bản ghi đầu tiên đồng thời sắp xếp ngược trên trường col_name1:

CHỌN * TỪ tbl ĐẶT HÀNG THEO col_name1 GIỚI HẠN MÔ TẢ 10

Để truy xuất 10 bản ghi tiếp theo, hãy sử dụng từ khóa giới hạn với hai giá trị: giá trị đầu tiên chỉ định vị trí mà kết quả sẽ được in và giá trị thứ hai chỉ định số lượng bản ghi cần truy xuất:

CHỌN * TỪ tbl ĐẶT HÀNG THEO col_name1 GIỚI HẠN MÔ TẢ 10,10

Để truy xuất 10 bản ghi tiếp theo, bạn phải sử dụng cấu trúc LIMIT 20, 10.

Ngôn ngữ lập trình

SQL (Ngôn ngữ truy vấn có cấu trúc) là ngôn ngữ quản lý cơ sở dữ liệu cho cơ sở dữ liệu quan hệ. Bản thân SQL không phải là ngôn ngữ lập trình hoàn chỉnh Turing, nhưng tiêu chuẩn của nó cho phép tạo ra các phần mở rộng thủ tục để mở rộng chức năng của nó thành ngôn ngữ lập trình chính thức.

Ngôn ngữ này được tạo ra vào những năm 1970 với tên “SEQUEL” cho hệ thống quản lý cơ sở dữ liệu System R (DBMS). Sau đó, nó được đổi tên thành “SQL” để tránh xung đột nhãn hiệu. Năm 1979, SQL lần đầu tiên được xuất bản dưới dạng sản phẩm thương mại, Oracle V2.

Tiêu chuẩn ngôn ngữ chính thức đầu tiên được ANSI áp dụng vào năm 1986 và ISO vào năm 1987. Kể từ đó, một số phiên bản khác của tiêu chuẩn đã được tạo ra, một số phiên bản lặp lại các phiên bản trước đó với những thay đổi nhỏ, một số khác có các tính năng mới quan trọng.

Bất chấp sự tồn tại của các tiêu chuẩn, hầu hết các cách triển khai SQL phổ biến khác nhau nhiều đến mức hiếm khi có thể chuyển mã từ hệ thống quản lý cơ sở dữ liệu này sang hệ thống quản lý cơ sở dữ liệu khác mà không thực hiện các thay đổi đáng kể. Điều này là do độ dài và độ phức tạp của tiêu chuẩn cũng như việc thiếu thông số kỹ thuật trong một số lĩnh vực triển khai quan trọng.

SQL được tạo ra như một cách đơn giản, được tiêu chuẩn hóa để truy xuất và thao tác dữ liệu có trong cơ sở dữ liệu quan hệ. Sau này nó trở nên phức tạp hơn dự định và trở thành công cụ của nhà phát triển hơn là công cụ của người dùng cuối. Hiện tại, SQL (chủ yếu do Oracle triển khai) vẫn là ngôn ngữ quản lý cơ sở dữ liệu phổ biến nhất, mặc dù vẫn tồn tại một số ngôn ngữ thay thế.

SQL bao gồm bốn phần riêng biệt:

  1. Ngôn ngữ định nghĩa dữ liệu (DDL) được sử dụng để xác định cấu trúc dữ liệu được lưu trữ trong cơ sở dữ liệu. Câu lệnh DDL cho phép bạn tạo, sửa đổi và xóa các đối tượng riêng lẻ trong cơ sở dữ liệu. Các loại đối tượng hợp lệ phụ thuộc vào DBMS được sử dụng và thường bao gồm cơ sở dữ liệu, người dùng, bảng và một số đối tượng hỗ trợ nhỏ hơn như vai trò và chỉ mục.
  2. Ngôn ngữ thao tác dữ liệu (DML) được sử dụng để truy xuất và sửa đổi dữ liệu trong cơ sở dữ liệu. Câu lệnh DML cho phép bạn truy xuất, chèn, sửa đổi và xóa dữ liệu trong bảng. Đôi khi các câu lệnh chọn truy xuất dữ liệu không được coi là một phần của DML vì chúng không thay đổi trạng thái của dữ liệu. Tất cả các câu lệnh DML đều có tính chất khai báo.
  3. Ngôn ngữ định nghĩa truy cập dữ liệu (DCL) được sử dụng để kiểm soát quyền truy cập vào dữ liệu trong cơ sở dữ liệu. Các câu lệnh DCL áp dụng cho các đặc quyền và cho phép bạn cấp và thu hồi các quyền áp dụng các câu lệnh DDL và DML nhất định cho các đối tượng cơ sở dữ liệu nhất định.
  4. Ngôn ngữ kiểm soát giao dịch (TCL) được sử dụng để kiểm soát việc xử lý các giao dịch trong cơ sở dữ liệu. Thông thường, các câu lệnh TCL bao gồm cam kết cam kết các thay đổi được thực hiện trong một giao dịch, khôi phục để khôi phục chúng và điểm lưu trữ để chia giao dịch thành nhiều phần nhỏ hơn.

Cần lưu ý rằng SQL triển khai mô hình lập trình khai báo: mỗi câu lệnh chỉ mô tả hành động được yêu cầu và DBMS đưa ra quyết định về cách thực hiện hành động đó, tức là. lập kế hoạch cho các hoạt động cơ bản cần thiết để thực hiện một hành động và thực hiện chúng. Tuy nhiên, để sử dụng hiệu quả các khả năng của SQL, nhà phát triển phải hiểu cách DBMS phân tích từng câu lệnh và tạo kế hoạch thực thi của nó.

Ví dụ:

Chào thế giới!:

Ví dụ cho phiên bản Oracle 10g SQL, Oracle 11g SQL

Chuỗi 'Xin chào, Thế giới!' được chọn từ bảng kép tích hợp sẵn, được sử dụng cho các truy vấn không yêu cầu quyền truy cập vào các bảng thực.

chọn "Xin chào thế giới!" từ kép ;

Yếu tố:

Ví dụ cho phiên bản Oracle 10g SQL, Oracle 11g SQL

SQL không hỗ trợ các vòng lặp, đệ quy hoặc các hàm do người dùng xác định. Ví dụ này minh họa một cách giải quyết khả thi bằng cách sử dụng:

  • mức cột giả để tạo các bảng giả t1 và t2 chứa các số từ 1 đến 16,
  • hàm tổng hợp sum , cho phép bạn tính tổng các phần tử của một tập hợp mà không cần sử dụng vòng lặp một cách rõ ràng,
  • và các hàm toán học ln và exp, cho phép bạn thay thế tích (cần thiết để tính giai thừa) bằng một tổng (do SQL cung cấp).

Dòng “0! = 1” sẽ không được bao gồm trong tập hợp các hàng kết quả, bởi vì cố gắng đánh giá kết quả ln(0) là một ngoại lệ.

Các số Fibonacci:

Ví dụ cho phiên bản Oracle 10g SQL, Oracle 11g SQL

SQL không hỗ trợ vòng lặp hoặc đệ quy và việc ghép các trường từ các hàng khác nhau trong bảng hoặc truy vấn không phải là hàm tổng hợp tiêu chuẩn. Ví dụ này sử dụng:

  • Công thức Binet và các hàm toán học ROUND, POWER và SQRT để tính số Fibonacci thứ n;
  • mức cột giả để tạo bảng giả t1 chứa các số từ 1 đến 16;
  • hàm tích hợp SYS_CONNECT_BY_PATH để nối thứ tự các số nhận được.

CHỌN THAY THẾ (MAX (SYS_CONNECT_BY_PATH (fib || ", " , "/" )), "/" , "" ) || "..." fiblist FROM ( SELECT n , fib , ROW_NUMBER () OVER (ORDER BY n ) r FROM ( select n , round ((power ((1 + sqrt (5 )) * 0 . 5 , n ) - power ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib from (chọn cấp n từ kết nối kép theo cấp độ<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Chào thế giới!:

Ví dụ cho các phiên bản Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, sqlite 3.7.3

chọn "Xin chào thế giới!" ;

Yếu tố:

Ví dụ về các phiên bản Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Một định nghĩa đệ quy của giai thừa được sử dụng, được thực hiện thông qua truy vấn đệ quy. Mỗi dòng truy vấn chứa hai trường số, n và n!, và mỗi dòng tiếp theo được tính toán bằng cách sử dụng dữ liệu từ dòng trước đó.

Bạn chỉ có thể tính giai thừa số nguyên lên tới 20!. Khi cố gắng tính 21! Xảy ra lỗi “Lỗi tràn số học”, tức là. lưới bit tràn.

Đối với số thực, giai thừa là 100! (Để làm được điều này, trong ví dụ bạn cần thay thế bigint bằng float ở dòng thứ 3)

Các số Fibonacci:

Ví dụ về các phiên bản Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Việc xác định lặp lại các số Fibonacci được sử dụng, thực hiện thông qua truy vấn đệ quy. Mỗi dòng truy vấn chứa hai số liền kề trong chuỗi và dòng tiếp theo được tính bằng (số cuối cùng, tổng các số) của dòng trước đó. Do đó, tất cả các số ngoại trừ số đầu tiên và số cuối cùng đều xuất hiện hai lần, do đó kết quả chỉ bao gồm các số đầu tiên của mỗi dòng.

Yếu tố:

Ví dụ cho phiên bản Oracle 10g SQL, Oracle 11g SQL

Ví dụ này minh họa cách sử dụng toán tử mô hình, có sẵn trong Oracle 10g, cho phép các chuỗi truy vấn được coi là các phần tử mảng. Mỗi dòng chứa hai trường - số dòng n và giai thừa f của nó.

chọn n || "! = " || f giai thừa từ mô hình kép trả về tất cả các chiều của hàng theo ( 0 d ) đo ( 0 f , 1 n ) quy tắc lặp lại ( 17 ) ( f [ iteration_number ] = giải mã ( iteration_number , 0 , 1 , f [ iteration_number - 1 ] * iteration_number ) , n [ iteration_number ] = iteration_number );

Các số Fibonacci:

Ví dụ cho phiên bản Oracle 10g SQL, Oracle 11g SQL

Ví dụ này minh họa cách sử dụng toán tử mô hình, có sẵn trong Oracle 10g, cho phép các chuỗi truy vấn được coi là các phần tử mảng. Mỗi dòng chứa hai trường - chính số Fibonacci và phép nối của tất cả các số nhỏ hơn hoặc bằng nó. Việc ghép các số lặp lại trong cùng một truy vấn để tạo ra chúng sẽ dễ dàng và nhanh hơn so với việc tổng hợp dưới dạng một thao tác riêng biệt.

chọn tối đa || ", ..." từ (chọn s từ mô hình kép trả về kích thước của tất cả các hàng theo ( 0 d ) đo ( cast (" " as varchar2 (200 )) s , 0 f ) quy tắc lặp lại ( 16 ) ( f [ iteration_number ] = giải mã ( iteration_number , 0 , 1 , 1 , 1 , f [ iteration_number - 1 ] + f [ iteration_number - 2 ]), s [ iteration_number ] = giải mã ( iteration_number , 0 , to_char (f [ iteration_number ]), s [ iteration_number - 1 ] || ", " || to_char (f [ iteration_number ])) );

Yếu tố:

Ví dụ về phiên bản MySQL 5

chọn concat (cast (t2 . n as char ), "!= " , cast (exp (sum (log (t1 . n ))) as char )) from ( select @ i : = @ i + 1 AS n from TABLE , (chọn @ i : = 0 ) làm giới hạn sel1 16 ) t1 , ( select @ j : = @ j + 1 AS n từ TABLE , (chọn @ j : = 0 ) làm giới hạn sel1 16 ) t2 trong đó t1 . N<= t2 . n group by t2 . n

Các số Fibonacci:

Ví dụ về phiên bản MySQL 5

Thay thế TABLE bằng bất kỳ bảng nào bạn có thể truy cập, ví dụ mysql.help_topic .

chọn concat (group_concat (f dấu phân cách ", " ), ", ..." ) từ (select @ f : = @ i + @ j as f , @ i : = @ j , @ j : = @ f from TABLE , (chọn @ i : = 1 , @ j : = 0 ) sel1 giới hạn 16 ) t

Chào thế giới!:

Ví dụ cho phiên bản Oracle 10g SQL, Oracle 11g SQL

Ví dụ này sử dụng khối PL/SQL ẩn danh để in thông báo ra đầu ra tiêu chuẩn bằng cách sử dụng gói dbms_output.

bắt đầu dbms_output. put_line("Xin chào thế giới!"); kết thúc ;

Yếu tố:

Ví dụ cho phiên bản Oracle 10g SQL, Oracle 11g SQL

Ví dụ này trình bày cách tính toán lặp lại giai thừa bằng PL/SQL.

khai báo n số := 0 ; số f := 1 ; bắt đầu trong khi (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

Các số Fibonacci:

Ví dụ cho phiên bản Oracle 10g SQL, Oracle 11g SQL

Ví dụ này sử dụng phép xác định lặp lại các số Fibonacci. Các số đã được tính toán sẽ được lưu trữ trong cấu trúc dữ liệu varray - tương tự như một mảng.

khai báo kiểu vector là varray (16) của số; vectơ fib := vector(); tôi đánh số ; s varchar2(100); bắt đầu xơ . mở rộng(16); xơ (1) := 1; sợi (2) := 1; s : = sợi (1 ) || ", " || xơ(2) || "," ; for i in 3 .. 16 vòng lặp fib(i) : = fib(i - 1) + fib(i - 2); s := s || xơ(i) || "," ; kết thúc vòng lặp; dbms_output. put_line (s || "..." ); kết thúc ;

Phương trình bậc hai:

Ví dụ cho phiên bản Oracle 10g SQL, Oracle 11g SQL

Ví dụ này đã được thử nghiệm trong SQL*Plus, TOAD và PL/SQL Developer.

SQL thuần túy cho phép bạn giới thiệu các biến trong quá trình thực hiện truy vấn dưới dạng các biến có thể thay thế được. Để xác định một biến như vậy, tên của nó (trong trường hợp này là A, B và C) phải được sử dụng với ký hiệu & ở phía trước bất cứ khi nào biến cần được tham chiếu. Khi truy vấn được thực thi, người dùng sẽ được nhắc nhập giá trị của tất cả các biến thay thế được sử dụng trong truy vấn. Khi các giá trị được nhập, mỗi tham chiếu đến biến đó sẽ được thay thế bằng giá trị của nó và yêu cầu kết quả sẽ được thực thi.

Có một số cách để nhập giá trị cho biến thay thế. Trong ví dụ này, tham chiếu đầu tiên cho mỗi biến được bắt đầu bằng một ký hiệu kép && thay vì một ký hiệu đơn. Bằng cách này, giá trị cho mỗi biến chỉ được nhập một lần và tất cả các tham chiếu tiếp theo đến biến đó sẽ được thay thế bằng cùng một giá trị (khi sử dụng một ký hiệu và trong SQL*Plus, giá trị cho mỗi tham chiếu đến cùng một biến phải được nhập riêng biệt ). Trong PL/SQL Developer, tất cả các tham chiếu biến phải được bắt đầu bằng một ký tự &, nếu không sẽ xảy ra lỗi ORA-01008 “Không phải tất cả các biến bị ràng buộc”.

Dòng đầu tiên của ví dụ chỉ định ký tự cho dấu tách thập phân, được sử dụng khi chuyển đổi số gốc thành chuỗi.

Bản thân yêu cầu bao gồm bốn yêu cầu khác nhau. Mỗi truy vấn trả về một chuỗi chứa kết quả tính toán trong một trong các trường hợp (A=0, D=0, D>0 và D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

thay đổi bộ phiên NLS_NUMERIC_CHARACTERS = "." chọn "Không phải phương trình bậc hai." ans từ kép trong đó && A = 0 hợp chọn "x = " || to_char (-&& B / 2 /& A ) từ kép trong đó & A != 0 và & B *& B - 4 *& A *&& C = 0 hợp chọn "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) || ", x2 = " || to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A từ kép trong đó & A != 0 và & B *& B - 4 *& A *& C > 0 hợp chọn "x1 = (" || to_char (-& B / 2 /& A ) || "," || to_char (sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) ||", " || "x2 = (" || to_char (-& B / 2 /& A ) || "," || to_char (- sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || ")" từ kép trong đó & A != 0 và & B *& B - 4 *& A *& C< 0 ;

Bạn là người mới làm quen với lập trình hay đơn giản là bạn đã tránh học SQL trước đây? Sau đó, bạn đã đến đúng địa chỉ, vì bất kỳ nhà phát triển nào cuối cùng cũng phải đối mặt với nhu cầu biết ngôn ngữ truy vấn này. Bạn có thể không phải là người thiết kế cơ sở dữ liệu chính nhưng gần như không thể tránh khỏi việc làm việc với họ. Tôi hy vọng phần tổng quan ngắn gọn về cú pháp truy vấn SQL cơ bản này sẽ giúp ích cho nhà phát triển quan tâm và bất kỳ ai khác cần nó.

Cơ sở dữ liệu SQL là gì?

Structured Query Language ( S có cấu trúc Q uery L anguage) là một tiêu chuẩn giao tiếp cơ sở dữ liệu được ANSI hỗ trợ. Phiên bản mới nhất là SQL-99, mặc dù một tiêu chuẩn mới đã được phát triển. Hầu hết các cơ sở dữ liệu đều tuân thủ chặt chẽ tiêu chuẩn ANSI-92. Đã có nhiều cuộc thảo luận về việc giới thiệu các tiêu chuẩn hiện đại hơn, nhưng các nhà cung cấp cơ sở dữ liệu thương mại đang dần loại bỏ điều này bằng cách phát triển các khái niệm mới của riêng họ để lưu trữ dữ liệu được lưu trữ. Hầu hết mọi cơ sở dữ liệu đều sử dụng một số bộ cú pháp duy nhất, mặc dù rất giống với tiêu chuẩn ANSI. Trong hầu hết các trường hợp, cú pháp này là phần mở rộng của tiêu chuẩn cơ sở, mặc dù có những trường hợp cú pháp này tạo ra các kết quả khác nhau cho các cơ sở dữ liệu khác nhau. Việc xem lại tài liệu cơ sở dữ liệu luôn là một ý tưởng hay, đặc biệt nếu bạn nhận được kết quả không mong muốn.

Nếu bạn mới làm quen với SQL, có một số khái niệm cơ bản bạn cần hiểu.

Nói chung, "cơ sở dữ liệu" là tên chung cho hệ thống quản lý cơ sở dữ liệu quan hệ(RDBMS). Đối với một số hệ thống, "cơ sở dữ liệu" cũng đề cập đến một nhóm bảng, dữ liệu hoặc thông tin cấu hình vốn là một phần tách biệt với các cấu trúc tương tự khác. Trong trường hợp này, mỗi lần cài đặt cơ sở dữ liệu SQL có thể bao gồm một số cơ sở dữ liệu. Trong các hệ thống khác, chúng được gọi là bảng.

Bảng là một cấu trúc cơ sở dữ liệu bao gồm cột chứa đựng dòng dữ liệu. Thông thường, các bảng được tạo để chứa thông tin liên quan. Nhiều bảng có thể được tạo trong cùng một cơ sở dữ liệu.

Mỗi cột đại diện cho một thuộc tính hoặc tập hợp thuộc tính của đối tượng, chẳng hạn như số nhận dạng nhân viên, chiều cao, màu xe, v.v. Thuật ngữ thường được sử dụng để chỉ một cột là cánh đồng cho biết tên, ví dụ "trong trường Tên". Trường hàng là phần tử tối thiểu của bảng. Mỗi cột trong bảng có tên, kiểu dữ liệu và kích thước cụ thể. Tên cột phải là duy nhất trong bảng.

Mỗi hàng (hoặc bản ghi) đại diện cho một tập hợp các thuộc tính của một đối tượng cụ thể, ví dụ: một hàng có thể chứa mã số nhận dạng của nhân viên, mức lương, năm sinh của anh ta, v.v. Các hàng của bảng không có tên. Để truy cập vào một hàng cụ thể, người dùng phải chỉ định một số thuộc tính (hoặc tập hợp thuộc tính) để xác định duy nhất nó.

Một trong những thao tác quan trọng nhất được thực hiện khi làm việc với dữ liệu là truy xuất thông tin được lưu trữ trong cơ sở dữ liệu. Để làm điều này, người dùng phải thực thi lời yêu cầu(truy vấn).

Bây giờ chúng ta hãy xem các loại truy vấn cơ sở dữ liệu chính tập trung vào thao tác dữ liệu trong cơ sở dữ liệu. Vì mục đích của chúng tôi, tất cả các ví dụ đều được cung cấp ở dạng SQL tiêu chuẩn để phù hợp với mọi môi trường.

Các loại truy vấn dữ liệu

Có bốn loại truy vấn dữ liệu chính trong SQL, được gọi là ngôn ngữ thao tác dữ liệu(Ngôn ngữ thao tác dữ liệu hoặc DML):

  • LỰA CHỌN– chọn các hàng từ bảng;
  • CHÈN– thêm hàng vào bảng;
  • CẬP NHẬT– thay đổi các hàng trong bảng;
  • XÓA BỎ– xóa các hàng trong bảng;

Mỗi truy vấn này có các toán tử và hàm khác nhau được sử dụng để thực hiện một số hành động trên dữ liệu. Truy vấn SELECT có số lượng tùy chọn lớn nhất. Ngoài ra còn có các loại truy vấn bổ sung được sử dụng cùng với CHỌN, chẳng hạn như THAM GIA và UNION. Nhưng hiện tại, chúng tôi sẽ chỉ tập trung vào các truy vấn cơ bản.

Sử dụng truy vấn CHỌN để chọn dữ liệu bạn muốn

Để truy xuất thông tin được lưu trữ trong cơ sở dữ liệu, truy vấn SELECT được sử dụng. Hiệu ứng cơ bản của truy vấn này được giới hạn ở một bảng duy nhất, mặc dù có những thiết kế cho phép bạn chọn từ nhiều bảng cùng một lúc. Để lấy tất cả các hàng dữ liệu cho các cột cụ thể, một truy vấn như sau sẽ được sử dụng:

CHỌN cột1, cột2 TỪ tên_bảng;

Bạn cũng có thể lấy tất cả các cột từ một bảng bằng ký tự đại diện *:

CHỌN * TỪ tên_bảng;

Điều này có thể hữu ích khi bạn định chọn dữ liệu bằng mệnh đề WHERE cụ thể. Truy vấn sau sẽ trả về tất cả các cột từ tất cả các hàng trong đó "cột1" chứa giá trị "3":

Ngoài = (bằng), còn có các toán tử điều kiện sau:

Ngoài ra, bạn có thể sử dụng điều kiện BITWEEN và THÍCH để so sánh với điều kiện WHERE cũng như sự kết hợp của toán tử AND và OR.

Dịch sang tiếng Nga, có nghĩa là: chọn tất cả các hàng từ bảng table_name, trong đó giá trị của cột tuổi lớn hơn hoặc bằng 18 và giá trị của cột LastName nằm trong phạm vi bảng chữ cái từ Ivanov đến Sidorov, hoặc giá trị của cột Công ty là Motorola.

Sử dụng truy vấn INSERT để chèn dữ liệu mới

Truy vấn INSERT được sử dụng để sự sáng tạo dòng dữ liệu mới. Để cập nhật dữ liệu hiện có hoặc các trường hàng trống, bạn phải sử dụng truy vấn CẬP NHẬT.

Ví dụ cú pháp truy vấn INSERT:

XÁC NHẬN VÀO tên_bảng (cột1, cột2, cột3) GIÁ TRỊ ("data1", "data2", "data3");

Nếu bạn định chèn tất cả các giá trị theo thứ tự xuất hiện của các cột trong bảng, bạn có thể bỏ qua tên cột, mặc dù điều này tốt hơn để dễ đọc. Ngoài ra, nếu liệt kê các cột, bạn không nhất thiết phải liệt kê chúng theo thứ tự xuất hiện trong cơ sở dữ liệu, miễn là các giá trị bạn nhập khớp với thứ tự đó. Bạn không nên liệt kê những cột không chứa thông tin.

Thông tin hiện có trong cơ sở dữ liệu được thay đổi theo cách rất giống nhau.

CẬP NHẬT Truy vấn và điều kiện WHERE

CẬP NHẬT được sử dụng để thay đổi các giá trị hiện có hoặc giải phóng một trường trong một hàng, do đó các giá trị mới phải khớp với kiểu dữ liệu hiện có và cung cấp các giá trị được chấp nhận. Nếu không muốn thay đổi giá trị ở tất cả các hàng thì bạn cần sử dụng mệnh đề WHERE.

Bạn có thể sử dụng WHERE trên bất kỳ cột nào, kể cả cột bạn muốn thay đổi. Điều này được sử dụng khi cần thay thế một giá trị cụ thể bằng một giá trị khác.

Hãy cẩn thận! Truy vấn DELETE xóa toàn bộ hàng

Truy vấn DELETE sẽ xóa hoàn toàn một hàng khỏi cơ sở dữ liệu. Nếu bạn muốn xóa một trường duy nhất thì bạn cần sử dụng yêu cầu CẬP NHẬT và đặt trường này thành giá trị tương tự như NULL trong chương trình của bạn. Hãy cẩn thận giới hạn truy vấn DELETE của bạn ở mệnh đề WHERE, nếu không bạn có thể mất toàn bộ nội dung của bảng.

Khi một hàng đã bị xóa khỏi cơ sở dữ liệu của bạn, nó sẽ không thể được khôi phục lại, vì vậy bạn nên có một cột có tên "IsActive" hoặc cột tương tự mà bạn có thể thay đổi thành null, điều này sẽ cho biết rằng chế độ xem dữ liệu từ hàng đó đã bị khóa.

Bây giờ bạn đã biết kiến ​​thức cơ bản về truy vấn SQL

SQL là ngôn ngữ cơ sở dữ liệu và chúng tôi đã đề cập đến các lệnh cơ bản và quan trọng nhất được sử dụng trong truy vấn dữ liệu. Có rất nhiều khái niệm cốt lõi chưa được đề cập đến (ví dụ: SUM và COUNT), nhưng một số lệnh mà chúng tôi liệt kê ở trên sẽ khuyến khích bạn hoạt động tích cực và tìm hiểu sâu hơn về ngôn ngữ truy vấn tuyệt vời có tên là SQL.

Trong chương này...

  • SQL là gì
  • Những quan niệm sai lầm về SQL
  • Nhìn vào các tiêu chuẩn SQL khác nhau
  • Giới thiệu về các lệnh SQL tiêu chuẩn và các từ dành riêng
  • Biểu thị số, ký hiệu, ngày, giờ và các loại dữ liệu khác
  • Giá trị và hạn chế không xác định
  • Sử dụng SQL trong hệ thống máy khách/máy chủ
  • SQL trên web

SQL là một ngôn ngữ linh hoạt có thể được sử dụng theo nhiều cách khác nhau. Nó là công cụ phổ biến nhất được sử dụng để giao tiếp với cơ sở dữ liệu quan hệ. Trong chương này, tôi sẽ giải thích SQL là gì và không phải là gì, cụ thể SQL khác với các loại ngôn ngữ máy tính khác như thế nào. Sau đó, bạn sẽ làm quen với các lệnh và kiểu dữ liệu mà SQL tiêu chuẩn hỗ trợ. Ngoài ra, tôi sẽ giải thích các khái niệm cơ bản như giá trị không xác địnhnhững hạn chế. Cuối cùng, phần tổng quan sẽ được cung cấp về cách SQL phù hợp với môi trường máy khách/máy chủ, cũng như Internet và mạng nội bộ của các tổ chức.

SQL là gì và không phải là gì

Điều đầu tiên cần hiểu về SQL là nó không phải là một thủ tục như FORTRAN, Basic, C, COBOL, Pascal và Java. Để giải quyết vấn đề bằng cách sử dụng một trong các ngôn ngữ thủ tục này, bạn phải viết một thủ tục thực hiện lần lượt các thao tác được chỉ định cho đến khi tác vụ được hoàn thành. Thủ tục có thể là một chuỗi tuyến tính hoặc có phân nhánh, nhưng trong cả hai trường hợp, người lập trình chỉ định thứ tự thực hiện.

Nói cách khác, SQL là phi thủ tục lưỡi. Để sử dụng nó để giải quyết vấn đề, hãy nói với SQL, Những gì chính xác bạn cần nó như thể bạn đang nói chuyện với vị thần từ chiếc đèn của Aladdin. Và đồng thời không cần phải nói, Làm sao mang lại cho bạn những gì bạn muốn. Hệ thống quản lý cơ sở dữ liệu (DBMS) sẽ quyết định cách tốt nhất để đáp ứng yêu cầu của bạn.

Khỏe. Tôi vừa nói rằng SQL không phải là ngôn ngữ thủ tục. Về bản chất, điều này là đúng. Tuy nhiên, với hàng triệu lập trình viên xung quanh (và bạn có thể là một trong số họ) đã quen với việc giải quyết các vấn đề theo thủ tục, trong những năm gần đây đã có rất nhiều áp lực phải bổ sung một số khả năng thủ tục cho SQL. Đó là lý do tại sao phiên bản mới của đặc tả SQL, SQL:2003, hiện bao gồm các tính năng ngôn ngữ thủ tục như khối BEGIN, câu lệnh IF có điều kiện, hàm và thủ tục. Với những công cụ mới này, các chương trình có thể được lưu trữ trên máy chủ để nhiều người dùng có thể sử dụng lại.

Để minh họa điều tôi muốn nói khi nói “hãy cho hệ thống biết chính xác những gì bạn cần”, giả sử bạn có một bảng NHÂN VIÊN chứa dữ liệu nhân viên và bạn muốn chọn tất cả các hàng từ bảng đó tương ứng với tất cả các nhân viên “cấp cao”. Người lao động "cao cấp" có thể được định nghĩa là bất kỳ ai trên 40 tuổi hoặc kiếm được hơn 60.000 USD một năm. Lựa chọn bạn cần có thể được thực hiện bằng truy vấn sau:

CHỌN * TỪ NHÂN VIÊN Ở ĐÂU TUỔI >40 HOẶC LƯƠNG >60000;

Câu lệnh này chọn từ bảng NHÂN VIÊN tất cả các hàng trong đó giá trị cột AGE (tuổi) lớn hơn 40 hoặc giá trị cột LƯƠNG (tiền lương) lớn hơn 60000. Bản thân SQL biết cách chọn thông tin. Công cụ cơ sở dữ liệu kiểm tra cơ sở dữ liệu và tự quyết định cách thực hiện truy vấn. Tất cả bạn phải làm là chỉ ra những dữ liệu bạn cần.

Nhớ:
Truy vấn là một câu hỏi bạn đặt ra cho cơ sở dữ liệu. Nếu bất kỳ dữ liệu nào của nó phù hợp với điều kiện yêu cầu của bạn thì SQL sẽ chuyển nó cho bạn
.

Việc triển khai SQL hiện đại thiếu nhiều cấu trúc lập trình đơn giản vốn là nền tảng cho hầu hết các ngôn ngữ khác. Các ứng dụng hàng ngày thường yêu cầu ít nhất một số cấu trúc này, vì vậy SQL thực sự là ngôn ngữ phụ dữ liệu. Ngay cả với những bổ sung dành cho SQL với tiêu chuẩn SQL:1999 và các phần mở rộng bổ sung được thêm vào trong SQL:2003, bạn vẫn cần sử dụng một trong các ngôn ngữ lập trình, chẳng hạn như C, với SQL để tạo một ứng dụng hoàn chỉnh.

Bạn có thể chọn thông tin từ cơ sở dữ liệu theo một trong các cách sau.

  • Sử dụng truy vấn một lần, không thể lập trình từ bảng điều khiển máy tính, nhập lệnh SQL và đọc kết quả thực thi lệnh đó trên màn hình. Bảng điều khiển là một thuật ngữ truyền thống để chỉ phần cứng máy tính thực hiện công việc của bàn phím và màn hình trong các PC hiện đại. Truy vấn trên bảng điều khiển rất hữu ích khi bạn cần phản hồi nhanh cho một yêu cầu cụ thể. Để đáp ứng một số nhu cầu hiện tại, bạn có thể cần dữ liệu từ cơ sở dữ liệu chưa từng được yêu cầu trước đây. Bạn có thể không bao giờ cần chúng nữa, nhưng bạn cần chúng ngay bây giờ. Nhập truy vấn SQL thích hợp từ bàn phím và sau một lúc, kết quả sẽ xuất hiện trên màn hình của bạn.
  • Sử dụng chương trình truy xuất thông tin từ cơ sở dữ liệu và sau đó tạo báo cáo dựa trên dữ liệu này, hiển thị trên màn hình hoặc được in. SQL cũng có thể được sử dụng theo cách này. Một truy vấn SQL phức tạp có thể hữu ích trong tương lai có thể được đặt trực tiếp vào chương trình. Điều này cho phép bạn tái sử dụng nó trong tương lai. Do đó, việc xây dựng truy vấn được thực hiện một lần. Chương 15 trình bày cách chèn mã SQL vào các chương trình viết bằng ngôn ngữ khác.