Cách truy vấn SQL Server để tìm kiếm nhiều thông tin


Em có cái giao diện tìm kiếm của em như hình…khi người dùng chọn các tiêu chí tìm kiếm thì sẽ tìm kiếm theo các tiêu chí mà người dùng đã chọn và hiển thị thông tin lên bảng…Mấy anh chị cho em hỏi là mình phải viết câu truy vấn như thế nào để bao quát được tất cả các lựa chọn của người dùng ạ…Em dùng SQL Server ạ (Ví dụ,người dùng có thể chọn tìm kiếm giới tính là Nam,mã ngoại ngữ là AnhVan…hoặc mã nghề nghiệp là BacSy và Mã ngoại ngữ là AnhVan…v…v.) Anh chị nào biết chỉ em với…em cảm ơn nhiều ạ

1 Like

em viết câu sql bằng cách cộng chuỗi.
Em kiểm tra điều kiện tìm kiếm có nhập thì em cộng vào.

Mình cộng tất cả các chuổi mà người dùng nhập lại…rồi mình truy vấn như thế nào anh???

Giả sử bạn cần tìm kiếm thông tin nhân viên theo các tiêu chí : Họ tên, tuổi, số điện thoại ( chỉ giả sử 3 cái thôi :smile: )
Khi đó câu SQL của bạn sẽ có dạng này

 select * from staff where ( fullname = @fullname or @fullname = '' ) and  ( age= @age or @age= '' ) and  ( phone= @phone or @phone= '' )

Như vậy thì khi người dùng ko nhập gì nó sẽ search ra hết, còn nếu nhập vào thì nó sẽ fill dữ liệu

1 Like

không nên viết câu sql kiểu này. Thêm điều kiện or vào làm mất thời gian so sánh trong lúc chạy truy vấn.

Em coi link này
http://www.tutorialspoint.com/sqlite/sqlite_java.htm
Phần select.

Em làm như Anh nói…Mà nó không ra gì luôn…Em nghĩ câu truy vấn có vấn đề vì một thuộc tính khi mình không chọn để tìm kiếm thì giá trị của nó trên CSDL không phải là NULL
Câu truy vấn của em
sqlQuery = “Select MaDangVien,HoTenDangVien,NgaySinh,GioiTinh,MaDanToc,MaHocVi,MaNgheNghiep,ChuyenMonNghiepVu,MaNgoaiNgu from DangVien where (MaDangVien = '”+maDangVien1+"’ or MaDangVien = ‘’) and (HoTenDangVien = ‘"+hoVaTen1+"’ or HoTenDangVien = ‘’) and (NgaySinh = ‘"+ngaySinh1+"’ or NgaySinh = ‘’) and (GioiTinh = ‘"+gioiTinh1+"’ or GioiTinh = ‘’) and (MaDanToc = ‘"+maDanToc1+"’ or MaDanToc = ‘’) and (MaHocVi = ‘"+maHocVi1+"’ or MaHocVi = ‘’) and (MaNgheNghiep = ‘"+maNgheNghiep1+"’ or MaNgheNghiep = ‘’) and (ChuyenMonNghiepVu = ‘"+chuyenMonNghiepVu1+"’ or ChuyenMonNghiepVu = ‘’) and (MaNgoaiNgu = ‘"+maNgoaiNgu1+"’ or MaNgoaiNgu = ‘’)";

Bạn nên check input người dùng có nhập giá trị của 1 thuộc tính vào hay không trước khi đưa thuộc tính đó vào câu truy vấn.
Ví dụ mình thường xài : (Mã giả)

string SelectQuery= "Select *  ";
string FromQuery= "from DangVien where " ;
if(txtMaDangVien.Text !="")
      FromQuery=FromQuery + "MaDaVien like " + txtMaDangVien.Text;

if(txtHoVaTen.Text !="")
       FromQuery= FromQuery + "And" + "HoVaTen like " + txtHoVaTen.Text;


string Query=SelectQuery+FromQuery;
1 Like

@MangoaiNgu = ‘’ chứ ko phải là Mangoaingu = ‘’

Nếu condition thứ nhất đúng thì nó sẽ bỏ qua condition thứ 2.
Nếu check bằng java thì thực ra cũng mất thời gian so sánh.
Ở link bạn đưa mình không thấy thông tin gì

1 Like

Mình xin lỗi. Mình đưa thông tin sai.

Để tìm kiếm hiệu quả em nên viết vào store procedure. Vừa bảo mật, vừa thao tác nhanh. (em có thể đọc thêm cách làm store procedure trên mạng nhé).

Lưu ý :

  • Câu lệnh select không nên là select * mà select column cụ thể.
  • Đặt điều kiện ISNULL(tên cột, giá trị trả về) để trả kết quả khác null.
  • Khai báo biến để đầu vào và chuỗi sao cho hợp lý (kiểu biến đầu vào dựa vào kiểu value type của bảng tìm kiếm).
  • Giả sử có tìm kiếm theo biến đầu vào có thể sử dụng câu lệnh RTRIM or LTRIM(@bien) để kiểm tra sau đó mới begin set và end. Lưu ý, like sẽ chậm hơn so với = em nhé.
  • Inner Join hay Left Join để ý các index đã đặt trước đó, hạn chế join bất cân bằng.

Vài lời em tham khảo thêm nhé.

Rất bổ ích…Em cảm ơn các anh rất nhiều ạ…

Rất Hay!! Cám ơn mọi người đã chia sẻ.

mình từng viết thế naỳ tuy ngắn ngọn nhưng chạy rất chậm…

Tìm hiểu Linq to SQL nhé.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?