Hướng dẫn select specific columns in mysql - chọn các cột cụ thể trong mysql

3.3.4.3 & nbsp; chọn các cột cụ thể

Nếu bạn không muốn nhìn thấy toàn bộ hàng từ bảng của mình, chỉ cần đặt tên cho các cột mà bạn quan tâm, được phân tách bằng dấu phẩy. Ví dụ: nếu bạn muốn biết khi nào động vật của bạn được sinh ra, hãy chọn cột

mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+
3 và
mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+
4:

mysql> SELECT name, birth FROM pet;
+----------+------------+
| name     | birth      |
+----------+------------+
| Fluffy   | 1993-02-04 |
| Claws    | 1994-03-17 |
| Buffy    | 1989-05-13 |
| Fang     | 1990-08-27 |
| Bowser   | 1989-08-31 |
| Chirpy   | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim     | 1996-04-29 |
| Puffball | 1999-03-30 |
+----------+------------+

Để tìm ra ai sở hữu vật nuôi, hãy sử dụng truy vấn này:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+

Lưu ý rằng truy vấn chỉ cần lấy cột

mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+
5 từ mỗi bản ghi và một số trong số chúng xuất hiện nhiều lần. Để giảm thiểu đầu ra, hãy truy xuất từng bản ghi đầu ra duy nhất chỉ một lần bằng cách thêm từ khóa
mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+
6:

mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+

Bạn có thể sử dụng mệnh đề

mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+
7 để kết hợp lựa chọn hàng với lựa chọn cột. Ví dụ, chỉ để có ngày sinh cho chó và mèo, hãy sử dụng truy vấn này:

mysql> SELECT name, species, birth FROM pet
       WHERE species = 'dog' OR species = 'cat';
+--------+---------+------------+
| name   | species | birth      |
+--------+---------+------------+
| Fluffy | cat     | 1993-02-04 |
| Claws  | cat     | 1994-03-17 |
| Buffy  | dog     | 1989-05-13 |
| Fang   | dog     | 1990-08-27 |
| Bowser | dog     | 1989-08-31 |
+--------+---------+------------+


Phần thú vị của việc sử dụng cơ sở dữ liệu là lấy dữ liệu ra khỏi bảng của bạn. Các chương mẫu này là một phần của một bộ bài học gồm 6 phần dạy bạn cách đưa dữ liệu vào, ra và xóa khỏi bảng của bạn. Không có kiến ​​thức về cú pháp SQL được giả định, nhưng khi bạn vượt qua bài học này, bạn sẽ có thể lấy mọi thứ ra khỏi bảng của mình, được sắp xếp và phân định theo cách chính xác của bạn.

Xem một chương mẫu từ phiên bản mới nhất của Sams Dạy bản thân SQL trong 24 giờ, phiên bản thứ 6 tóm tắt kết quả dữ liệu từ một truy vấn trong SQL.Sams Teach Yourself SQL in 24 Hours, 6th Edition Summarizing Data Results from a Query in SQL.

Chương này là từ cuốn sách 

Cuối cùng bạn đã điền vào các bảng của mình với một số dữ liệu; Bây giờ là lúc để học cách lấy lại! Lệnh SQL để truy xuất dữ liệu được chọn và trong giờ này, bạn sẽ học cách sử dụng nó để chọn mọi thứ trong bảng của bạn hoặc chỉ các mẩu thông tin cụ thể từ bảng đó.

Trong giờ này, bạn sẽ học

  • Cú pháp chọn lệnh

  • Cách đặt hàng và giới hạn kết quả của bạn

  • Cách sử dụng các hàm cơ bản trong các biểu thức chọn

  • Cách sử dụng mệnh đề WHERE

Sử dụng lệnh Chọn

Chọn là lệnh SQL được sử dụng để truy xuất các bản ghi. Cú pháp lệnh này có thể hoàn toàn đơn giản hoặc rất phức tạp. Khi bạn trở nên thoải mái hơn với lập trình cơ sở dữ liệu, bạn sẽ học cách nâng cao các câu lệnh chọn lọc của mình, cuối cùng làm cho cơ sở dữ liệu của bạn làm càng nhiều càng tốt và không làm việc quá nhiều ngôn ngữ lập trình của bạn.

Cú pháp chọn cơ bản nhất trông như thế này:

SELECT expressions_and_columns FROM table_name
[WHERE some_condition_is_true]
[ORDER BY some_column [ASC | DESC]]
[LIMIT offset, rows]

Bắt đầu với dòng đầu tiên:

SELECT expressions_and_columns FROM table_name

Một biểu thức tiện dụng là biểu tượng *, là viết tắt của "mọi thứ". Vì vậy, để chọn "Mọi thứ" (tất cả các hàng, tất cả các cột) từ bảng master_name, câu lệnh SQL của bạn sẽ là

SELECT * FROM master_name;

Tùy thuộc vào số lượng dữ liệu bạn đã chèn vào bảng master_name trong giờ trước, kết quả của bạn sẽ thay đổi, nhưng nó có thể trông giống như thế này:

mysql> SELECT * FROM master_name;
+---------+---------------------+---------------------+-----------+----------+
| name_id | name_dateadded      | name_datemodified   | firstname | lastname |
+---------+---------------------+---------------------+-----------+----------+
|       1 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | John      | Smith    |
|       2 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | Jane      | Smith    |
|       3 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | Jimbo     | Jones    |
|       4 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | Andy      | Smith    |
|       7 | 2001-10-29 14:16:21 | 2001-10-29 14:16:21 | Chris     | Jones    |
|      45 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | Anna      | Bell     |
|      44 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | Jimmy     | Carr     |
|      43 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | Albert    | Smith    |
|      42 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | John      | Doe      |
+---------+---------------------+---------------------+-----------+----------+
9 rows in set (0.00 sec)

Như bạn có thể thấy, MySQL tạo ra một bảng đáng yêu như một phần của tập kết quả, với tên của các cột dọc theo hàng đầu tiên. Nếu bạn chỉ muốn chọn các cột cụ thể, hãy thay thế * bằng tên của các cột, được phân tách bằng dấu phẩy. Câu lệnh sau đây chỉ chọn các trường tên_ID, FirstName và LastName từ bảng master_name.

mysql> SELECT name_id, firstname, lastname FROM master_name;
+---------+-----------+----------+
| name_id | firstname | lastname |
+---------+-----------+----------+
|       1 | John      |   Smith  |
|       2 | Jane      |   Smith  |
|       3 | Jimbo     |   Jones  |
|       4 | Andy      |   Smith  |
|       7 | Chris     |   Jones  |
|      45 | Anna      |   Bell   |
|      44 | Jimmy     |   Carr   |
|      43 | Albert    |   Smith  |
|      42 | John      |   Doe    |
+---------+-----------+----------+
9 rows in set (0.00 sec)

Một biểu thức hữu ích được sử dụng với Chọn là khác biệt, (không đáng ngạc nhiên) sẽ trả về các lần xuất hiện khác biệt trong một tập hợp kết quả. Ví dụ: bảng Master_Name có nhiều hơn một người có họ của "Smith". Nếu bạn muốn chọn tên cuối cùng mà không cần lặp lại kết quả, bạn sẽ sử dụng khác biệt:

mysql> SELECT DISTINCT lastname FROM master_name;
+----------+
| lastname |
+----------+
| Bell     |
| Carr     |
| Doe      |
| Jones    |
| Smith    |
+----------+
5 rows in set (0.00 sec)

Đặt hàng Chọn kết quả

Theo mặc định, kết quả của các truy vấn được chọn được đặt hàng khi chúng xuất hiện trong bảng. Nếu bạn muốn đặt hàng kết quả một cách cụ thể, chẳng hạn như theo ngày, ID, tên, v.v., chỉ định các yêu cầu của bạn bằng mệnh đề theo thứ tự. Trong tuyên bố sau, kết quả được đặt hàng bởi LastName:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
0

TIỀN BOA

Khi chọn kết quả từ bảng mà không chỉ định thứ tự sắp xếp, kết quả có thể hoặc không được đặt hàng theo giá trị khóa của chúng. Điều này xảy ra do MySQL sử dụng lại không gian được đưa lên bởi các hàng đã bị xóa trước đó. Nói cách khác, nếu bạn thêm các bản ghi có giá trị ID từ 1 đến 5, thì hãy xóa bản ghi bằng ID số 4, thì hãy thêm bản ghi khác (ID số 6), các bản ghi có thể xuất hiện trong bảng theo thứ tự này: 1, 2, 3, 6, 5.

Việc sắp xếp thứ tự mặc định theo kết quả là tăng dần (ASC); Chuỗi sắp xếp từ A đến Z, số nguyên bắt đầu từ 0, ngày sắp xếp từ lâu đời nhất đến mới nhất. Bạn cũng có thể chỉ định một loại giảm dần, sử dụng Desc:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
1

Bạn không giới hạn trong việc sắp xếp chỉ bằng một lĩnh vực mà bạn có thể chỉ định bao nhiêu trường tùy thích, được phân tách bằng dấu phẩy. Ưu tiên sắp xếp là theo thứ tự danh sách, vì vậy nếu bạn sử dụng thứ tự của LastName, FirstName, kết quả sẽ được sắp xếp theo tên LastName, thì bằng FirstName:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
2

Giới hạn kết quả của bạn

Bạn có thể sử dụng mệnh đề giới hạn để chỉ trả về một số lượng bản ghi nhất định trong kết quả truy vấn chọn của bạn. Có hai yêu cầu khi sử dụng mệnh đề giới hạn: bù và số lượng hàng. Phần bù là vị trí bắt đầu và số lượng hàng phải tự giải thích.

TIỀN BOA

Khi chọn kết quả từ bảng mà không chỉ định thứ tự sắp xếp, kết quả có thể hoặc không được đặt hàng theo giá trị khóa của chúng. Điều này xảy ra do MySQL sử dụng lại không gian được đưa lên bởi các hàng đã bị xóa trước đó. Nói cách khác, nếu bạn thêm các bản ghi có giá trị ID từ 1 đến 5, thì hãy xóa bản ghi bằng ID số 4, thì hãy thêm bản ghi khác (ID số 6), các bản ghi có thể xuất hiện trong bảng theo thứ tự này: 1, 2, 3, 6, 5.

Việc sắp xếp thứ tự mặc định theo kết quả là tăng dần (ASC); Chuỗi sắp xếp từ A đến Z, số nguyên bắt đầu từ 0, ngày sắp xếp từ lâu đời nhất đến mới nhất. Bạn cũng có thể chỉ định một loại giảm dần, sử dụng Desc:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
3

Bạn không giới hạn trong việc sắp xếp chỉ bằng một lĩnh vực mà bạn có thể chỉ định bao nhiêu trường tùy thích, được phân tách bằng dấu phẩy. Ưu tiên sắp xếp là theo thứ tự danh sách, vì vậy nếu bạn sử dụng thứ tự của LastName, FirstName, kết quả sẽ được sắp xếp theo tên LastName, thì bằng FirstName:

  1. Chọn * từ Master_Name đặt hàng theo giới hạn LastName 0, 5;

  2. Chọn * từ Master_Name Đơn hàng theo giới hạn LastName 6, 5;

  3. Chọn * từ Master_Name đặt hàng theo giới hạn LastName 11, 5;

Nếu bạn chỉ định một phần bù và số lượng hàng trong truy vấn của bạn và không tìm thấy kết quả nào, bạn sẽ không thấy lỗi. Chỉ là một bộ kết quả trống. Ví dụ: nếu bảng master_name chỉ chứa 9 bản ghi, một truy vấn có độ lệch giới hạn là 11 sẽ không tạo ra kết quả:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
4

Trong các ứng dụng dựa trên web, khi danh sách dữ liệu được hiển thị với các liên kết như "trước 10" và "10 tiếp theo", đó là một đặt cược an toàn rằng một điều khoản giới hạn đang hoạt động.

Sử dụng một số chức năng tổng hợp với Chọn

MySQL có nhiều chức năng tích hợp cho phép bạn thực hiện tất cả các loại hoạt động trên số nguyên, chuỗi và ngày. Các chức năng này sẽ được giải thích chi tiết trong những giờ sau đó, nhưng một vài chức năng đơn giản hơn được mô tả ở đây sẽ kích thích sự thèm ăn của bạn.

Nếu bạn muốn biết có bao nhiêu bản ghi trong bảng của bạn, bạn chỉ có thể chọn tất cả các bản ghi và tìm kiếm phản hồi có nội dung "5 hàng trong thiết lập", hoặc tuy nhiên nhiều người có. Nếu bạn có một triệu hàng, chọn tất cả một triệu hàng chỉ để xem có bao nhiêu hàng không phải là cách nhanh nhất để tìm câu trả lời của bạn. Thay vào đó, bạn có thể sử dụng hàm đếm (), đếm tất cả các giá trị không null trong một cột nhất định. Nếu bạn có một khóa chính được xác định trong bảng của mình, bạn sẽ biết rằng trường không thể vô hiệu. Biết điều này, nếu bạn sử dụng Count () trên khóa chính, bạn có thể có được số lượng tất cả các bản ghi trong bảng.

Sử dụng bảng kiểm tra chứa gần 4000 hàng dữ liệu số nguyên và chuỗi, việc chọn tất cả các hàng mất 0,03 giây.

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
5

Sử dụng Count (), truy vấn nhanh hơn:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
6

Đếm () chỉ trả về một hàng trong tập kết quả. Kết quả này bằng với số lượng hàng thực tế trong bảng, đó là những gì truy vấn của bạn đã hỏi. Tiêu đề cột cho tập kết quả là đếm (ID), biểu thức được sử dụng trong truy vấn chọn.

Bạn có thể sử dụng để tạo ra các tiêu đề cột của riêng bạn không chỉ khi sử dụng các chức năng mà trong bất kỳ câu lệnh chọn nào. Ví dụ: để đặt tên cho cột của bạn Row_Count, sử dụng:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
7

Bạn có thể sử dụng Count () kết hợp với biểu thức riêng biệt bạn đã học trước đó. Thay vì chọn tên cuối cùng thực tế từ bảng master_name, bạn có thể chọn số lượng của những tên đó:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
8

Một vài hàm cơ bản khác là Min () và Max (), được sử dụng để chọn các giá trị tối thiểu và tối đa trong một trường.

Ví dụ: chọn các giá trị tối thiểu và tối đa cho name_id từ bảng master_name:

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
9
mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+
0

TIỀN BOA

Sử dụng tối đa (name_id) sẽ không tạo ra số lượng chính xác số lượng bản ghi trong bảng Master_Name. Mặc dù các điểm tự động chính, các bản ghi có thể đã bị xóa trong suốt sự tồn tại của bảng. Trong bảng master_name hiện tại, chỉ có 9 bản ghi, nhưng giá trị của MAX (name_id) là 45 vì nhiều bản ghi giả đã được thêm và xóa. Luôn sử dụng Count () và không tối đa () để tìm số lượng bản ghi trong bảng.

Nếu trường là một ngày, Min () sẽ trả về ngày sớm nhất, trong khi Max () trả về ngày mới nhất:

mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+
1
mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+
2

Đây chỉ là một mẫu của nhiều chức năng MySQL tích hợp, từ tối tăm đến "không thể sống thiếu chúng", hầu hết trong số đó bạn sẽ tìm hiểu trong vài giờ 15, 16 và 17.