Câu lệnh SQL SELECT
Truy xuất dữ liệu bằng câu lệnh SQL Select
SQL là một ngôn ngữ cơ sở dữ liệu toàn diện. SQL, phát âm là Sequel hay đơn giản là SQL, là một ngôn ngữ lập trình máy tính được sử dụng để truy vấn cơ sở dữ liệu quan hệ theo cách tiếp cận phi thủ tục. Khi bạn trích xuất thông tin từ cơ sở dữ liệu bằng SQL, điều này được gọi là truy vấn cơ sở dữ liệu.
Cơ sở dữ liệu quan hệ được thực hiện thông qua việc sử dụng Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). Một RDBMS thực hiện tất cả các chức năng cơ bản của phần mềm DBMS được đề cập ở trên cùng với vô số các chức năng khác làm cho mô hình quan hệ dễ hiểu và dễ thực hiện hơn. Người dùng RDBMS thao tác dữ liệu thông qua việc sử dụng một ngôn ngữ thao tác dữ liệu đặc biệt. Cấu trúc cơ sở dữ liệu được xác định thông qua việc sử dụng ngôn ngữ định nghĩa dữ liệu. Các lệnh mà người dùng hệ thống thực thi để lưu trữ và truy xuất dữ liệu có thể được nhập tại một thiết bị đầu cuối có giao diện RDBMS bằng cách nhập các lệnh hoặc nhập thông qua sử dụng một số loại giao diện đồ họa. Sau đó, DBMS xử lý các lệnh.
Khả năng của câu lệnh SELECT
Việc truy xuất dữ liệu từ cơ sở dữ liệu được thực hiện thông qua việc sử dụng SQL phù hợp và hiệu quả. Ba khái niệm từ lý thuyết quan hệ bao hàm khả năng của câu lệnh SELECT: phép chiếu, phép chọn và phép nối.
Phép chiếu: Hoạt động dự án chỉ chọn một số cột (trường) nhất định từ bảng. Bảng kết quả có một tập hợp con của các cột có sẵn và có thể bao gồm bất kỳ thứ gì từ một cột đến tất cả các cột có sẵn.
Lựa chọn: Thao tác chọn chọn một tập hợp con các hàng (bản ghi) trong bảng (quan hệ) thỏa mãn điều kiện lựa chọn. Khả năng chọn các hàng từ trong tập hợp kết quả hoàn chỉnh được gọi là Lựa chọn. Nó liên quan đến lọc có điều kiện và dàn dữ liệu. Tập hợp con có thể từ không có hàng nào, nếu không có hàng nào thỏa mãn điều kiện lựa chọn, đến tất cả các hàng trong bảng.
Nối: Thao tác nối kết hợp dữ liệu từ hai hoặc nhiều bảng dựa trên một hoặc nhiều giá trị cột chung. Thao tác nối cho phép người dùng hệ thống thông tin xử lý các mối quan hệ tồn tại giữa các bảng. Hoạt động nối rất mạnh mẽ vì nó cho phép người dùng hệ thống điều tra mối quan hệ giữa các phần tử dữ liệu mà có thể không lường trước được vào thời điểm cơ sở dữ liệu được thiết kế.
Hãy xem xét các cấu trúc bảng trên. Tìm nạp tên first_name, phòng ban và mức lương cho một nhân viên từ bảng EMPLOYEES là Phép chiếu. Tìm nạp thông tin chi tiết của nhân viên có mức lương dưới 5000, từ bảng NHÂN VIÊN là Lựa chọn. Tìm nạp tên nhân viên, tên bộ phận bằng cách tham gia NHÂN VIÊN và PHÒNG LÀ Tham gia.
Câu lệnh SELECT cơ bản
Cú pháp cơ bản cho câu lệnh SELECT được trình bày bên dưới.
SELECT [DISTINCT | ALL] {* | select_list}
FROM {table_name [alias] | view_name}
[{table_name [alias] | view_name}]...
[WHERE condition]
[GROUP BY condition_list]
[HAVING condition]
[ORDER BY {column_name | column_# [ ASC | DESC ] } ...
Mệnh đề SELECT là bắt buộc và thực hiện hoạt động của dự án quan hệ.
Mệnh đề FROM cũng là bắt buộc. Nó xác định một hoặc nhiều bảng và / hoặc dạng xem để lấy dữ liệu cột được hiển thị trong bảng kết quả.
Mệnh đề WHERE là tùy chọn và thực hiện thao tác chọn quan hệ. Nó chỉ định những hàng sẽ được chọn.
Mệnh đề GROUP BY là tùy chọn. Nó tổ chức dữ liệu thành các nhóm theo một hoặc nhiều tên cột được liệt kê trong mệnh đề SELECT.
Mệnh đề HAVING tùy chọn đặt các điều kiện liên quan đến nhóm nào cần đưa vào bảng kết quả. Các nhóm được chỉ định bởi mệnh đề GROUP BY.
Mệnh đề ORDER BY là tùy chọn. Nó sắp xếp kết quả truy vấn theo một hoặc nhiều cột theo thứ tự tăng dần hoặc giảm dần.
Biểu thức số học và giá trị NULL trong câu lệnh SELECT
Một biểu thức số học có thể được tạo bằng cách sử dụng tên cột, toán tử và giá trị hằng số để nhúng biểu thức vào câu lệnh SELECT. Toán tử áp dụng cho một cột phụ thuộc vào kiểu dữ liệu của cột. Ví dụ, các toán tử số học sẽ không phù hợp với các giá trị chữ ký tự. Ví dụ,
SELECT employee_id, sal * 12 ANNUAL_SAL
FROM employees;
Truy vấn trên chứa biểu thức số học (sal * 12) để tính lương hàng năm của mỗi nhân viên.
Toán tử số học
Toán tử tác động lên các cột (được gọi là toán hạng) để dẫn đến một kết quả khác. Trong trường hợp có nhiều toán tử trong một biểu thức, thứ tự loại bỏ được quyết định bởi độ ưu tiên của toán tử. Đây là các quy tắc cơ bản về mức độ ưu tiên -
Phép nhân và phép chia xảy ra trước phép cộng và phép trừ.
Các toán tử có cùng mức độ ưu tiên được đánh giá từ trái sang phải.
Sử dụng paretheses để ghi đè hành vi mặc định của các toán tử.
Bảng dưới đây cho thấy mức độ ưu tiên của các toán tử, trong những trường hợp như vậy. Mức ưu tiên Hoạt động Ký hiệu Toán tử
Description Operator Precedence
Addition + Lowest
Subtraction - Lowest
Multiplication * Medium
Division / Medium
Brackets ( ) Highest
Kiểm tra các truy vấn dưới đây (a), (b) và (c)
SQL> SELECT 2*35 FROM DUAL;
SQL> SELECT salary + 1500 FROM employees;
SQL> SELECT first_name, salary, salary + (commission_pct* salary) FROM employees;
Truy vấn (a) nhân hai số, trong khi (b) hiển thị cộng 1500 đô la vào lương của tất cả nhân viên. Truy vấn (c) hiển thị việc bổ sung thành phần hoa hồng vào lương của nhân viên. Theo mức độ ưu tiên, hoa hồng đầu tiên sẽ được tính trên lương, sau đó được cộng vào lương.
Bí danh cột
Bí danh được sử dụng để đổi tên một cột hoặc một biểu thức trong khi hiển thị. Bí danh của một cột hoặc một biểu thức xuất hiện dưới dạng tiêu đề trong đầu ra của một truy vấn. Nó hữu ích trong việc cung cấp một tiêu đề có ý nghĩa cho các biểu thức dài trong truy vấn SELECT. Theo mặc định, bí danh xuất hiện ở dạng chữ hoa trong đầu ra truy vấn mà không có dấu cách. Để ghi đè hành vi này, bí danh phải được đặt trong dấu ngoặc kép để bảo toàn trường hợp và dấu cách trong tên bí danh.
SELECT price * 2 as DOUBLE_PRICE, price * 10 "Double Price"
FROM products;
DOUBLE_PRICE Double Price
------------ ------------
39.9 39.9
60 60
51.98 51.98
Toán tử nối
Toán tử nối có thể được sử dụng để nối hai giá trị chuỗi hoặc biểu thức trong một truy vấn SELECT. Biểu tượng thanh dọc kép được sử dụng làm toán tử nối chuỗi. Nó chỉ áp dụng cho các giá trị cột ký tự và chuỗi dẫn đến một biểu thức ký tự mới. Thí dụ
SQL> SELECT 'ORACLE'||' CERTIFICATION' FROM dual;
Truy vấn trên hiển thị sự nối hai giá trị theo nghĩa đen của ký tự.
Chữ viết
Bất kỳ giá trị được mã hóa cứng nào, không được lưu trữ trong cơ sở dữ liệu, trong mệnh đề SELECT, đều được biết đến là Literal. Nó có thể là số, ký tự hoặc giá trị ngày tháng. Giá trị ký tự và ngày tháng phải được đặt trong dấu ngoặc kép. Hãy xem xét các truy vấn SQL dưới đây. Ví dụ về việc sử dụng các ký tự của các kiểu dữ liệu khác nhau trong các truy vấn SQL.
Truy vấn dưới đây sử dụng hai ký tự ký tự để nối chúng với nhau.
SQL> SELECT 'ORACLE'||' CERTIFICATION' FROM DUAL
Truy vấn bên dưới sử dụng các ký tự để in khá đẹp tiền lương của nhân viên.
SQL> SELECT first_name ||'earns'|| salary||' as of '|||sysdate
FROM employees
Trích dẫn Nhà điều hành
Toán tử trích dẫn được sử dụng để chỉ định dấu phân cách dấu ngoặc kép của riêng bạn. Bạn có thể chọn một dấu phân cách thuận tiện, dựa trên dữ liệu.
SELECT department_name|| ' Department' ||q'['s Manager Id: ]'|| manager_id
FROM departments;
VÔ GIÁ TRỊ
Nếu một cột không có giá trị xác định, nó được coi là NULL. Giá trị NULL biểu thị không xác định hoặc không có sẵn. Nó không phải là 0 đối với các giá trị số, không phải là khoảng trống cho các giá trị ký tự.
Các cột có giá trị NULL có thể được chọn trong truy vấn SELECT và có thể là một phần của biểu thức số học. Bất kỳ biểu thức số học nào sử dụng giá trị NULL đều cho kết quả là NULL. Vì lý do này, các cột có giá trị NULL phải được xử lý khác nhau bằng cách chỉ định các giá trị thay thế của chúng bằng cách sử dụng các hàm do Oracle cung cấp như NVL hoặc NULLIF.
SQL> SELECT NULL + 1000 NUM
FROM DUAL;
NUM
--------
Từ khóa DISTINCT
Nếu dữ liệu dự kiến có kết quả trùng lặp, hãy sử dụng từ khóa DISTINCT để loại bỏ các bản sao và chỉ hiển thị các kết quả duy nhất trong đầu ra truy vấn. Chỉ các cột đã chọn mới được xác nhận hợp lệ để trùng lặp và các hàng sẽ bị loại bỏ một cách hợp lý khỏi kết quả truy vấn. Cần lưu ý, từ khóa DISTINCT phải xuất hiện ngay sau mệnh đề SELECT.
Truy vấn đơn giản bên dưới minh họa việc sử dụng DISTINCT để hiển thị id bộ phận duy nhất từ bảng NHÂN VIÊN.
SQL> SELECT DISTINCT DEPARTMENT_ID
FROM employees;
DEPARTMENT_ID
---------------
10
20
30
40
Lệnh DESCRIBE
Siêu dữ liệu cấu trúc của một bảng có thể được lấy bằng cách truy vấn cơ sở dữ liệu để biết danh sách các cột bao gồm nó bằng lệnh DESCRIBE. Nó sẽ liệt kê các tên cột đã sử dụng, thuộc tính null và kiểu dữ liệu của chúng.
Syntax:
DESC[RIBE] [SCHEMA].object name
Ví dụ,
DESC EMPLOYEE
sẽ hiển thị cấu trúc bảng EMPLOYEE tức là các cột, kiểu dữ liệu, độ chính xác và thuộc tính nullable.