Các ứng dụng tương tác với cơ sở dữ liệu SQLite đọc và ghi trực tiếp từ các tệp cơ sở dữ liệu được lưu trữ trên đĩa.. Ứng dụng lớn và phức tạp: SQLite không được thiết kế để xử lý các ứn
TỔNG QUAN VỀ SQLite
Giới thiệu về SQLite
SQLite là một thư viện phần mềm cung cấp hệ quản trị cơ sở dữ liệu quan hệ, được viết bằng ngôn ngữ lập trình C Từ "Lite" trong tên gọi của nó thể hiện tính nhẹ nhàng trong việc thiết lập và quản trị cơ sở dữ liệu cũng như các tài nguyên cần thiết SQLite hỗ trợ hoạt động đa nền tảng và có thể chạy trên nhiều hệ điều hành như Android, BSD, iOS, Linux, Mac, Solaris và Windows, giúp dễ dàng di chuyển sang các hệ thống khác.
SQLite có các tính năng đáng chú ý sau: khép kín, không có máy chủ, không cấu hình, giao dịch.
Các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) như MySQL và PostgreSQL thường cần một quy trình máy chủ riêng để hoạt động Các ứng dụng truy cập máy chủ cơ sở dữ liệu thông qua giao thức TCP/IP để gửi và nhận yêu cầu, hình thành kiến trúc máy khách/máy chủ.
Hình 1 Sơ đồ minh họa kiến trúc máy khách/máy chủ RDBMS
SQLite hoạt động khác biệt so với các hệ quản trị cơ sở dữ liệu truyền thống vì nó không cần máy chủ để chạy Cơ sở dữ liệu SQLite được tích hợp trực tiếp vào ứng dụng, cho phép các ứng dụng tương tác với cơ sở dữ liệu bằng cách đọc và ghi trực tiếp từ các tệp dữ liệu lưu trữ trên đĩa.
Hình 2 Sơ đồ minh họa kiến trúc SQLite không máy chủ
SQLite yêu cầu ít hỗ trợ từ hệ điều hành hoặc thư viện bên ngoài, giúp nó hoạt động hiệu quả trong mọi môi trường Điều này đặc biệt hữu ích cho các thiết bị nhúng như iPhone, điện thoại Android, bảng điều khiển trò chơi và trình phát phương tiện cầm tay.
SQLite được phát triển bằng ngôn ngữ lập trình ANSI-C, với mã nguồn có sẵn dưới dạng tệp sqlite3.c và tệp tiêu đề sqlite3.h Để phát triển ứng dụng sử dụng SQLite, bạn chỉ cần thêm các tệp này vào dự án của mình và biên dịch cùng với mã nguồn của bạn.
Với kiến trúc không có máy chủ, SQLite cho phép bạn sử dụng ngay mà không cần "cài đặt" trước Không cần cấu hình quy trình máy chủ, cũng như không cần khởi động hoặc dừng nó Hơn nữa, SQLite không yêu cầu bất kỳ tệp cấu hình nào.
Tất cả giao dịch trong SQLite hoàn toàn tuân thủ nguyên tắc ACID, đảm bảo rằng mọi truy vấn và thay đổi đều mang tính nguyên tử, nhất quán, biệt lập và lâu bền Điều này có nghĩa là mọi thay đổi trong một giao dịch sẽ diễn ra toàn bộ hoặc không xảy ra, ngay cả trong trường hợp có sự cố không mong muốn như ứng dụng gặp lỗi, mất điện hoặc sự cố hệ điều hành.
SQLite có nhiều tính năng đặc biệt, bao gồm khả năng sử dụng kiểu dữ liệu động cho bảng, cho phép lưu trữ bất kỳ giá trị nào trong bất kỳ cột nào mà không bị giới hạn bởi loại dữ liệu Ngoài ra, SQLite hỗ trợ một kết nối cơ sở dữ liệu duy nhất có thể truy cập đồng thời nhiều tệp cơ sở dữ liệu, mang lại khả năng nối các bảng từ các cơ sở dữ liệu khác nhau và sao chép dữ liệu giữa chúng chỉ trong một lệnh Đặc biệt, SQLite còn có khả năng tạo cơ sở dữ liệu trong bộ nhớ, giúp tăng tốc độ truy xuất dữ liệu đáng kể.
Lịch sử hình thành và phát triển
Hình 3 Lịch sử hình thành và phát triển SQLite
Các phiên bản SQLite nổi bật
Hình 4 Các phiên bản SQLite nổi bật
Tính năng
Ưu và nhược điểm so với các hệ quản trị khác
1 Một ưu điểm chính của SQLite là cách nó có thể hoạt động như một giải pháp bổ sung cho RDBMS của doanh nghiệp máy khách / máy chủ.
Một ví dụ cho thấy rằng việc lưu trữ dữ liệu từ máy khách/máy chủ RDBMS cục bộ giúp giảm độ trễ cho các truy vấn, đồng thời đảm bảo ứng dụng cuối vẫn hoạt động ngay cả khi RDBMS của doanh nghiệp ngừng hoạt động.
2 Sqlite là phần mềm tự do với mã nguồn mở và miễn phí Bất kỳ ai có thể sử dụng nó miễn phí và có thể tùy chỉnh mã nguồn theo nhu cầu của họ.
3 Nhỏ gọn và tốc độ cao: với cấu hình đầy đủ chỉ không đầy 300 KB và không yêu cầu cài đặt phức tạp Tốc độ xử lý rất nhanh, cho phép xử lý dữ liệu ở tốc độ cao trong các ứng dụng nhỏ.
4 Không yêu cầu máy chủ: SQLite có thể được sử dụng trên máy tính độc lập mà không cần phải thiết lập máy chủ CSDL riêng biệt Điều này giúp giảm chi phí phát triển và triển khai ứng dụng.
5 Hỗ trợ tốt cho nhiều ngôn ngữ lập trình: SQLite được hỗ trợ trên hầu hết các ngôn ngữ lập trình phổ biến như C/C++, Java, Python, PHP,
6 Tính bảo mật cao: hỗ trợ mã hóa và có tính bảo mật cao Dữ liệu được lưu trữ trong SQLite có thể được mã hóa để đảm bảo an toàn.
7 Tin cậy: các hoạt động transaction (chuyển giao) nội trong cơ sở dữ liệu được thực hiện trọn vẹn, không gây lỗi khi xảy ra sự cố phần cứng
8 Hỗ trợ hầu hết các tính năng của ngôn ngữ truy vấn SQL theo chuẩn SQL 92 (chỉ có một vài đặc điểm không hỗ trợ)
9 SQLite tuân thủ 4 tính chất ACID (là tính nguyên tổ (Atomic), tính nhất quán (Consistent), tính cô lập (Isolated), và tính bền vững (Durable) ).
1 Quản lý người dùng: SQLite thiếu khả năng đa người dùng có thể được tìm thấy trong các hệ thống RDBMS chính thức như MySQL và PostgreSQL Điều này dẫn đến việc thiếu kiểm soát truy cập chi tiết, hệ thống quản lý người dùng thân thiện và khả năng bảo mật ngoài việc mã hóa chính tệp cơ sở dữ liệu.
2 Ứng dụng lớn và phức tạp: SQLite không được thiết kế để xử lý các ứng dụng lớn và phức tạp, vì nó không hỗ trợ các tính năng như chia sẻ nhiều kết nối, khả năng mở rộng và sửa đổi cấu trúc dữ liệu khi chạy.
3 Ứng dụng có tần suất ghi dữ liệu cao: SQLite là một DBMS dựa trên tệp,có thể gây ra các vấn đề về hiệu suất với các bộ dữ liệu lớn do các giới hạn của hệ thống tệp Sqlite không hỗ trợ các tính năng như phân hoá ,phục hồi để khắc phục các sai sót khi ghi dữ liệu.Sử dụng cơ chế coarse-gained locking nên trong cùng một thời điểm có thể hỗ trợ nhiều người đọc dữ liệu, nhưng chỉ có 1 người có thể ghi
SQLite không phải là giải pháp tối ưu cho việc xử lý khối lượng dữ liệu lớn và liên tục phát sinh Do đó, bạn nên cân nhắc tránh sử dụng SQLite trong các tình huống này.
6 huống mà cùng một cơ sở dữ liệu sẽ được truy cập đồng thời từ nhiều máy tính qua hệ thống tệp mạng.
Các lỗ hổng Sqlite
Lỗ hổng Mag Maganan vừa được phát hiện, cho phép rò rỉ dữ liệu người dùng khi lướt web, ảnh hưởng đến nhiều trình duyệt sử dụng nhân Chromium, bao gồm Chrome Theo SlashGear, lỗ hổng này liên quan đến cơ sở dữ liệu SQLite, một lựa chọn phổ biến cho nhiều ứng dụng và nhà phát triển nhờ vào tính nhẹ, đơn giản và dễ sử dụng của nó Sự ưa chuộng này càng làm tăng phạm vi ảnh hưởng của lỗ hổng Mag Maganan.
Chuyên gia bảo mật cảnh báo rằng lỗ hổng này, nếu bị khai thác, có thể cho phép tin tặc truy cập từ xa vào cơ sở dữ liệu SQLite, từ đó thực thi mã độc hại và thậm chí làm sập trình duyệt web của người dùng.
Lỗ hổng bảo mật Magellan đang tạo ra nguy cơ cho hàng triệu ứng dụng, cho phép tin tặc thực thi mã độc từ xa trên các thiết bị bị ảnh hưởng Điều này có thể dẫn đến rò rỉ bộ nhớ chương trình hoặc thậm chí làm sập ứng dụng, gây ra những hệ lụy nghiêm trọng cho người dùng.
Các trình duyệt web dựa trên Chromium như Google Chrome, Opera, Vivaldi và Brave gặp lỗ hổng bảo mật do hỗ trợ SQLite thông qua API cơ sở dữ liệu SQL quá hạn Kẻ tấn công có thể dễ dàng tấn công người dùng bằng cách thuyết phục họ truy cập một trang web độc hại.
SQLite đã phát hành phiên bản 3.26.0 để khắc phục vấn đề Magellan Đồng thời, Google cũng đã phát hành phiên bản Chromium 71.0.3578.80 để giải quyết sự cố và cập nhật bản vá cho trình duyệt Google Chrome và Brave.
3.Các ứng dụng của SQLite trong cuộc sống
● Cơ sở dữ liệu cho websites
SQLite là một lựa chọn phổ biến cho cơ sở dữ liệu của các trang web vừa và nhỏ, nhờ vào việc không yêu cầu cấu hình phức tạp và lưu trữ thông tin trong các tệp đĩa thông thường Điều này làm cho SQLite trở thành sự lựa chọn lý tưởng cho các trang web tĩnh hoặc những trang web có lượng truy cập dưới 100 ngàn lượt/ngày.
Trang web SQLite (https://www.sqlite.org/) tiếp nhận từ 400.000 đến 500.000 yêu cầu HTTP hàng ngày, trong đó khoảng 15-20% liên quan đến cơ sở dữ liệu Hệ thống được triển khai trên một máy ảo duy nhất, chia sẻ tài nguyên với 23 máy chủ khác, nhưng vẫn duy trì mức tải trung bình dưới 0,1 hầu hết thời gian.
Ngoài ra, SQLite còn được Firefox sử dụng với các tiện ích như: SQLite Manager, SQLite Viewer,
Hình 5 Tiện ích SQLite trên Firefox
● Lưu trữ dữ liệu trong hệ điều hành di động
Hệ điều hành trên các thiết bị di động như iOS, Android và BlackBerry đều tích hợp Sqlite để lưu trữ dữ liệu Việc cài sẵn Sqlite giúp hỗ trợ phát triển và sử dụng hệ quản trị cơ sở dữ liệu một cách hiệu quả.
● Mã hóa cho cơ sở dữ liệu nhúng và di động
SQLite sử dụng SQLCipher để nâng cao bảo mật, giúp ngăn chặn rủi ro bị đánh cắp và chia sẻ trái phép thông tin cá nhân cũng như dữ liệu quan trọng trong các ứng dụng lưu trữ.
Với chi phí hoạt động thấp và kích thước nhỏ gọn, giải pháp bảo mật CSDL này đã nhanh chóng trở nên phổ biến đối với các nhà phát triển ứng dụng trên nền tảng iOS, hiện đang là lựa chọn được ưa chuộng nhất.
● Cơ sở dữ liệu cho Internet Of Things
SQLite có dung lượng nhẹ, với thư viện nén chỉ khoảng 300KB, và có thể giảm xuống còn 180KB nếu loại bỏ các tùy chọn không cần thiết Thiết kế của SQLite trong ngăn xếp là 4KB, trong khi trong heap là 100KB.
Sqlite tối ưu hóa hiệu suất xử lý bằng cách lưu trữ kết quả của các phép tính phức tạp một lần trong cơ sở dữ liệu, tránh việc tính toán lại nhiều lần Điều này giúp giảm thiểu sự gián đoạn và tiết kiệm bộ nhớ trong quá trình xử lý.
Sqlite là lựa chọn hàng đầu để lưu trữ dữ liệu trên các thiết bị có bộ nhớ hạn chế như điện thoại di động, PDA và máy nghe nhạc MP3.
● Định dạng tệp ứng dụng
SQLite là một cơ sở dữ liệu hoàn chỉnh, được lưu trữ trong một tệp đa nền tảng duy nhất, rất thích hợp cho việc sử dụng dưới dạng định dạng tệp ứng dụng.
Adobe là một trong những doanh nghiệp nổi tiếng sử dụng SQLite làm định dạng tệp ứng dụng, đặc biệt cho các sản phẩm như Photoshop và Lightroom.
Hình 6 Xử lý dữ liệu khi có (b) hoặc không có SQLCipher (a)
Các toán tử trong SQLite
Toán tử số học
Giả sử biến a giữ giá trị là 10 và biến b giữ giá trị là 20, các toán tử số học trong SQLite sẽ được sử dụng như sau
Mô tả Phép cộng Phép trừ Phép nhân Phép chia Phép chia lấy phần dư
Bảng 1 Các toán tử số học trong SQLite
Toán tử so sánh
Giả sử biến a giữ giá trị là 10 và biến b giữ giá trị là 20, các toán tử so sánh trong SQLite sẽ được sử dụng như sau:
Bảng 2 Các toán tử so sánh trong SQLite
Toán tử logic
Bảng 3 Các toán tử logic trong QSLite
Toán tử bitwise
Toán tử bitwise hoạt động trên bit và thực hiện thao tác từng bit
Bảng 4 Bảng giá trị chân lý cho & và |
Giả sử nếu A = 60; và B = 13, sau đó ở định dạng nhị phân, chúng sẽ như sau:
Bảng 5 Các toán tử bitwise trong SQLite
Các kiểu dữ liệu cơ bản trong SQLite
Class lưu trữ kiểu dữ liệu trong SQLite
Lớp lưu trữ trong SQLite khá đa dạng và không chỉ giới hạn ở một kiểu dữ liệu cụ thể Ví dụ, lớp lưu trữ TEXT bao gồm nhiều loại chuỗi với độ dài khác nhau, cho phép linh hoạt trong việc lưu trữ thông tin.
Class lưu trữ Mô tả Kiểu dữ liệu
NULL Giá trị là giá trị NULL.
INTEGER Giá trị là số nguyên có dấu, lưu trữ trong 1, 2, 3, 4, 6 hoặc 8 byte tùy thuộc vào độ lớn của giá trị
Tương đương với kiểu Long trong Java
INT,INTEGER,TINYINT, SMALLINT,MEDIUMINT, BIGINT.
REAL Giá trị này là một giá trị dấu phẩy động, được lưu dưới dạng số dấu phẩy động 8 byte của
IEEE.Tương đương với Double trong Java
REAL,DOUBLE,DOUBLE PRECISION, FLOAT
TEXT Giá trị là một chuỗi ký tự, có thể lưu trữ các giá trị chứa ký tự
Unicode Bằng cách sử dụng mã hóa cơ sở dữ liệu (UTF-8, UTF-
CHARACTER(20),VARCHAR(255), VARYING,CHARACTER(255),NC HAR(55),NATIVE,TEXT, CLOB,CHARACTER(70),NVARCH AR(100)
BLOB là kiểu dữ liệu nhị phân, dùng để lưu trữ các đối tượng như hình ảnh, âm thanh, video và các tệp lưu trữ khác, được bảo quản nguyên vẹn như đầu vào.
Không chỉ ra kiểu dữ liệu cụ thể
NUMERIC lưu trữ giá trị số dưới dạng một chuỗi ký tự, số, thập phân Giúp
NUMERIC,DECIMAL(10,5), BOOLEAN, DATE, DATETIME
50 lưu trữ các giá trị số với chính xác cao hơn.
Bảng 6 Các Class lưu trữ kiểu dữ liệu trong SQLite
Kiểu dữ liệu Boolean trong SQLite
SQLite không có lớp lưu trữ Boolean( luận lý ) Thay vào, các giá trị Boolean được lưu dưới dạng số nguyên với 0 (false) và 1 (true).
Kiểu dữ liệu date and time trong SQLite
SQLite lưu trữ ngày và thời gian dưới dạng các giá trị TEXT, REAL hoặc INTEGER.
Class lưu trữ Định dạng thời gian
TEXT Một ngày ở định dạng như "YYYY-MM-DD HH: MM: SS.SSS" REAL Số ngày từ Greenwich November 24, 4714 B.C.
INTEGER Số giây kể từ 1970-01-01 00:00:00 UTC
Bảng 7 Các Class lưu trữ kiểu dữ liệu date and time trong SQLite
SQLite hỗ trợ chuyển đổi giữa các định dạng dữ liệu thông qua các hàm có sẵn Ngoài ra, nó cũng cho phép lưu trữ hình ảnh bằng cách chuyển đổi dữ liệu sang định dạng Base64, tuy nhiên, phương pháp này sẽ làm tăng dung lượng dữ liệu.
Tất cả dữ liệu cần được chuyển đổi thành ba loại: TEXT, INTEGER, và REAL để chèn vào bảng Tuy nhiên, SQLite không thực hiện kiểm tra kiểu dữ liệu, cho phép bạn chèn dữ liệu TEXT vào cột định dạng INTEGER.
Cách tạo bảng và xóa bảng
Tạo bảng
Lệnh CREATE TABLE trong SQLite cho phép người dùng tạo một bảng mới trong cơ sở dữ liệu Để thực hiện điều này, cần cung cấp tên bảng cùng với định nghĩa các cột và kiểu dữ liệu tương ứng cho từng cột.
CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns), column2 datatype,
CREATE TABLE là từ khóa cho hệ thống để tạo một bảng mới
Tên hoặc định danh duy nhất cho bảng theo sau lệnh CREATE TABLE này Bạn có thể xác định tùy ý database name với table name.
Xóa bảng
Lệnh DROP TABLE trong SQLite được sử dụng để xóa một bảng và tất cả dữ liệu, chỉ mục, trigger, ràng buộc liên kết với bảng đó.
Cần thận trọng khi sử dụng lệnh xóa bảng, vì khi bảng đã bị xóa, tất cả thông tin trong bảng đó sẽ bị mất vĩnh viễn.
Lệnh Insert, Update, Delete dữ liệu - Mệnh đề Where
Cú pháp lệnh Insert
Hai cú pháp cơ bản của câu lệnh INSERT INTO trong SQLite như sau:
Để chèn dữ liệu vào bảng, bạn cần xác định tên các cột như column1, column2, column3, columnN và các giá trị tương ứng sẽ được chèn vào những cột này, bao gồm value1, value2, value3, valueN.
Để đảm bảo thứ tự của các giá trị tương ứng với thứ tự cột trong bảng, bạn cần xác định rõ Cú pháp INSERT INTO sẽ được trình bày như sau:
Cú pháp lệnh Update + Where
Cú pháp cơ bản của truy vấn UPDATE kết hợp với mệnh đề WHERE như sau:
Để sửa đổi tất cả giá trị của cột ADDRESS và cột SALARY trong bảng COMPANY, bạn có thể sử dụng truy vấn UPDATE mà không cần mệnh đề WHERE.
Cú pháp lệnh Delete + WHERE
Cú pháp cơ bản của truy vấn DELETE kết hợp với mệnh đề WHERE như sau:
Ràng buộc trong SQLite
Ràng buộc là gì?
Ràng buộc là quy tắc áp dụng cho các cột dữ liệu trong bảng, giúp giới hạn kiểu dữ liệu có thể nhập vào, từ đó đảm bảo tính chính xác và đáng tin cậy cho dữ liệu trong cơ sở dữ liệu Ràng buộc có thể được áp dụng ở mức độ cột, chỉ ảnh hưởng đến một cột cụ thể, hoặc ở mức độ bảng, ảnh hưởng đến toàn bộ bảng.
Các ràng buộc phổ biến trong SQLite
NOT NULL: đảm bảo rằng dữ liệu trong cột không nhận giá trị NULL.
DEFAULT: Cung cấp cho cột giá trị mặc định nếu dữ liệu của cột chưa được xác định hoặc nhập vào.
UNIQUE: Đảm bảo dữ liệu trong cùng một cột khác nhau, không trùng lặp giá trị.
Khóa chính (PRIMARY KEY) được sử dụng để xác định khóa chính trong bảng, đảm bảo rằng dữ liệu trong cột khóa chính là duy nhất và không được trùng lặp Ngoài ra, khi áp dụng ràng buộc khóa chính cho cột hoặc các cột, các cột này phải có giá trị NOT NULL.
CHECK: Nhằm bảo đảm tất cả các giá trị trong một cột thoả mãn điều kiện cụ thể.
Mệnh đề LIKE, GLOB, LIMIT và DISTINCT
Mệnh đề LIKE
Mệnh đề LIKE được sử dụng để so sánh giá trị với các giá trị tương tự, và nếu biểu thức tìm kiếm khớp với mẫu, LIKE sẽ trả về true (1) Hai ký tự thường được sử dụng kết hợp với toán tử LIKE là dấu phần trăm (%) và dấu gạch dưới (_).
● Ký hiệu phần trăm (%): biểu diễn 0, 1 hoặc một chuỗi ký tự.
● Dấu gạch dưới (_): biểu diễn một số hoặc một ký tự đơn.
Cú pháp cơ bản của % và _ trong SQLite là:
Ví dụ : SELECT * FROM customers WHERE name LIKE '%J%';
Câu lệnh sẽ trả về các bản ghi trong bảng khách hàng có tên bắt đầu bằng chữ ‘J’.
Mệnh đề GLOB
GLOB là một phiên bản của LIKE, được sử dụng để so khớp giá trị với các giá trị tương tự Nó phân biệt kiểu chữ và tuân theo cú pháp của UNIX, sử dụng các ký tự đặc biệt khác thay vì % và _.
● Dấu sao (*): biểu diễn 0, 1 hoặc nhiều số hoặc ký tự
● Dấu hỏi chấm (?): biểu diễn một số hoặc một ký tự đơn.
Ví dụ : SELECT * FROM company WHERE age LIKE '*2*';
Câu lệnh sẽ trả về các bản ghi trong bảng công ty có tuổi bắt đầu bằng chữ ‘2’
Mệnh đề LIMIT
Mệnh đề LIMIT trong SQLite được sử dụng để giới hạn lượng bản ghi được trả về trong kết quả truy vấn.
Ví dụ : SELECT * FROM customers LIMIT 10;
Câu lệnh sẽ trả về tối đa 10 bản ghi trong bảng ‘khách hàng’
Mệnh đề DISTINCT
DISTINCT được sử dụng kết hợp với lệnh SELECT để loại các bản ghi trùng lặp và chỉ lấy các bản ghi duy nhất.
Ví dụ: SELECT DISTINCT city FROM customers;
Câu lệnh sẽ trả về tất cả giá trị duy nhất của cột thành phố trong bảng ‘khách hàng’
Select, Order By, Group By, Having
SELECT
Cú pháp: SELECT column1, column2, columnN FROM table_name;
Trong đó, column 1, column 2, là các trường hay cột của bảng có giá trị cần lấy Để lấy giá trị của tất cả các trường, ta dùng cú pháp:
ORDER BY
Order by được sử dụng nhằm sắp xếp dữ liệu theo thứ tự (tăng dần hoặc giảm dần) trong một hoặc nhiều cột.
[ORDER BY column1, column2, columnN] [ASC | DESC];
ASC đại diện cho sắp xếp theo thứ tự tăng dần, trong khi DESC đại diện cho sắp xếp theo thứ tự giảm dần Bạn có thể sử dụng nhiều cột trong mệnh đề ORDER BY, nhưng cần đảm bảo rằng các cột đó có mặt trong danh sách cột.
GROUP BY
GROUP BY được sử dụng kết hợp với SELECT nhằm sắp xếp dữ liệu giống hệt nhau thành các nhóm.
Lưu ý: Mệnh đề GROUP BY theo sau mệnh đề WHERE trong câu lệnh SELECT và đứng trước mệnh đề ORDER BY.
GROUP BY column1, column2 columnN
ORDER BY column1, column2 columnN
HAVING
Mệnh đề HAVING cho phép bạn chỉ định các điều kiện lọc nhóm kết quả nào xuất hiện trong kết quả cuối cùng.
Cú pháp và vị trí của Having:
Hình 7 Cú pháp và vị trí của HAVING
Lệnh JOIN
Lệnh Join trong SQLite là gì?
JOIN là lệnh dùng để kết hợp các bảng ghi từ hai hoặc nhiều bảng trong cơ sở dữ liệu dựa trên các giá trị chung Trong SQLite, có ba loại JOIN chính: CROSS JOIN, INNER JOIN và OUTER JOIN.
CROSS JOIN trong SQLite
CROSS JOIN kết nối tất cả các hàng từ bảng đầu tiên với mọi hàng của bảng thứ hai, tạo ra một bảng kết quả có số hàng bằng tích của số hàng trong hai bảng đầu vào Nếu bảng đầu vào có x và y hàng, bảng kết quả sẽ có x*y hàng Do khả năng tạo ra bảng lớn, CROSS JOIN chỉ nên được sử dụng khi thật sự cần thiết.
HAVING đặt sau mệnh đề GROUP BY trong một truy vấn. Đặt trước ORDER BY nếu sử dụng ORDER BY.
INNER JOIN trong SQLite
INNER JOIN kết hợp các giá trị cột của hai bảng dựa trên join-predicate để tạo ra một bảng mới Quá trình này so sánh từng hàng của bảng 1 với từng hàng của bảng 2 nhằm tìm ra các cặp thỏa mãn join-predicate Khi điều kiện được thỏa mãn, giá trị cột của mỗi cặp hàng A và B sẽ được kết hợp thành một hàng duy nhất.
Trong biểu thức USING, bạn có thể khai báo các điều kiện để xác định danh sách một hoặc nhiều cột, giúp rút gọn cụm từ và giảm thiểu sự dư thừa.
NATURAL JOIN tương tự như JOIN…USING, vì nó kiểm tra sự bằng nhau giữa các giá trị của các cột chung có trong cả hai bảng.
OUTER JOIN trong SQLite
SQLite hỗ trợ LEFT OUTER JOIN, với điều kiện được biểu diễn bằng các từ khóa ON, USING hoặc NATURAL, tương tự như INNER JOIN Bảng kết quả ban đầu được tính toán theo cách giống nhau Sau khi thực hiện JOIN chính, OUTER JOIN sẽ bao gồm bất kỳ hàng không liên kết nào từ một hoặc cả hai bảng, hiển thị chúng dưới dạng NULL trong bảng kết quả.
- Dưới đây là cú pháp của LEFT OUTER JOIN:
- Tương tự như INNER JOIN, các điều kiện OUTER JOIN có thể được khai báo trong biểu thức USING.
Một số hàm trong SQLite
COUNT Đếm số hàng có trong bảng dữ liệu
MAX Chọn giá trị lớn nhất cho một cột cụ thể
MIN Chọn giá trị nhỏ nhất cho một cột cụ thể
AVG Chọn giá trị trung bình cho một cột cụ thể
SUM Tính tổng cho một cột giá trị
RANDOM Trả về ngẫu nhiên một số nguyên thuộc khoảng (-
9223372036854775808; 9223372036854775808) ABS Trả về giá trị tuyệt đối của tham số
Hàm UPPER trong SQLite chuyển đổi một chuỗi ký tự thành chữ in hoa, trong khi hàm LOWER chuyển đổi chuỗi đó thành kiểu chữ thường Ngoài ra, hàm LENGTH được sử dụng để trả về độ dài của chuỗi, cung cấp thông tin về số lượng ký tự trong chuỗi.
Trả về phiên bản của thư viện SQLite
Bảng 8 Các hàm thông dụng trong SQLite.