Giói thiệu sơ lược về truy vấn SQL

Giói thiệu sơ lược về truy vấn SQL

Như đã nói ở bài trước: tạo và quản lý cơ sở dữ liệu bằng phpMyadmin thay vì thực hiện chúng trên giao diên thì bây giờ ta sẽ tìm hiểu một cách nữa là làm trên command line vì có một số chuyện không thể giải quyết ở giao diện.

1. Giới thiệu:

Là ngôn ngữ để “thế giới bên ngoài” (PHP, PHPMyAdmin, MySql Command line, Navicat) tương tác với Mysql server nhằm :

  • Tạo/xoá database, import/export dữ liệu
  • Tạo/xoá/chỉnh table
  • Thêm/chỉnh/xoá/chỉnh dữ liệu trong các table
  •  …

Các câu lệnh quản lý csdl từ command line tổng quát:   

  • show databases;            //Hiện list các database trong mysql server
  • use TênDatabase;           // chọn database hiện hành
  • show tables;               // Hiện list các table trong database hiện hành
  • create database bcdonline; //Tạo database tên bcdonline

Ngôn ngữ SQL:

Tạo bảng dữ liệu:

<!--
CREATE TABLE <TenTable> (
<TenField1> <kiểu dữ liệu> (<FieldSize>) | NULL | NOT NULL | AUTO_INCREMENT,
<TenField2> <kiểu dữ liệu> (<FieldSize>) | NULL | NOT NULL ,
...
PRIMARY KEY (<TenField>) ,
UNIQUE (<TenField>),
FOREIGN KEY (<TenField>)  REFERENCE <TenTable>
);
-->

Kiểu dữ liệu:

  • Kiểu số nguyên: INT, INTEGER
  • Số thực: FLOAT, DOUBLE
  • Chuỗi: CHAR, VARCHAR
  • Logic: BOOLEAN
  •  Ngày tháng: DATE, TIME, DATETIME

Sau Primary Key, UNIQUE có dấu phẩy.

UNIQUE là field không là khóa chính nhưng có các giá trị không trùng nhau.

Foreign key nhiều record thì có dấu phẩy phía sau.

AUTO_INCREMENT: tự động tăng

Ví dụ: Tạo table trong database QuanLyTinTuc

<!--      CREATE TABLE LOAISP      (           idLoai INT NOT NULL AUTO_INCREMENT,           Ten VARCHAR(255) NOT NULL,           ThuTu INT NULL,           PRIMARY KEY (idLoai)       ); -->

2. Xem cấu trúc 1 table

<!--
DESCRIBE <TenBang>  hoặc
DESC <TenBang>
-->

Ví dụ:

DESC LoaiSP;

3.Thêm dữ liệu vào bảng:

Cách 1:

<!--
INSERT INTO <TenBang>  VALUES (giaTri1, giatri2,...)
-->

Các giá trị sẽ điền các giá trị vào các field theo đúng thứ tự xuất hiện trong bảng. Fied làm khoá chính để chuỗi trống.

Ví dụ:

INSERT INTO LoaiSP  VALUES ('', 'NoKia',2);

Cách 2:

<!--
INSERT INTO <TenBang>  (TenField1, TenField2,…) VALUES (giaTri1, giatri2,…)
-->

Thứ tự các field có thể không nhất thiết giống như thứ tự các field trong bảng.
Có thể không cần ghi mọi field.
Thứ tự dữ liệu phải tương ứng với các field liệt kê phía trước.

Ví dụ:

Thêm 1 Loại SP mới:

INSERT INTO LoaiSP (thutu, ten) VALUES ( 3, "Sony");

4. Xem hết dữ liệu trong 1 table:

<!--
SELECT * <TenBang> ;
-->

Ví dụ:

SELECT * FROM LoaiSP;

5. Chỉnh sửa dữ liệu:

<!--
UPDATE <tentable> SET
Tenfield1=giatri1, TenField2=giatri2
WHERE <ĐiểuKiện>
-->

Phần where có thể bỏ nhưng nguy hiểm vì nó có thể chỉnh tất cả dữ liệu trong bảng của bạn theo 1 dòng duy nhất khi không gàng buộc bởi where.
Ví dụ:

UPDATE LoaiSP SET ten='Motorola' where idLoai=1

6. Xóa dữ liệu:

<!--
DELETE FROM <TenBang>  WHERE <ĐiềuKiện>
-->

Phần where có thể bỏ nhưng nguy hiểm nó có thể xóa cả dữ liệu trong bảng của bạn.
Ví dụ:

DELETE FROM LoaiSP where idLoai=1

Tiếp đến chúng ta sẽ thực hành nha các bạn: Mời bạn downlads webtintuc data này về import vào MySQL để thực hành.

Truy vấn dữ liệu:

Cú pháp chung:

<!--
SELECT * | < TenField1,TenField2,... >
From < TenBang1, TenBang2, ... >
WHERE < Điều kiện kết bảng> | <Điều kiện lọc >
ORDER BY < TênField1 ASC|DESC, TenField2 ASC/DESC , ... >  // Điều kiện sắp xếp
GROUP BY < TenField1, TenField2, ... >                     // Điều kiện phân nhóm
HAVING < Điều kiện lọc theo nhóm >
-->

Phần Select, From là bắt buộc. Phần where order by, group by, having là không bắt buộc

WHERE điều kiện lọc dữ liệu và điều kiện kết bảng

ORDER BY : sắp xếp dữ liệu theo field1, field 2.

Order by phải nằm sau where

Câu lênh select đơn giản:

Chỉ có phần select from. Có thể có thêm where

Ví dụ:

<!--   

 SELECT idLT, Ten, AnHien FROM Loaitin ; // Lấy idLT, Ten, AnHien trong bảng loại tin    

 SELECT idLT, Ten  FROM LoaiTin WHERE AnHien=1; // Lấy idLT, Ten trong bảng loại tin có AnHien = 1     

 SELECT idTin, Ngay, TieuDe  FROM Tin WHERE month(Ngay)=3; //Lấy idTin, Ngay, TieuDe trong bảng tin có tháng upload = 3     

 SELECT idTin, Ngay, TieuDe  FROM Tin WHERE Ngay=date('2008-4-3'); // Lấy idTin, Ngay, TieuDe trong bảng tin có ngày update là 2008-4-3     

 SELECT idTin, Ngay, TieuDe  FROM Tin WHERE Ngay=curdate(); // Lấy idTin, Ngay, TieuDe trong bảng tin có ngày update là hôm nay

-->

Lấy các tin trong ngày hôm nay (Bạn phải chỉnh đồng hồ của máy lại thành 1 ngày có tin trong database thì mới thấy tin)
    
SELECT idTin, Ngay, TieuDe  FROM Tin WHERE month(Ngay)=month(curdate());

Lấy các tin trong tháng hiện tại (Bạn phải chỉnh đồng hồ của máy lại thành tháng có tin trong database thì mới thấy tin)

Câu lệnh sắp xếp dữ liệu:

Có phần select, from, order.

Ví dụ:

<!--     

SELECT idLT, Ten, ThuTu FROM Loaitin ORDER BY Ten ASC; // Sắp xếp theo tên     

SELECT * FROM TheLoai WHERE AnHien=1 ORDER BY ThuTu  ASC; // Lấy tất cả từ bảng TheLoai, hiện và sắp xếp theo cột thứ tự tăng dần     

SELECT idTin, Ngay,TieuDe FROM Tin  ORDER BY Ngay DESC; // Lấy mọi tin , tin mới hiện trước

SELECT idTin, Ngay, TieuDe, idLT FROM Tin  WHERE idLT=1 ORDER BY Ngay DESC; // Lấy mọi tin trong loại thể thao , tin mới hiện trước

SELECT idTin, Ngay,TieuDe FROM Tin  ORDER BY Ngay DESC limit 0,10; // Lấy 10 tin mới nhất

SELECT idTin, SoLanXem,TieuDe FROM Tin  ORDER BY SoLanXem DESC limit 0,10; // Lấy 10 tin xem nhiều nhất

SELECT idTin, SoLanXem,TieuDe FROM Tin  WHERE idLT=9  ORDER BY SoLanXem DESC limit 0,10; // Lấy 10 tin xem nhiều nhất trong loại tin xă hội

-->

Ghi chú:
    
Update tin set SoLanXem=SoLanXem+1 where idTin=2; // Cập nhật số lần xem tin số 2

Câu lệnh phân nhóm:

Có dùng thêm phần group by, thường kết hợp với các hàm tính toán cho từng nhóm: SUM, MAX, MIN, AVG, COUNT

Ví dụ:

<!-- 
SELECT  idUser, count(idTin) as SoTin FROM tin GROUP BY idUser; SELECT  idSK, count(idTin) as SoTin FROM tin GROUP BY idSK; 
-->

Nếu có lọc dữ liệu dựa theo các hàm tính toán thì điều kiện lọc sẽ đặt trong HAVING

Ví dụ:

<!--  

  SELECT  idUser, count(idTin) as SoTin FROM tin GROUP BY idUser HAVING count(idTin) >=10

-->

Câu lệnh select tìm kiếm:

% : đại diện cho nhiều ký tự
_ : đại diện cho đúng 1 ký tự

Ví dụ:

<!--
SELECT idTin, Ngay, TieuDe  FROM Tin where TieuDe like 'C%'
// Tìm bắt đầu bằng chữ C     
SELECT Username, HoTen, Email FROM Users where Username like 't_'
// Tìm bắt đầu bằng t và một ký tự nào đó bất kỳ
-->

Câu lệnh select có kết bảng

Ví dụ :

<!--
SELECT  idTin, Tin.idSK, Mota , TieuDe
FROM Tin, SuKien
WHERE Tin.idSK= SuKien.idSK
ORDER BY idSK ASC
//Lấy những tin có trong bảng tin và nhưng tin đó có trong bảng sự kiện đồng thời sắp xếp tăng dần theo idSK
SELECT  idTin,  Users.Username, Loaitin.Ten, TieuDe
FROM Tin, Users, LoaiTin
WHERE Tin.idUser= Users.idUser AND  Tin.idLT=LoaiTin.idLT
Order By Ngay Desc Limit 0,10
// Lấy 10 tin trong bảng tin theo loại tin và sắp xếp theo ngày giảm dần (tin mới)
-->

Câu lệnh select lồng nhau:

Ví dụ:

<!--     

SELECT idtin, Ngay, TieuDe FROM tin WHERE  Ngay >= All (SELECT Ngay FROM Tin)
// Lấy tin mới nhất
SELECT idLT, Ten FROM loaitin WHERE  idLT in (SELECT idLT FROM Tin group by idLT)
// Lấy danh sách các loại tin có tin
-->

Select ngẫu nhiên:

<!-- 
SELECT idTin, TieuDe from tin order by rand() limit 0,3; // Lấy 3 tin ngẫu nhiên 
SELECT idBC, Mota from BinhChon order by rand() limit 0,1; // Lấy 1 câu hỏi ngẫu nhiên 
-->

Kết luận: Trong bài này bạn sẽ hệ thống lại các kiến thức về truy vấn bằng câu lệnh, rõ ràng áp dụng rất nhiều trong lúc chúng ta lập trình web. Chúc các bạn thành công!

Tags: 
Bạn thấy bài viết này như thế nào?: 
Average: 10 (1 vote)
Ảnh của Tommy Tran

Tommy owner Express Magazine

Drupal Developer having 9+ year experience, implementation and having strong knowledge of technical specifications, workflow development. Ability to perform effectively and efficiently in team and individually. Always enthusiastic and interseted to study new technologies

  • Skype ID: tthanhthuy

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Những tips cần thiết đọc đề làm việc với Drupal 8

Những tips cần thiết đọc đề làm việc với Drupal 8

One useful thing during my D8 learning that I came across is that you can find out whether a certain function has 'gone away' or has been replaced by something else in D8.

Người dùng Facebook có thể gắn thẻ tag mô tả về bản thân

Người dùng Facebook có thể gắn thẻ tag mô tả về bản thân

Facebook đang thử nghiệm tính năng mới là Profile tag. "Profile tag là một công cụ sáng tạo

iPad 2 không cần giảm giá bán

iPad 2 không cần giảm giá bán

Sau khi Kindle Fire và Nook Tablet xuất hiện với giá bán lẻ tương ứng là 199 USD và 249 USD, nhiều người cho rằng đã đến lúc Apple phải giảm giá iPad 2 để chiến đấu với các đối thủ. Nhưng không hẳn vậy!

Công ty diệt chuột T&C

 

Diet con trung