• Node.js Video Tutorials

Node.js - MySQL 從表中選擇資料



在 MySQL 資料庫中最常見的操作是從表中檢索資料。SELECT 查詢對應於 CRUD 首字母縮寫詞中的檢索操作。要使用 Node.js 程式執行檢索,應將 SELECT 查詢字串傳遞給 MySQL 連線物件的 query() 方法。

MySQL 中的 SELECT FROM 語句具有以下語法:

SELECT field1, field2, ... FROM table_name;

要從表中定義的所有欄位中選擇資料,可以使用星號 (*) 字元。

SELECT * FROM table_name;

可以使用其他子句與主 SELECT 語句一起使用,例如 LIKE、WHERE、ORDER BY 等。

SELECT 語句返回一個結果集,其中包含從表中檢索的行列表。

MySQL 命令列客戶端類似於 Node.js REPL 環境。SELECT 語句檢索的結果集在查詢語句之後立即顯示。

mysql> use mydb;
Database changed
mysql> SELECT name, age, salary FROM employee;
+-------+------+--------+
| name  | age  | salary |
+-------+------+--------+
| Ravi  |   25 |  25000 |
| Anil  |   26 |  30000 |
| Meena |   26 |  27000 |
+-------+------+--------+

但是,在 Node.js 中,當將 SELECT 查詢傳遞給 MySQL 連線物件的 query() 方法時,它會返回一個 RowDataPacket 物件陣列。要處理檢索到的資料,必須將其轉換為 JSON 格式。

示例

在以下程式碼中,我們將 SELECT 查詢字串傳遞給 con.query() 方法,並在控制檯上顯示結果集。

var mysql = require('mysql');
var con = mysql.createConnection({
   host: "localhost",
   user: "root",
   password: "mypassword",
   database: "mydb"
});

var qry =`SELECT name,salary FROM employee;`;
con.connect(function (err) {
   if (err) throw err;
   console.log("Connected!");
   con.query(qry, function (err, results) {
      if (err) throw err;
      console.log(results);
   });
   con.end();
});

輸出

[
  RowDataPacket { name: 'Ravi', salary: 25000 },
  RowDataPacket { name: 'Anil', salary: 30000 },
  RowDataPacket { name: 'Meena', salary: 27000 }
]

我們可以使用 JSON.stringify() 方法將 RowDataPacket 物件轉換為字串,而不是原始結果集。

var qry =`SELECT name,salary FROM employee;`;
con.connect(function (err) {
   if (err) throw err;
   console.log("Connected!");
   con.query(qry, function (err, results) {
      if (err) throw err;
      console.log(JSON.stringify(results));
   });
   con.end();
});

輸出

[{"name":"Ravi","salary":25000},{"name":"Anil","salary":30000},{"name":"Meena","salary":27000}]

示例

在此示例中,* 萬用字元用於從 employee 表中的所有欄位檢索資料。我們還使用 forEach 迴圈逐行迭代 SELECT 查詢返回的結果集。每一行中每個欄位的值可以透過在方括號中放入欄位名稱來獲取。例如,行的 ID 由 row[‘id’] 給出。

var mysql = require('mysql');
var con = mysql.createConnection({
   host: "localhost",
   user: "root",
   password: "mypassword",
   database: "mydb"
});

var qry =`SELECT * FROM employee;`;
con.connect(function (err) {
   if (err) throw err;
   console.log("Connected!");
   con.query(qry, function (err, results) {
      if (err) throw err;
      results.forEach((row) => {
         console.log(`ID: ${row['id']}, NAME: ${row['name']}, AGE: ${row['age']}, SALARY: ${row['salary']}`);
      });
   });
   con.end();
});

輸出

ID: 1, NAME: Ravi, AGE: 25, SALARY: 25000
ID: 2, NAME: Anil, AGE: 26, SALARY: 30000
ID: 3, NAME: Meena, AGE: 26, SALARY: 27000

您可以在 SELECT 語句的欄位列表中包含派生或計算列,其中其值取決於涉及結構中定義的欄位的表示式。您還可以使用 AS 關鍵字為欄位指定別名。

SELECT expression AS COLUMN_name FROM table_name;

在以下示例中,SELECT 語句有一個 TAX 列。它的值計算為 salary 欄位的 5%。

var mysql = require('mysql');
var con = mysql.createConnection({
   host: "localhost",
   user: "root",
   password: "mypassword",
   database: "mydb"
});

var qry =`SELECT name, salary, salary*0.05 as tax FROM employee;`;
con.connect(function (err) {
   if (err) throw err;
   console.log("Connected!");
   con.query(qry, function (err, results) {
      if (err) throw err;
      console.log(JSON.stringify(results));
   });
   con.end();
});

輸出

[{"name":"Ravi","salary":25000,"tax":1250},{"name":"Anil","salary":30000,"tax":1500},{"name":"Meena","salary":27000,"tax":1350}]
廣告