Chọn một hàng mysql

Chris Newman giải thích cách sử dụng câu lệnh SELECT, một trong những câu lệnh SQL được sử dụng thường xuyên nhất, để tìm nạp các bản ghi từ cơ sở dữ liệu MySQL

Đoạn trích này là từ Ấn bản đầu tiên của My SQL trong 10 phút

Xem phiên bản cập nhật của bài viết/chương này từ Sams Tự học SQL trong 10 phút, Phiên bản thứ 5

.

Trong bài học này, bạn tìm hiểu cách sử dụng câu lệnh SELECT để tìm nạp các bản ghi từ cơ sở dữ liệu MySQL

Lệnh SQL đầu tiên bạn sẽ học và cũng là lệnh bạn sẽ sử dụng thường xuyên nhất, là SELECT. Trong bài học này, bạn bắt đầu bằng cách tìm nạp các bản ghi dữ liệu từ một bảng duy nhất

Câu lệnh SELECT bắt đầu bằng từ khóa SELECT và được sử dụng để lấy thông tin từ các bảng cơ sở dữ liệu MySQL. Bạn phải chỉ định tên bảng để tìm nạp dữ liệu từ đó—sử dụng từ khóa TỪ—và một hoặc nhiều cột mà bạn muốn truy xuất từ ​​bảng đó

Truy xuất các cột riêng lẻ

Nếu bạn thực thi câu lệnh SQL sau bằng mysql, đầu ra được tạo sẽ như hình minh họa

mysql> SELECT name
    -> FROM customers;
+-------------------------+
| name                    |
+-------------------------+
| Presidents Incorporated |
| Science Corporation     |
| Musicians of America    |
+-------------------------+
3 rows in set (0.02 sec)

Bảng khách hàng chứa ba bản ghi. Trong câu lệnh này, chúng tôi yêu cầu MySQL tìm nạp giá trị của cột tên;

Dữ liệu hiển thị không được sắp xếp. Thông thường các bản ghi được truy xuất theo cùng thứ tự mà chúng được chèn vào cơ sở dữ liệu. Trong ví dụ này, tên công ty được hiển thị theo thứ tự chúng được chèn vào tập lệnh tạo bảng mẫu

Một câu lệnh SELECT sẽ trả về mọi hàng từ bảng trừ khi bạn nói khác đi. Bạn sẽ học cách làm điều này, bằng cách đặt bộ lọc vào truy vấn, trong bài học tiếp theo

Truy xuất nhiều cột

Bây giờ bạn sẽ thử một câu lệnh SELECT đơn giản khác, lần này là trên bảng sản phẩm. Bạn có thể truy xuất các giá trị từ hai cột trong cùng một truy vấn bằng cách chỉ định danh sách các cột sau từ khóa SELECT, phân tách chúng bằng dấu phẩy

mysql> SELECT name, price
    -> FROM products;
+----------------+-------+
| name           | price |
+----------------+-------+
| Small product  |  5.99 |
| Medium product |  9.99 |
| Large product  | 15.99 |
+----------------+-------+
3 rows in set (0.01 sec)

Các cột trong đầu ra xuất hiện theo thứ tự được cung cấp trong truy vấn. Để thêm cột trọng lượng vào dữ liệu được truy xuất, hãy thêm nó vào cuối danh sách các cột đã chọn, như sau

mysql> SELECT name, price, weight
    -> FROM products;
+----------------+-------+---------+
| name           | price |  weight |
+----------------+-------+---------+
| Small product  |  5.99 |    1.50 |
| Medium product |  9.99 |    4.50 |
| Large product  | 15.99 |    8.00 |
+----------------+-------+---------+
3 rows in set (0.00 sec)

Truy xuất tất cả các cột

Nếu muốn lấy dữ liệu từ mọi cột trong bảng, bạn không cần chỉ định tên từng cột sau từ khóa SELECT. Sử dụng ký tự dấu hoa thị (*) thay cho danh sách cột trong câu lệnh CHỌN để hướng dẫn MySQL trả về mọi cột từ bảng đã chỉ định

Truy vấn sau truy xuất mọi cột và hàng từ bảng sản phẩm

mysql> SELECT *
    -> FROM products;
+------+----------------+--------+-------+
| code | name           | weight | price |
+------+----------------+--------+-------+
| MINI | Small product  |   1.50 |  5.99 |
| MIDI | Medium product |   4.50 |  9.99 |
| MAXI | Large product  |   8.00 | 15.99 |
+------+----------------+--------+-------+
3 rows in set (0.00 sec)

Lưu ý rằng đầu ra được tạo hoàn toàn giống nhau, như thể bạn đã chỉ định từng cột trong truy vấn theo tên, như thế này

mysql> SELECT code, name, weight, price
    -> FROM products;
+------+----------------+--------+-------+
| code | name           | weight | price |
+------+----------------+--------+-------+
| MINI | Small product  |   1.50 |  5.99 |
| MIDI | Medium product |   4.50 |  9.99 |
| MAXI | Large product  |   8.00 | 15.99 |
+------+----------------+--------+-------+
3 rows in set (0.00 sec)

Khi bạn sử dụng CHỌN *, các cột được hiển thị theo thứ tự xuất hiện trong bảng cơ sở dữ liệu—thứ tự các cột được chỉ định khi tạo bảng. Bạn sẽ học cách tạo bảng cơ sở dữ liệu trong Bài 14 "Tạo và sửa đổi bảng. "

So sánh thứ tự của các cột trong kết quả của truy vấn trước đó với đầu ra do lệnh DESCRIBE tạo ra cho các sản phẩm

mysql> DESCRIBE products;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| code   | varchar(10)  |      |     |         |       |
| name   | varchar(40)  |      |     |         |       |
| weight | decimal(6,2) |      |     | 0.00    |       |
| price  | decimal(6,2) |      |     | 0.00    |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

Sai lầm trong câu lệnh SELECT

Chẳng bao lâu nữa, bạn sẽ gõ nhầm một câu lệnh SELECT—nếu bạn chưa làm như vậy. Ở đây bạn xem một số thông báo lỗi mà MySQL đưa ra khi bạn mắc lỗi

Nếu bạn cố gắng chọn dữ liệu từ một bảng không tồn tại, MySQL sẽ đưa ra thông báo lỗi. Trong ví dụ này, bạn đã cố gắng chọn từ bảng có tên sản phẩm thay vì sản phẩm

mysql> SELECT *
    -> FROM product;
ERROR 1146 (42S02): Table sampdb.product' doesn't exist

Nếu bạn chỉ định tên cột không tồn tại trong bảng đã chọn, bạn sẽ thấy thông báo lỗi sau

mysql> SELECT name
    -> FROM customer_contacts;
ERROR 1054 (42S22): Unknown column 'name' in 'field list'

Trong trường hợp này, bảng customer_contacts không có cột tên—nó có các cột first_name và last_name riêng biệt

Nếu bạn mắc lỗi cú pháp—nghĩa là khi MySQL không thể hiểu câu lệnh SELECT vì mọi thứ không xuất hiện theo thứ tự mà nó mong đợi—thông báo lỗi sẽ như sau

________số 8_______

Trong ví dụ trước, lưu ý dấu phẩy sau last_name. Khi MySQL nhìn thấy điều này, nó sẽ mong đợi một tên cột khác theo sau, nhưng thay vào đó, từ tiếp theo là TỪ. Vì bạn không thể sử dụng từ khóa SQL làm tên cột, điều này gây ra lỗi cú pháp như hình minh họa

MySQL cũng có thể đưa ra lỗi cú pháp nếu bạn viết sai từ khóa. Trong ví dụ sau, từ khóa FROM bị gõ nhầm thành FORM. Lỗi hiển thị cho biết MySQL không biết từ FORM phục vụ mục đích gì trong câu lệnh SQL, vì vậy nó không thể thực hiện truy vấn này

mysql> SELECT name
    -> FORM products;
ERROR 1064 (42000): You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for
the right syntax to use near 'products' at line 2

Xem xét lỗi trong câu lệnh sau, trong đó bạn đã nhập nhầm tên cột gồm hai từ do bỏ ký tự gạch dưới trong tên. MySQL không cho phép tên cột chứa khoảng trắng, vì vậy dấu gạch dưới thường được sử dụng để phân tách các từ

mysql> SELECT name, price
    -> FROM products;
+----------------+-------+
| name           | price |
+----------------+-------+
| Small product  |  5.99 |
| Medium product |  9.99 |
| Large product  | 15.99 |
+----------------+-------+
3 rows in set (0.01 sec)
0

Trong ví dụ này, MySQL đưa ra lỗi cột không xác định thay vì lỗi cú pháp. Cách thực tế mà MySQL diễn giải điều này là chọn một cột có tên cuối cùng và đặt cho nó một tên bí danh, vì vậy thực sự không có lỗi trong cú pháp câu lệnh. Đừng lo lắng về các chi tiết của vấn đề này bây giờ—nó có trong Bài 12, "Tạo liên kết nâng cao. "

Truy xuất thông tin cơ sở dữ liệu

Để xây dựng một câu lệnh CHỌN hợp lệ, bạn cần biết cách tổ chức cơ sở dữ liệu. Lệnh SHOW được sử dụng để lấy thông tin về các thành phần cơ sở dữ liệu

Truy xuất danh sách cơ sở dữ liệu

Sử dụng lệnh SHOW DATABASES để truy xuất danh sách cơ sở dữ liệu mà bạn có quyền truy cập. Thực thi lệnh SHOW giống như câu lệnh SELECT trong chương trình mysql

mysql> SELECT name, price
    -> FROM products;
+----------------+-------+
| name           | price |
+----------------+-------+
| Small product  |  5.99 |
| Medium product |  9.99 |
| Large product  | 15.99 |
+----------------+-------+
3 rows in set (0.01 sec)
1

Truy xuất danh sách các bảng

Khi bạn đã kết nối với cơ sở dữ liệu bằng lệnh use trong mysql, bạn có thể lấy danh sách các bảng trong cơ sở dữ liệu đó bằng lệnh SHOW TABLES

mysql> SELECT name, price
    -> FROM products;
+----------------+-------+
| name           | price |
+----------------+-------+
| Small product  |  5.99 |
| Medium product |  9.99 |
| Large product  | 15.99 |
+----------------+-------+
3 rows in set (0.01 sec)
2

Nếu bạn được kết nối với một cơ sở dữ liệu nhưng muốn liệt kê các bảng trong một cơ sở dữ liệu khác, bạn có thể sử dụng mệnh đề TỪ với SHOW TABLES

mysql> SELECT name, price
    -> FROM products;
+----------------+-------+
| name           | price |
+----------------+-------+
| Small product  |  5.99 |
| Medium product |  9.99 |
| Large product  | 15.99 |
+----------------+-------+
3 rows in set (0.01 sec)
3

Truy xuất danh sách các cột

Để truy xuất cấu trúc bảng cho bảng cơ sở dữ liệu, hãy sử dụng lệnh SHOW COLUMNS sử dụng tên bảng trong mệnh đề TỪ