Cách quản lý database SQL
Database SQL được cài đặt với tất cả các lệnh bạn cần để thêm, sửa đổi, xóa và truy vấn dữ liệu của bạn . Hướng dẫn kiểu ghi chú này cung cấp tham khảo nhanh về một số lệnh SQL được sử dụng phổ biến nhất.Trang tính gian lận SQL
Cách sử dụng Hướng dẫn này:
- Hướng dẫn này ở định dạng ghi chú với các đoạn dòng lệnh độc lập
- Chuyển đến bất kỳ phần nào có liên quan đến nhiệm vụ bạn đang cố gắng hoàn thành
- Khi bạn thấy
highlighted text
trong các lệnh của hướng dẫn này, hãy nhớ rằng văn bản này phải tham chiếu đến các cột, bảng và dữ liệu trong database của bạn . - Trong suốt hướng dẫn này, các giá trị dữ liệu ví dụ được đưa ra đều được gói trong dấu nháy đơn (
'
). Trong SQL, cần phải bọc bất kỳ giá trị dữ liệu nào chứa chuỗi trong dấu nháy đơn. Điều này không bắt buộc đối với dữ liệu số, nhưng nó cũng sẽ không gây ra bất kỳ vấn đề nào nếu bạn bao gồm dấu nháy đơn.
Xin lưu ý , mặc dù SQL được công nhận là một tiêu chuẩn, hầu hết các chương trình database SQL đều có phần mở rộng độc quyền của riêng chúng. Hướng dẫn này sử dụng MySQL làm hệ quản trị database quan hệ mẫu (RDBMS), nhưng các lệnh được đưa ra sẽ hoạt động với các chương trình database quan hệ khác, bao gồm PostgreSQL, MariaDB và SQLite. Khi có sự khác biệt đáng kể giữa các RDBMS, ta đã đưa vào các lệnh thay thế.
Mở Database Prompt (sử dụng Socket / Trust Authentication)
Theo mặc định trên Ubuntu 18.04, user MySQL gốc có thể xác thực mà không cần password bằng lệnh sau:
- sudo mysql
Để mở dấu nhắc PostgreSQL, hãy sử dụng lệnh sau. Ví dụ này sẽ đăng nhập bạn với quyền user postgres , là role siêu user được bao gồm, nhưng bạn có thể thay thế nó bằng bất kỳ role nào đã được tạo:
- sudo -u postgres psql
Mở Dấu nhắc database (sử dụng Xác thực password )
Nếu user MySQL gốc của bạn được đặt để xác thực bằng password , bạn có thể làm như vậy bằng lệnh sau:
- mysql -u root -p
Nếu bạn đã cài đặt account user không phải root cho database của bạn , bạn cũng có thể sử dụng phương pháp này để đăng nhập với quyền user đó:
- mysql -u user -p
Lệnh trên sẽ nhắc bạn nhập password sau khi bạn chạy nó. Nếu bạn muốn cung cấp password của bạn như một phần của lệnh, hãy làm theo ngay tùy chọn -p
với password của bạn, không có khoảng cách giữa chúng:
- mysql -u root -ppassword
Tạo database
Lệnh sau tạo database với cài đặt mặc định.
- CREATE DATABASE database_name;
Nếu bạn muốn database của bạn sử dụng bộ ký tự và đối chiếu khác với giá trị mặc định, bạn có thể chỉ định những bộ ký tự đó bằng cú pháp sau:
- CREATE DATABASE database_name CHARACTER SET character_set COLLATE collation;
Database danh sách
Để xem database nào tồn tại trong cài đặt MySQL hoặc MariaDB của bạn, hãy chạy lệnh sau:
- SHOW DATABASES;
Trong PostgreSQL, bạn có thể xem những database nào đã được tạo bằng lệnh sau:
- \list
Xóa database
Để xóa một database , bao gồm bất kỳ bảng và dữ liệu nào được giữ trong nó, hãy chạy một lệnh theo cấu trúc sau:
- DROP DATABASE IF EXISTS database;
Tạo user
Để tạo profile user cho database của bạn mà không chỉ định bất kỳ quyền nào cho nó, hãy chạy lệnh sau:
- CREATE USER username IDENTIFIED BY 'password';
PostgreSQL sử dụng cú pháp tương tự, nhưng hơi khác một chút:
- CREATE USER user WITH PASSWORD 'password';
Nếu bạn muốn tạo một user mới và cấp cho họ các quyền trong một lệnh, bạn có thể thực hiện bằng cách đưa ra câu lệnh GRANT
. Lệnh sau tạo một user mới và cấp cho họ toàn quyền đối với mọi database và bảng trong RDBMS:
- GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Lưu ý từ khóa PRIVILEGES
trong câu lệnh GRANT
trước đó. Trong hầu hết các RDBMS, từ khóa này là tùy chọn và câu lệnh này có thể được viết tương đương như sau:
- GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Tuy nhiên, hãy lưu ý từ khóa PRIVILEGES
là bắt buộc để cấp các quyền như thế này khi chế độ SQL nghiêm ngặt được bật.
Xóa user
Sử dụng cú pháp sau để xóa profile user database :
- DROP USER IF EXISTS username;
Lưu ý lệnh này theo mặc định sẽ không xóa bất kỳ bảng nào do user đã xóa tạo và việc cố gắng truy cập các bảng đó có thể dẫn đến lỗi.
Chọn database
Trước khi bạn có thể tạo bảng, trước tiên bạn phải cho RDBMS biết database mà bạn muốn tạo nó. Trong MySQL và MariaDB, hãy làm như vậy với cú pháp sau:
- USE database;
Trong PostgreSQL, bạn phải sử dụng lệnh sau để chọn database mong muốn của bạn :
- \connect database
Tạo bảng
Cấu trúc lệnh sau tạo một bảng mới với tên table
, và bao gồm hai cột, mỗi loại hình cụ thể dữ liệu riêng của họ:
- CREATE TABLE table ( column_1 column_1_data_type, column_2 column_2_data_taype );
Xóa bảng
Để xóa hoàn toàn một bảng, bao gồm tất cả dữ liệu của nó, hãy chạy như sau:
- DROP TABLE IF EXISTS table
Chèn dữ liệu vào bảng
Sử dụng cú pháp sau để điền vào bảng một hàng dữ liệu:
- INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_A', 'data_B', 'data_C' );
Bạn cũng có thể điền vào một bảng với nhiều hàng dữ liệu bằng một lệnh duy nhất, như sau:
- INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_1A', 'data_1B', 'data_1C' ), ( 'data_2A', 'data_2B', 'data_2C' ), ( 'data_3A', 'data_3B', 'data_3C' );
Xóa dữ liệu khỏi bảng
Để xóa một hàng dữ liệu khỏi bảng, hãy sử dụng cấu trúc lệnh sau. Lưu ý value
phải là giá trị được giữ trong column
được chỉ định trong hàng mà bạn muốn xóa:
- DELETE FROM table WHERE column='value';
Lưu ý: Nếu bạn không bao gồm WHERE
trong câu lệnh DELETE
, như trong ví dụ sau, nó sẽ xóa tất cả dữ liệu được giữ trong bảng, nhưng không xóa các cột hoặc chính bảng:
- DELETE FROM table;
Thay đổi dữ liệu trong bảng
Sử dụng cú pháp sau để cập nhật dữ liệu được giữ trong một hàng nhất định. Lưu ý WHERE
ở cuối lệnh cho SQL biết hàng nào cần cập nhật. value
là giá trị được giữ trong column_A
phù hợp với hàng bạn muốn thay đổi.
Lưu ý: Nếu bạn không đưa WHERE
vào câu lệnh UPDATE
, lệnh này sẽ thay thế dữ liệu được giữ trong mọi hàng của bảng.
- UPDATE table SET column_1 = value_1, column_2 = value_2 WHERE column_A=value;
Chèn một cột
Cú pháp lệnh sau sẽ thêm một cột mới vào bảng:
- ALTER TABLE table ADD COLUMN column data_type;
Xóa một cột
Lệnh theo sau cấu trúc này sẽ xóa một cột khỏi bảng:
- ALTER TABLE table DROP COLUMN column;
Thực hiện các truy vấn cơ bản
Để xem tất cả dữ liệu từ một cột trong bảng, hãy sử dụng cú pháp sau:
- SELECT column FROM table;
Để truy vấn nhiều cột từ cùng một bảng, hãy phân tách tên cột bằng dấu phẩy:
- SELECT column_1, column_2 FROM table;
Bạn cũng có thể truy vấn mọi cột trong bảng bằng cách thay thế tên của các cột bằng dấu hoa thị ( *
). Trong SQL, dấu hoa thị hoạt động như trình giữ chỗ để đại diện cho “tất cả”:
- SELECT * FROM table;
Sử dụng điều khoản WHERE
Bạn có thể thu hẹp kết quả của một truy vấn bằng cách thêm SELECT
với WHERE
, như sau:
- SELECT column FROM table WHERE conditions_that_apply;
Ví dụ: bạn có thể truy vấn tất cả dữ liệu từ một hàng với cú pháp như sau. Lưu ý value
phải là giá trị được giữ trong cả column
được chỉ định và hàng bạn muốn truy vấn:
- SELECT * FROM table WHERE column = value;
Làm việc với các toán tử so sánh
Toán tử so sánh trong WHERE
xác định cách cột được chỉ định sẽ được so sánh với giá trị. Dưới đây là một số toán tử so sánh SQL phổ biến:
Nhà điều hành | Những gì nó làm |
---|---|
= | kiểm tra sự bình đẳng |
!= | kiểm tra sự bất bình đẳng |
< | kiểm tra cho ít hơn |
> | kiểm tra lớn hơn |
<= | kiểm tra nhỏ hơn hoặc bằng |
>= | các bài kiểm tra lớn hơn hoặc bằng |
BETWEEN | kiểm tra xem một giá trị có nằm trong một phạm vi nhất định hay không |
IN | kiểm tra xem giá trị của một hàng có nằm trong tập hợp các giá trị được chỉ định hay không |
EXISTS | kiểm tra xem các hàng có tồn tại hay không, với các điều kiện cụ thể |
LIKE | kiểm tra xem một giá trị có trùng với một chuỗi được chỉ định hay không |
IS NULL | kiểm tra giá trị NULL |
IS NOT NULL | kiểm tra tất cả các giá trị khác với NULL |
Làm việc với Ký tự đại diện
SQL cho phép sử dụng các ký tự đại diện. Những điều này hữu ích nếu bạn đang cố gắng tìm một mục cụ thể trong một bảng, nhưng không chắc chắn về mục nhập đó chính xác là gì.
Dấu hoa thị ( *
) là phần giữ chỗ đại diện cho “tất cả”, điều này sẽ truy vấn mọi cột trong bảng:
- SELECT * FROM table;
Dấu phần trăm ( %
) đại diện cho không hoặc nhiều ký tự không xác định.
- SELECT * FROM table WHERE column LIKE val%;
Dấu gạch dưới ( _
) được sử dụng để đại diện cho một ký tự không xác định:
- SELECT * FROM table WHERE column LIKE v_lue;
Đếm mục nhập trong một cột
Hàm COUNT
được sử dụng để tìm số mục nhập trong một cột nhất định. Cú pháp sau sẽ trả về tổng số giá trị được giữ trong column
:
- SELECT COUNT(column) FROM table;
Bạn có thể thu hẹp kết quả của hàm COUNT
bằng cách thêm WHERE
, như sau:
- SELECT COUNT(column) FROM table WHERE column=value;
Tìm giá trị trung bình trong một cột
Hàm AVG
được sử dụng để tìm giá trị trung bình (trong trường hợp này là giá trị trung bình) giữa các giá trị được giữ trong một cột cụ thể. Lưu ý hàm AVG
sẽ chỉ hoạt động với các cột chứa các giá trị số; khi được sử dụng trên một cột chứa các giá trị chuỗi, nó có thể trả về lỗi hoặc 0
:
- SELECT AVG(column) FROM table;
Tìm tổng giá trị trong một cột
Hàm SUM
được sử dụng để tìm tổng cộng của tất cả các giá trị số được giữ trong một cột:
- SELECT SUM(column) FROM table;
Như với hàm AVG
, nếu bạn chạy hàm SUM
trên một cột chứa các giá trị chuỗi, nó có thể trả về lỗi hoặc chỉ là 0
, tùy thuộc vào RDBMS của bạn.
Tìm giá trị lớn nhất trong cột
Để tìm giá trị số lớn nhất trong một cột hoặc giá trị cuối cùng theo thứ tự bảng chữ cái, hãy sử dụng hàm MAX
:
- SELECT MAX(column) FROM table;
Tìm giá trị nhỏ nhất trong cột
Để tìm giá trị số nhỏ nhất trong một cột hoặc giá trị đầu tiên theo thứ tự bảng chữ cái, hãy sử dụng hàm MIN
:
- SELECT MIN(column) FROM table;
Sắp xếp kết quả với các điều khoản ORDER BY
Mệnh đề ORDER BY
được sử dụng để sắp xếp kết quả truy vấn. Cú pháp truy vấn sau đây trả về các giá trị từ column_1
và column_2
và sắp xếp kết quả theo các giá trị được giữ trong column_1
theo thứ tự tăng dần hoặc đối với các giá trị chuỗi, theo thứ tự bảng chữ cái:
- SELECT column_1, column_2 FROM table ORDER BY column_1;
Để thực hiện cùng một hành động, nhưng sắp xếp các kết quả theo thứ tự bảng chữ cái giảm dần hoặc đảo ngược, hãy nối truy vấn với DESC
:
- SELECT column_1, column_2 FROM table ORDER BY column_1 DESC;
Sắp xếp kết quả với các điều khoản GROUP BY
Mệnh đề GROUP BY
tương tự như mệnh đề ORDER BY
, nhưng nó được sử dụng để sắp xếp kết quả của một truy vấn bao gồm một hàm tổng hợp như COUNT
, MAX
, MIN
hoặc SUM
. Riêng các hàm tổng hợp được mô tả trong phần trước sẽ chỉ trả về một giá trị duy nhất. Tuy nhiên, bạn có thể xem kết quả của một hàm tổng hợp được thực hiện trên mọi giá trị khớp trong một cột bằng cách bao gồm mệnh đề GROUP BY
.
Cú pháp sau sẽ đếm số lượng giá trị phù hợp trong column_2
và group chúng theo thứ tự tăng dần hoặc theo thứ tự bảng chữ cái:
- SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2;
Để thực hiện cùng một hành động, nhưng group các kết quả theo thứ tự bảng chữ cái giảm dần hoặc đảo ngược, hãy nối truy vấn với DESC
:
- SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2 DESC;
Truy vấn nhiều bảng với điều khoản JOIN
Mệnh đề JOIN
được sử dụng để tạo tập kết quả kết hợp các hàng từ hai hoặc nhiều bảng:
- SELECT table_1.column_1, table_2.column_2 FROM table_1 JOIN table_2 ON table_1.common_column=table_2.common_column;
Đây là một ví dụ về mệnh đề INNER JOIN
. INNER JOIN
sẽ trả về tất cả các bản ghi có giá trị phù hợp trong cả hai bảng, nhưng sẽ không hiển thị bất kỳ bản ghi nào không có giá trị phù hợp.
Có thể trả về tất cả các bản ghi từ một trong hai bảng, bao gồm các giá trị không có giá trị khớp tương ứng trong bảng khác, bằng cách sử dụng mệnh đề JOIN
bên ngoài . Các mệnh đề Outer JOIN
được viết dưới dạng LEFT JOIN
hoặc RIGHT JOIN
.
Mệnh đề LEFT JOIN
trả về tất cả các bản ghi từ bảng “bên trái” và chỉ các bản ghi phù hợp từ bảng “bên phải”. Trong ngữ cảnh của mệnh đề JOIN
bên ngoài, bảng bên trái là bảng được tham chiếu trong mệnh đề FROM
và bảng bên phải là bất kỳ bảng nào khác được tham chiếu sau câu lệnh JOIN
. Phần sau sẽ hiển thị mọi bản ghi từ table_1
và chỉ các giá trị phù hợp từ table_2
. Bất kỳ giá trị nào không khớp trong table_2
sẽ xuất hiện dưới dạng NULL
trong tập kết quả:
- SELECT table_1.column_1, table_2.column_2 FROM table_1 LEFT JOIN table_2 ON table_1.common_column=table_2.common_column;
Mệnh đề RIGHT JOIN
hoạt động giống như LEFT JOIN
, nhưng nó in ra tất cả các kết quả từ bảng bên phải và chỉ các giá trị phù hợp từ bên trái:
- SELECT table_1.column_1, table_2.column_2 FROM table_1 RIGHT JOIN table_2 ON table_1.common_column=table_2.common_column;
Kết hợp nhiều câu lệnh SELECT với các điều khoản UNION
Toán tử UNION
hữu ích để kết hợp kết quả của hai (hoặc nhiều) SELECT
thành một tập kết quả duy nhất:
- SELECT column_1 FROM table UNION SELECT column_2 FROM table;
Ngoài ra, mệnh đề UNION
có thể kết hợp hai (hoặc nhiều) SELECT
truy vấn các bảng khác nhau thành cùng một tập kết quả:
- SELECT column FROM table_1 UNION SELECT column FROM table_2;
Kết luận
Hướng dẫn này bao gồm một số lệnh phổ biến hơn trong SQL được sử dụng để quản lý database , user và bảng cũng như truy vấn nội dung được lưu giữ trong các bảng đó. Tuy nhiên, có nhiều tổ hợp mệnh đề và toán tử đều tạo ra các tập kết quả duy nhất. Nếu bạn đang tìm kiếm một hướng dẫn toàn diện hơn để làm việc với SQL, ta khuyến khích bạn xem Tham khảo SQL database của Oracle .
Ngoài ra, nếu có các lệnh SQL phổ biến mà bạn muốn xem trong hướng dẫn này, vui lòng hỏi hoặc đưa ra đề xuất trong các comment bên dưới.
Các tin liên quan
Cách cải thiện tìm kiếm database với tìm kiếm toàn văn bản (Full Text Search) trong MySQL 5.6 trên Ubuntu 16.042017-10-30
Cách thiết lập database đồ thị Titan với Cassandra và ElasticSearch trên Ubuntu 16.04
2017-06-27
Cách thiết lập database từ xa để tối ưu hóa hiệu suất trang web với MySQL trên Ubuntu 16.04
2017-06-05
Cách gỡ lỗi WordPress "Lỗi thiết lập kết nối database"
2017-04-21
Cách bảo mật database OrientDB của bạn trên Ubuntu 16.04
2017-03-24
Cách backup, khôi phục và di chuyển database MongoDB trên Ubuntu 14.04
2016-04-15
Cách nhập và xuất database MongoDB trên Ubuntu 14.04
2016-04-15
Cách chạy database cụm đa node với Cassandra trên Ubuntu 14.04
2016-03-31
Cách nhập và xuất database OrientDB trên Ubuntu 14.04
2016-01-06
Cách thiết lập database từ xa để tối ưu hóa hiệu suất trang web với MySQL
2014-04-17