Chuyển đến nội dung chính

Bài đăng

Hiển thị các bài đăng có nhãn SQL

Giới thiệu Microsoft Access và ví dụ SQL cơ bản

Microsoft Access là hệ quản trị cơ sở dữ liệu dạng desktop thuộc bộ Microsoft Office. Nó thường được dùng cho các hệ thống nhỏ như quản lý nhân sự, quản lý kho, hoặc lưu dữ liệu từ máy chấm công. Trong bài viết này chúng ta sẽ: Tạo database đơn giản với 2 bảng Insert dữ liệu mẫu Thực hiện một số truy vấn SQL Tìm hiểu định dạng file Access cũ và mới 1. Tạo bảng Employees Bảng Employees lưu thông tin nhân viên. CREATE TABLE Employees ( EmployeeID AUTOINCREMENT PRIMARY KEY, FirstName TEXT(50), LastName TEXT(50), BirthDate DATETIME, Salary DOUBLE, Notes LONGTEXT, CreatedAt DATETIME ); Column Meaning EmployeeID ID tự tăng FirstName Tên LastName Họ BirthDate Ngày sinh Salary Lương Notes Ghi chú dài 2. Tạo bảng WorkLogs Bảng WorkLogs lưu thông tin giờ làm việc của nhân viên. CREATE TABLE WorkLogs ( LogID AUTOINCREMENT PRIMARY KEY, EmployeeID LONG, WorkDate DATETIME, HoursWorked INTEGER, Descr...

SQL: CharIndex cho ký tự tìm kiếm thứ 2, 3...

Bài toán Cắt chuỗi xuất hiện ở vị trí 1, 3 ngắn cách nhau bằng dấu chấm phẩy Ý tưởng Tìm ký tự xuất hiện lần lượt ở vị trí 1, 2. Sau đó dùng SubString để cắt ra chuỗi tương ứng. Các hàm trong SQL Server Hàm CharIndex Hàm CharIndextrong SQL Server được sử dụng để tìm kiếm một chuỗi con bên trong một chuỗi lớn bắt đầu từ vị trí chỉ định. Hàm trả về kết quả là vị trí chuỗi con được tìm thấy hoặc trả về 0 nếu không tìm thấy. Vị trí chuỗi bắt đầu từ 1, không bắt đầu từ 0 như những trường hợp khác. CHARINDEX(substring, string, start) Parameter Description substring Required. The substring to search for string Required. The string to be searched start Optional. The position where the search will start (if you do not want to start at the beginning of s tring ). The first position in string is 1 Lưu ý Vị trí đầu tiên trong chuỗi là 1. Nếu không tìm thấy chuỗi con trong chuỗi, hàm CHARINDEX sẽ trả về 0. Hàm SubStri...

Sử dụng RowVersion giải quyết cho giải pháp Optimistic Locking

Bài viết này là tổng hợp từ các nguồn từ ViBlo, lập trình VB,...  Và 1 chút kinh nghiệm của mình về việc xử lý khóa dữ liệu Ở bài viết hôm nay mình sẽ nói về cơ chế Locking RDBMS trong database sqlserver nhằm ngăn chặn nhiều transaction từ người dùng khác nhau gây ra data conflicts. Có 2 chiến lược lock là: Optimistic Locking và Pesimistic Locking Trong bài viết này mình sẽ sử dụng RowVersion trong Sqlserver để giải quyết cho chiến lược Optimistic Locking . Trước tiên, mình sẽ tìm hiểu về Transaction Basic, Lock type, Kỹ thuật lock. Transaction Basic Một transaction là 1 tập các câu lệnh thực thi tới CSDL, các câu lệnh được thực thi 1 cách tuần tự, nếu có bất kỳ lệnh nào bị lỗi, transaction sẽ dừng lại và roll back DB tất cả các câu lệnh đã thực thi, trả lại DB như lúc start transaction. Transaction có 4 tính chất (ACID): Atomicity (Tính nguyên tử): 1 transaction phải như 1 đơn vị công việc, hoặc tất cả các thay đổi dữ liệu được thực thi, hoặc không thay đổi nào được thực hiện. ...

Reset cột giá trị Id trong SQL Server

Giả sử bạn có Table A với 2 cột (Id, Value). Để reset giá trị về 1, bạn làm như sau: Tạo Table A1 với 2 cột (Id, Value) Copy data từ A sang A_Backup Xóa data table A Reset Identity table A Copy data từ A_Backup sang A Trước khi thực hiện, bạn cần đặt Transaction và count số lượng dòng để đảm bảo kết quả chính xác CREATE TABLE [dbo].[A_Backup]( [Id] [int] IDENTITY(1,1) NOT NULL, [Vavlue] [decimal](18, 2) NOT NULL ) BEGIN TRANSACTION; BEGIN TRY INSERT INTO [dbo].[A_Backup] ([Vavlue] [decimal](18, 2) NOT NULL) SELECT [Vavlue] FROM [dbo].[A] Truncate Table A DBCC CHECKIDENT ('A', RESEED, 1) INSERT INTO [dbo].[A] ([Vavlue]) SELECT [Vavlue] FROM [dbo].[A_Backup] END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_SEVERITY() AS ErrorSeverity ,ERROR_STATE() AS ErrorState ,ERROR_PROCEDURE() AS ErrorProcedure ,ERROR_LINE() AS ErrorLine ,ERROR_MESSAGE() AS ErrorMessage; ...

Data Prep with SQL

 

Clustered và NonClustered trong SQL Server

Trong bài viết này, mình cố gắng tổng hợp các kiến thức về Clustered và NonClustered thật đơn giản nhất có thể. Dưới đây là cú pháp tạo Clustered và NonClustered Cú pháp:> -- Create a nonclustered index on a table or view CREATE INDEX i1 ON t1 (col1); -- Create a nonclustered index called IX_ProductVendor_VendorID -- on the Purchasing.ProductVendor table using the BusinessEntityID column. CREATE NONCLUSTERED INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor (BusinessEntityID) -- Create a clustered index on a table and use a 3-part name for the table CREATE CLUSTERED INDEX i1 ON d1.s1.t1 (col1); -- Syntax for SQL Server and Azure SQL Database -- Create a nonclustered index with a unique constraint -- on 3 columns and specify the sort order for each column CREATE UNIQUE INDEX i1 ON t1 (col1 DESC, col2 ASC, col3 DESC); Trong SQL Server có 2 loại index chính: Clustered Index Chỉ có 1 Clustered Index trong 1 table. Không đòi hỏi unique. Đây là dạng INDEX mà dữ l...

Tạo project ASP.NET Core 3 với SQLite

Trong bài viết này, mình sẽ hướng dẫn các bạn cách cài đặt SQLite và tạo project ASP.NET Core 3, sử dụng SQLite thay vì SQL Server. Cài đặt SQLite Download SQLite: https://www.sqlite.org/download.html SQLite cung cấp các công cụ khác nhau để làm việc trên các nền tảng, ví dụ: Windows, Linux và Mac. Bạn cần chọn một phiên bản phù hợp để tải về.

Hỗ trợ search tiếng Việt trong SQL Server

Hôm nay mình hướng dẫn mọi người thủ thuật tìm kiếm với Sql Server không phân biệt chữ hoa, chữ thường, có dấu, không dấu rất đơn giản. Mặc định khi tạo 1 column có kiểu dữ liệu nvarchar, thì Collation sẽ có giá trị  SQL_Latin1_General_CP1_CI_AS . Giải thích: SQL – Tất cả các collation đều có tiền tố là SQL. Latin1_General – đại diện cho quy tắc sắp xếp, CI có nghĩa là không phân biệt chữ hoa chữ thường và AS có nghĩa là trọng âm. Để biết được SQL Server của bạn đang hỗ trợ collation nào, bạn thực hiện câu lệnh: SELECT SERVERPROPERTY('collation') Liệt kê collation của các column trong 1 table sp_help <table-name> Đối với tiếng Anh, thì bạn sẽ không gặp vấn đề gì. Nhưng với tiếng Việt, thì bạn sẽ gặp vấn đề về dấu. VD: Bạn tìm kiếm chữ "Châu". Nếu bạn gõ chữ "Châu" hay "Chau" thì sẽ ra 2 kết quả tìm kiếm khác nhau. Khắc phục Bạn execute câu lệnh sql sau: ALTER TABLE <table-name> ALTER COLUMN <column-name> nvar...

Sử dụng ROW_NUMBER, RANK, và DENSE_RANK

Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng các hàm ROW_NUMBER, RANK, và DENSE_RANK(). Trong bài viết này sử dụng AdventureWorks2016, bạn có thể download tại: https://www.microsoft.com/en-us/download/details.aspx?id=49502 Phân biệt ROW_NUMBER, RANK, và DENSE_RANK Đầu tiên, bạn nhìn ví dụ sau: SELECT CustomerID, SalesOrderID, CAST(OrderDate AS DATE) AS OrderDate, ROW_NUMBER() OVER(ORDER BY OrderDate) AS [ROW_NUMBER], RANK() OVER(ORDER BY OrderDate) AS [RANK], DENSE_RANK() OVER(ORDER BY OrderDate) AS [DENSE_RANK] FROM Sales.SalesOrderHeader WHERE CustomerID = 11300; Kết quả: Cả 3 hàm đều Order by OrderDate Hàm ROW_NUMBER dùng để xếp hạng kết quả một cách tuần tự bắt đầu từ 1 và không quan tâm đến các giá trị giống nhau. Cú pháp: ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause ) Tại dòng thứ 7 và dòng 8, giá trị OrderDate đều giống nhau. RANK và DENSE_RANK đều trả về giá trị là 7. Tại dòng thứ 9, hàm RANK trực tiếp b...

[SQL] Sử dụng Split String và Cross Join để tách chuỗi thành nhiều dòng

Trong bài viết này, tôi sẽ hướng dẫn các bạn cách tách chuỗi được phân cách bằng dấu phẩy thành nhiều dòng. Giả sử bạn có table như sau: Create Table #CustomerTemp(CustomerId int, Districts varchar(max)) Insert #CustomerTemp(CustomerId, Districts) Values(1, 'District 1, District 2, District 3'); Select * from #CustomerTemp Drop Table #CustomerTemp Và bạn muốn tách từng District ra thành nhiều dòng:

Transaction trong SQL

Transaction là gì? Transaction (giao dịch) được dùng để đảm bảo tính toàn vẹn dữ liệu khi xảy ra cập nhật. Khi một transaction bao gồm nhiều lệnh cập nhật, nó đảm bảo tất cả các cập nhật đều được thực hiện thành công, hoặc trong trường hợp một lệnh gặp sự cố toàn bộ transaction bị hủy bỏ. Khi đó dữ liệu trở về trạng thái như trước khi xảy ra transaction. Nói cách khác transaction ngăn chặn tình huống dữ liệu được cập nhật nửa chừng, trong đó một phần được cập nhật còn một phần bị bỏ qua. Cú pháp: BEGIN TRAN -- command 1 -- command 2 -- ... COMMIT

SQL: Tùy biến cách sắp xếp trong câu lệnh ORDER BY

ORDER BY dùng để sắp xếp kết quả trả về bởi câu lệnh SELECT. Thỉnh thoáng, bạn cần tùy biến cách sắp xếp, không phải theo cách thông thường như ABC, 123… VD: Chúng ta có bảng Currency dùng để liệt kê tiền tệ của các nước

C# LINQ Grouping Data

Grouping trong LINQ cho phép bạn trả về nhiều nhóm dữ liệu từ một tập hợp dựa trên giá trị key được cung cấp Trong bài viết này, mình sẽ hướng dẫn cách: Group dữ liệu theo 1 khóa Group dữ liệu theo nhiều khóa Cách tính kết quả sau khi group dữ liệu

Trang web hay học về CSDL

Bạn biết đến SQL với 4 câu lệnh quen thuộc: Select, Insert, Update, Delete. Nhưng trong thực tế bạn còn phải học thêm nhiều thứ để có thể truy vấn được. Ví dụ như trường hợp group by, làm sao hiển thị được cột mà cột đó không bị group by. ( giải pháp ) Địa chỉ trang web: http://www.sqlusa.com/