Tìm hiểu tổng quan về Transact SQL T SQL là gì? Transact SQL (còn gọi là T SQL ) là một ngôn ngữ lập trình database hướng thủ tục độc quyền của Microsoft sử dụng trong SQL Server Ngôn ngữ thủ tục được[.]
Tìm hiểu tổng quan Transact-SQL T-SQL gì? - Transact-SQL (cịn gọi T-SQL ) ngơn ngữ lập trình database hướng thủ tục độc quyền Microsoft sử dụng SQL Server Ngôn ngữ thủ tục thiết kế để mở rộng khả SQL có khả tích hợp tốt với SQL Một số tính biến địa phương xử lý chuỗi/dữ liệu thêm vào Các tính làm cho ngôn ngữ Transact-SQL Turing-complete (**) Chúng sử dụng để viết thủ tục lưu trữ: Một đoạn code nằm máy chủ để quản lý quy tắc kinh doanh phức tạp mà khó làm với thao tác tập hợp túy (pure set-based operations) (định nghĩa từ o7planning) Tóm lại: Transact-SQL sử dụng SQL Server Microsoft hay tảng sở liệu Microsoft Synapse, T-SQL dùng giống ngôn ngữ lập trình (cho phép tạo/gán biến, cấu trúc điều khiển if/else, ) dễ dàng tích hợp hay phối hợp sử dụng với SQL ==> linh hoạt powerful @@@ Mục tiêu học T-SQL: Xây dựng đoạn T-SQL script cho phép thực số logic tính tốn "phức tạp" Synapse cách kết hợp/phối hợp liệu từ nhiều bảng data warehouse (mà cần phải sử dụng T-SQL, sử dụng SQL khó giải được) Xây dựng stored procedures (chứa đoạn script viết sẵn) nhằm tái sử dụng đoạn code T-SQL, đồng thời giúp đặt lịch chạy stored procedures theo thời gian định kỳ (hàng ngày, hàng giờ, ) Làm chủ cấu trúc điều khiển, từ khóa, functions, sử dụng thơng dụng & linh hoạt ngôn ngữ T-SQL ###################################### Tài liệu học T-SQL o7planning.org https://o7planning.org/vi/10327/huong-dan-lap-trinh-sql-server-transact-sql Đây tài liệu học T-SQL dễ hiểu nên nguồn học cho người bắt đầu ==> Nếu nhảy vào đọc T-SQL SQL Server Documentation khó hiểu lần (do documentation viết phức tạp, sâu với nhiều concept) Hướng dẫn sử dụng cặp BEGIN END để đóng gói khối lệnh T-SQL Hướng dẫn sử dụng công cụ SQL Server Management Studio để quản lý database tạo script viết code T-SQL ==> viết sẵn ví dụ tổng quan dễ hiểu Trình bày số lệnh T-SQL bản: Cấu trúc IF ELSE IF ELSE (chú ý: bên khối IF ELSE mà đoạn lệnh dài dịng cần bọc lại BEGIN END, giống việc sử dụng { } ngôn ngữ lập trình khacs) Khai báo & khởi tạo biến DECLARE Xem số kiểu liệu sử dụng như: VARCHAR(), FLOAT, INTEGER, Gán giá trị cho biến sử dụng lệnh SET Quy ước cách đặt tiên biến : ln bắt đầu kí hiệu @, chẳng hạn @variable1, @test_123, (sử dụng @ để giúp dễ phân biệt tên biến T-SQL với tên định danh khác SELECT SQL chẳng hạn) Phía sau @ (trong tên biến) quy tắc đặt tên giống ngơn ngữ lập trình khác Sử dụng lệnh CONTINUE BREAK bên vòng WHILE (ý nghĩa continue/break tương tự ngơn ngữ lập trình) Các kiểu liệu đặc biệt T-SQL: (ngoài kiểu liệu bình thường VARCHAR, INTEGER, định nghĩa biến có kiểu liệu dạng Table) Kiểu liệu table (khai báo tường minh): khai báo tường minh biến (bắt đầu ký tự @) có kiểu liệu TABLE, đồng thời định nghĩa trường kiểu liệu biến TABLE Lúc này, sử dụng biến TABLE bình thường với lệnh SQL sau: SELECT, INSERT, DELETE, Thời gian tồn biến TABLE giống biến khác, nghĩa bị thu hồi running time kết thúc @@@ Kiểu liệu table ( không khai báo tường minh): cách viết "nhanh hơn", "lười biếng hơn" cách khai báo biến TABLE tường minh phía Tuy nhiên, có điểm khác biệt: tên biến TABLE khai báo tường minh bắt đầu ký tự @, với biến TABLE không khai báo tường minh bắt đầu ký tự # Chức sử dụng biến TABLE tương tự Chú ý: biến table không tương minh (bắt đầu ký tự #) cịn gọi bảng tạm (temporary table), có thời gian tồn phạm vi session (1 thời gian ngắn) tự động xóa Con trỏ (Cursor): cách dùng để duyệt dòng (row/record) table liệu nhằm thực logic Câu hỏi: Tại phải duyệt dịng mà khơng xử lý đồng loạt đồng thời? Bởi dịng liệu table cần xử lý logic khác nhau, cần sử dụng cấu trúc điều kiện if/else để phân loại xử lý riêng Chú ý, việc duyệt dòng liệu tốn thời gian, cách tối ưu xử lý đồng (nếu có thể, cách join bảng, tách thành thành phần độc lập gom vào cách khéo léo, ) ⇒ Tuy nhiên, sử dụng cursor (con trỏ) trường hợp xử lý đồng loạt thời gian duyệt trỏ nằm ngưỡng chấp nhận cho phép Các bước sử dụng Cursor sau: DECLARE biến cursor: chứa toàn liệu cần lấy (giống table bình thường vậy) Có nhiều tùy chọn DECLARE trỏ để linh hoạt sử dụng OPEN cursor: Mở cấp phép sử dụng trỏ FETCH NEXT: lấy ghi bên bảng trỏ WHILE @@FETCH_STATUS = 0: Sử dụng vòng WHILE để duyệt record mà bảng trỏ trả về, cuối vòng WHILE lấy tiếp ghi từ bảng trỏ (tuần hoàn vậy, tới duyệt hết record bảng trỏ) CLOSE & DEALLOCATE: Đóng thu hồi vùng nhớ cho trỏ Xử lý ngoại lệ (exception) T-SQL: Hướng dẫn cách sử dụng TRY CATCH để bắt ngoại lệ Hướng dẫn cách tạo sử dụng FUNCTION T-SQL: Định nghĩa tham số kiểu trả cho Function Function sử dụng nhằm đóng gói đoạn T-SQL script cho việc tái sử dụng thao tác tính tốn (ví dụ tính SUM số nguyên) Sau Function tạo lưu bên Database (để gọi tới cần sử dụng) Hướng dẫn cách sử dụng Function bên SELECT SQL (khá tiện) Hướng dẫn cách xóa Function lệnh DROP khơng cần tới Function Hướng dẫn cách kiểm tra Function có tồn database hay khơng sử dụng lệnh: IF OBJECT_ID(N'dbo.My_Sum', N'FN') IS NOT NULL DROP FUNCTION My_Sum; GO ⇒ Trong đó, tham số thứ hai 'FN' hàm OBJECT_ID viết tắt cho FUNCTION - nghĩa kiểm tra tồn Function database Tương tự, muốn kiểm tra PROCEDURE có tồn database sử dụng ký hiệu P cho tham số thứ hai Còn kiểm tra table có tồn hay khơng khơng cần tham số thứ hai mặc định check tồn table Thủ tục PROCEDURE (còn gọi STORE PROCEDURE) sử dụng tương tự với Function nhằm đóng gói đoạn T-SQL script nhằm tái sử dụng cách tình khác Sự khác biệt Procedure với Function : Function cho phép nhận nhiều tham số trả giá trị dạng scalar đó, Procedure cho phép nhận nhiều tham số INPUT trả nhiều tham số OUTPUT (chú ý: để lưu trữ giá trị OUTPUT sau Procedure thực xong, ta cần phải khai báo trước biến bên ngồi Procedure, sau truyền chúng vào làm tham số OUTPUT Procedure ⇒ Bên Procedure sau tính tốn xong lưu giá trị vào biến OUTPUT ⇒ Do bên ta đọc biến OUTPUT ⇒ Giống chế trỏ ngôn ngữ C vậy) ⇒ Hiểu chất Function/Procedure để sử dụng linh hoạt Xử lý giao dịch (Transaction): Một ví dụ điển hình transaction chuyển tiền từ tài khoản A sang tài khoản B ⇒ Cần phải trừ tiền từ tài khoản A cộng tiền cho tài khoản B Điều xảy ra, tiền tài khoản A trừ, tài khoản B khơng cộng tiền ⇒ Từ tình này, hình thành tính transaction T-SQL ⇒ Tức tới A bị trừ tiền B cộng tiền giao dịch xem thành cơng Nếu khơng giao dịch thất bại, A khơng bị trừ tiền, B không cộng tiền @@@ ⇒ Đọc thêm transaction cần đến ###################################### Tài liệu Reference T-SQL nguồn SQL Server Documentation https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15 Đây phần reference T-SQL SQL Server Documentation ⇒ Giúp tra cứu nhanh từ khóa, cú pháp built-in functions, T-SQL Date & Time (link): Hướng dẫn cách sử dụng kiểu liệu dạng date, time, T-SQL Numeric (link): Nói kiểu liệu dạng số int, decimal, numeric, float, String & binary (link): tổng hợp kiểu liệu dùng lưu trữ trường Text Data types (link): Viết chủ yếu kiểu liệu T-SQL, cách convert kiểu liệu với nhau, cách sử dụng giá trị (như 25, 'ha noi', ), hay thứ tự ưu tiên việc tự động chuyển kiểu, Functions (link): Tổng hợp gần tất built-in functions hỗ trợ T-SQL phân loại thành nhóm functions ⇒ giúp dễ dàng tra cứu: Aggregate: hàm AVG, MAX, MIN, SUM, hàm tính tốn tập giá trị (thường dùng Group By) Analytic (???): Analytic functions compute an aggregate value based on a group of rows You can use analytic functions to compute moving averages, running totals, percentages, or topN results within a group Conversion: hàm giúp convert kiểu liệu CAST, CONVERT, PARSE, Cursor: hàm dùng cho trỏ CURSOR_STATUS, @@FETCH_STATUS, Data type: hàm liên quan tới kiểu liệu lấy độ dài/số lượng byte chuỗi text, có hàm IDENTITY giúp chèn thêm cột identity vào bảng (cột identity cột đánh số, giúp phân biệt rows bảng), Date & time: hàm tiện ích cho thời gian DATEADD(), YEAR(), JSON: hàm tiện cho chuỗi JSON check có phải định dạng JSON, lấy giá trị từ chuỗi JSON, Mathematical: hàm tiện ích tốn học SIN, COS, PI, LOG, Logical: Hàm xử lý logic điều kiện IFF, CHOOSE Metadata: hàm lấy thơng tin metadata hữu ích check table/function/procedure có tồn database hay không hàm OBJECT_ID, hàm lấy tên database dùng DB_NAME(), Ranking: gồm hàm xếp hạng rank cho row table dựa tiêu chí cột đó, có nhiều cách xếp rank khác như: RANK(), DENSE_RANK(), Thậm chí xếp rank dựa thứ tự xuất record table String: hàm giúp xử lý string CONCAT, LEN, LOWER, System: hàm hệ thống ERROR_MESSAGE, CHECKSUM, System Statistical: hàm thống kê system @@CPU_BUSY, @@IDLE, Và số kiểu/loại functions khác, Language Elements (link): Nói thành phần ngôn ngữ T-SQL General: số lệnh sử dụng chung chung PRINT, USE, EXECUTE, Control-of-flow: cấu trúc điều khiển IF ELSE, BEGIN END, WHILE, Cursor: kiểu trỏ T-SQL Expression: nói cấu trúc biểu thức (expression) T-SQL (tương tự biểu thức ngơn ngữ lập trình khác) Ngồi ra, có nhắc tới thêm biểu thức đặc biệt: CASE WHEN (giúp trả giá trị có điều kiện CASE thỏa mãn), COALESCE (trả giá trị khác NULL đầu tiên), NULLIF (trả NULL giá trị so sánh giống nhau, ) Operators: toán tử so sánh, logic, gán, toán học, toán tử với BIT, INTERSECT, UNION, Transaction: lệnh dùng cho transaction BEGIN TRANSACTION, COMMIT TRANSACTION, (khái niệm transaction giải thích phần trên) Variables: cách khai báo gán variable, sử dụng variable lệnh SELECT để lấy giá trị từ TABLE gán vào biến, Queries (link): hướng dẫn cú pháp viết truy vấn General: số cú pháp chung chung TOP, WITH, SELECT: tất mệnh đề sử dụng với SELECT SELECT INTO, SELECT HAVING, SELECT ORDER BY, FROM, JOIN, APPLY, PIVOT: cú pháp tổng quát cho LEFT JOIN, RIGHT JOIN, PIVOT, WHERE: sử dụng mệnh đề WHERE truy vấn Hints: số tips/hints thực join/query, Predicates: số cách để search text, words, Statements (link): tổng hợp lệnh BULK INSERT (chèn liệu theo khối từ file CSV chẳng hạn, ), DROP PROCEDURE, CREATE DATABASE, ⇒ đại khái lệnh (xem kỹ tài liệu) ###################################### Hướng dẫn đầy đủ cách thao tác với TABLE (SQL Server Documentation) https://docs.microsoft.com/en-us/sql/relational-databases/tables/tables?view=sql-server-ver15 Tổng hợp đầy đủ kiến thức việc thao tác với table tạo/xóa bảng, thêm cột, quản lý ràng buộc (constraint), primary keys, Cụ thể gồm phần sau: Manage: thao tác CREATE, DELETE table, modify column, add column, rename, view table, ⇒ đầy đủ thao tác giúp quản lý table column tables Edge constraints (??? chưa sử dụng bao giờ, đọc để biết cần tới): Edge constraints can be used to enforce data integrity and specific semantics on the edge tables in SQL Server graph database Primary keys: cách tạo primary key cho table Foreign keys: cách tạo foreign key để kết nối với bảng UNIQUE constraint (ràng buộc tính nhất/phân biệt liệu) and CHECK constraint (ràng buộc để check điều kiện đó) Một số khái niệm khác (đọc sau) ###################################### Hướng dẫn đầy đủ Stored Procedure (SQL Server Documentation) https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/stored-proceduresdatabase-engine?view=sql-server-ver15 Hướng dẫn đầy đủ cách tạo sử dụng stored procedure Phần stored procedure nói link o7planning đầu ⇒ sử dụng tài liệu để check chi tiết cách sử dụng procedure ###################################### Hướng dẫn đầy đủ User-defined Function (SQL Server Documentation) https://docs.microsoft.com/en-us/sql/relational-databases/user-defined-functions/user-definedfunctions?view=sql-server-ver15 User-defined functions Tương tự với store procedure, phần hướng dẫn chi tiết cách tạo sử dụng Function T-SQL ⇒ Nguồn tra cứu hữu ích ###################################### Hướng dẫn cách tạo sử dụng VIEW (SQL Server Documentation) https://docs.microsoft.com/en-us/sql/relational-databases/views/views?view=sql-server-ver15 Hướng dẫn cách tạo VIEW T-SQL SQL ⇒ ??? Chưa sử dụng VIEW, nên chưa thể comment nhiều Đại ý View tạo từ Table, nhiên mục đích View để lưu trữ Table, mà để view liệu cần hiển thị giúp bảo mật thơng tin, tùy biến góc nhìn cần xem theo đối tượng (users) (??? suy luận vậy) Dưới mục đích sử dụng VIEW: A view can be used for the following purposes: To focus, simplify, and customize the perception each user has of the database As a security mechanism by allowing users to access data through the view, without granting the users permissions to directly access the underlying base tables To provide a backward compatible interface to emulate a table whose schema has changed Trong viết trình bày có kiểu Views: Indexes Views Partitioned Views System Views ⇒ Cần thử nghiệm để hiểu rõ cách sử dụng VIEW toán thực tế ###################################### Cơ chế INDEX để tối ưu hiệu truy vấn (SQL Server Documentation) https://docs.microsoft.com/en-us/sql/relational-databases/indexes/indexes?view=sql-server-ver15 Indexes ⇒ ??? Chưa hiểu chất kỹ thuật indexes ⇒ Chỉ biết sử dụng kỹ thuật Indexes giúp tăng tốc hiệu truy vấn, trường hợp xử lý liệu lớn dạng bulk cần phải quan tâm tới kỹ thuật indexes Chia thành kiểu Index: Heaps (??? chưa hiểu rõ chất) Clustered and Nonclustered indexes (??? chưa hiểu rõ chất) Columnstore indexes: kỹ thuật sử dụng việc tối ưu hiệu truy vấn data warehouse, đặc biệt bảng Fact Tables (ở tài liệu Synapse documentation có nói họ dùng kỹ thuật columnstore index làm mặc định) ⇒ Nên tìm hiểu sâu kỹ thuật index cần tới gặp toán cần cải thiện hiệu truy vấn @@@ ###################################### Các kỹ thuật đầy đủ để tạo/sử dụng/quản lý Database (SQL Server Documentation) https://docs.microsoft.com/en-us/sql/relational-databases/databases/databases?view=sql-serverver15 Chứa đầy đủ thao tác giúp quản lý Database ⇒ tiện để tra cứu như: Các thao tác Manage database: tạo/xem/xóa/thay đổi tên database Các kỹ thuật để MOVE database Các concepts giúp hiểu sâu cách quản lý database Tài liệu dài ⇒ Chỉ nên đọc phần quan trọng cần thiết @@@ ###################################### Nguồn W3schools (viết nông) đầy đủ hàm SQL giúp tiện tra cứu https://www.w3schools.com/sql/default.asp Cú pháp SQL chung https://www.w3schools.com/sql/sql_ref_sqlserver.asp Cú pháp SQL dành cho SQL Server (chú ý: có khác biệt cú pháp SQL dành cho SQL Server MySQL) ###################################### Nguồn SQL dễ hiểu từ nguồn o7planning cho người bắt đầu học SQL ôn tập lại kiến thức SQL https://o7planning.org/vi/10239/huong-dan-hoc-sql-cho-nguoi-moi-bat-dau-voi-sql-server Tài liệu SQL o7planning ⇒ Viết dễ hiểu, cô động, dễ nhớ @@@ ###################################### Một số công cụ làm việc với Synapse Data warehouse [SQL Server Management Studio - SSMS] https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver15 https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-manage-ssms?view=sql-server-ver15 Cài đặt SQL server management studio (viết tắt SSMS) Trong doc có viết: SSMS hỗ trợ Windows (không phải Linux/Ubuntu) [Azure Data Studio] https://docs.microsoft.com/en-us/sql/azure-data-studio/quickstart-sqldatabase?toc=%2Fazure%2Fazure-sql%2Ftoc.json&view=sql-server-ver15 Cài đặt Azure Data Studio để kết nối với Azure Database https://docs.microsoft.com/en-us/sql/azure-data-studio/download-azure-data-studio?view=sqlserver-ver15 ###################################### Một vài question làm thực tế & Trích lời giải từ số link ⇒ TAKE NOTE https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identityproperty?view=sql-server-ver15 Cách tạo bảng với trường (cột) IDENTITY (tự động tăng id insert ghi mới) Trong link viết rõ Synapse không hỗ trợ Primary Key, Unique, Image not found or type unknown https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehousetable-constraints Foreign Key không supported Synapse Cịn muốn dùng primary key, hay unique cần phải sử dụng NONCLUSTERED and NOT ENFORCED ==> Chắc chế "bất lợi" phải ???? https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehousedevelop-loops Cách thay cursor LOOP Synapse (bởi Synapse khơng hỗ trợ Cursor) https://docs.microsoft.com/en-us/azure/synapse-analytics/sql/overview-features Bài viết nói cursor không hỗ trợ Synapse !!! https://www.w3schools.com/sql/func_sqlserver_dateadd.asp Cộng trừ thêm ngày/tháng cho ngày https://stackoverflow.com/questions/26916741/how-to-join-two-tables-by-multiple-columns-insql/26916803 Cách join bảng sử dụng nhiều cột để join Revision #3 Created Thu, Sep 24, 2020 12:52 PM Updated Fri, Oct 16, 2020 6:29 AM ... Server Management Studio để quản lý database tạo script viết code T-SQL ==> viết sẵn ví dụ tổng quan dễ hiểu Trình bày số lệnh T-SQL bản: Cấu trúc IF ELSE IF ELSE (chú ý: bên khối IF ELSE mà đoạn... pháp tổng quát cho LEFT JOIN, RIGHT JOIN, PIVOT, WHERE: sử dụng mệnh đề WHERE truy vấn Hints: số tips/hints thực join/query, Predicates: số cách để search text, words, Statements (link): tổng. .. https://docs.microsoft.com/en-us/sql/relational-databases/indexes/indexes?view=sql-server-ver15 Indexes ⇒ ??? Chưa hiểu chất kỹ thuật indexes ⇒ Chỉ biết sử dụng kỹ thuật Indexes giúp tăng tốc hiệu truy vấn, trường hợp xử lý liệu lớn dạng bulk cần phải quan tâm tới kỹ thuật indexes