markelov666
Умник
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Введние в Node.JS
Node.js можно использовать в приложениях баз данных.
Одна из самых популярных баз данных - MySQL.
База данных MySQL
Чтобы иметь возможность экспериментировать с примерами кода, на вашем компьютере должен быть установлен MySQL.После того, как MySQL будет запущен на вашем компьютере, вы сможете получить к нему доступ с помощью Node.js.
Для доступа к базе данных MySQL с помощью Node.js вам понадобится драйвер MySQL. В этом руководстве будет использоваться модуль «mysql», загруженный с NPM.
Чтобы загрузить и установить модуль «mysql», откройте командный терминал и выполните следующее:
C:\Users\Your Name>npm install mysqlТеперь вы скачали и установили драйвер базы данных mysql.
Node.js может использовать этот модуль для управления базой данных MySQL:
JavaScript:
var mysql = require('mysql');
Подключения к базе данных
Начните с создания подключения к базе данных.Используйте имя пользователя и пароль из вашей базы данных MySQL.
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
C:\Users\Your Name>node connect.jsЧто даст вам такой результат:
Connected!Запрос базы данных
Используйте операторы SQL для чтения (или записи) базы данных MySQL. Это также называется «запросить» базу данных.Объект подключения, созданный в приведенном выше примере, имеет метод для запроса базы данных:
JavaScript:
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Result: " + result);
});
});
Создание базы данных
Чтобы создать базу данных в MySQL, используйте оператор «CREATE DATABASE»Создайте базу данных с именем «mydb»:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
con.query("CREATE DATABASE mydb", function (err, result) {
if (err) throw err;
console.log("Database created");
});
});
C:\Users\Your Name>node create_db.jsЧто даст вам такой результат:
Connected!
Database createdСоздание таблицы
Чтобы создать таблицу в MySQL, используйте оператор «CREATE TABLE».Убедитесь, что вы указали имя базы данных при создании соединения
Создайте таблицу с именем «клиенты»:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table created");
});
});
C:\Users\Your Name>node create_table.jsЧто даст вам такой результат:
Connected!
Table createdВставить в таблицу
Чтобы заполнить таблицу в MySQL, используйте оператор «INSERT INTO».Вставьте запись в таблицу «клиенты»:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "INSERT INTO customers (name, address) VALUES ('Company Inc', 'Highway 37')";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("1 record inserted");
});
});
C:\Users\Your Name>node db_insert.jsЧто даст вам такой результат:
Connected!
1 record insertedВставить несколько записей
Чтобы вставить более одной записи, создайте массив, содержащий значения, и вставьте вопросительный знак в sql, который будет заменен массивом значений:
SQL:
INSERT INTO customers (name, address) VALUES ?
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "INSERT INTO customers (name, address) VALUES ?";
var values = [
['John', 'Highway 71'],
['Peter', 'Lowstreet 4'],
['Amy', 'Apple st 652'],
['Hannah', 'Mountain 21'],
['Michael', 'Valley 345'],
['Sandy', 'Ocean blvd 2'],
['Betty', 'Green Grass 1'],
['Richard', 'Sky st 331'],
['Susan', 'One way 98'],
['Vicky', 'Yellow Garden 2'],
['Ben', 'Park Lane 38'],
['William', 'Central st 954'],
['Chuck', 'Main Road 989'],
['Viola', 'Sideway 1633']
];
con.query(sql, [values], function (err, result) {
if (err) throw err;
console.log("Number of records inserted: " + result.affectedRows);
});
});
C:\Users\Your Name>node db_insert_multple.jsЧто даст вам такой результат:
Connected!
Number of records inserted: 14Объект результата
При выполнении запроса возвращается объект результата.Объект результата содержит информацию о том, как запрос повлиял на таблицу.
Объект результата, возвращенный из приведенного выше примера, выглядит так:
JavaScript:
{
fieldCount: 0,
affectedRows: 14,
insertId: 0,
serverStatus: 2,
warningCount: 0,
message: '\'Records:14 Duplicated: 0 Warnings: 0',
protocol41: true,
changedRows: 0
}
Вернуть количество затронутых строк:
JavaScript:
console.log(result.affectedRows)
14Получить вставленный идентификатор
Для таблиц с полем идентификатора автоинкремента вы можете получить идентификатор только что вставленной строки, запросив объект результата.Примечание: Чтобы получить вставленный идентификатор, можно вставить только одну строку.
Вставьте запись в таблицу «клиенты» и верните идентификатор:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "INSERT INTO customers (name, address) VALUES ('Michelle', 'Blue Village 1')";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("1 record inserted, ID: " + result.insertId);
});
});
C:\Users\Your Name>node db_insert_id.jsЧто даст вам что-то вроде этого взамен:
1 record inserted, ID: 15Выбор из таблицы
Чтобы выбрать данные из таблицы в MySQL, используйте оператор «SELECT».Выберите все записи из таблицы «клиенты» и отобразите объект результата:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});
Сохраните приведенный выше код в файле с именем db_select.js и запустите этот файл:
C:\Users\Your Name>node db_select.jsЧто даст вам такой результат:
JSON:
[
{ id: 1, name: 'John', address: 'Highway 71'},
{ id: 2, name: 'Peter', address: 'Lowstreet 4'},
{ id: 3, name: 'Amy', address: 'Apple st 652'},
{ id: 4, name: 'Hannah', address: 'Mountain 21'},
{ id: 5, name: 'Michael', address: 'Valley 345'},
{ id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
{ id: 7, name: 'Betty', address: 'Green Grass 1'},
{ id: 8, name: 'Richard', address: 'Sky st 331'},
{ id: 9, name: 'Susan', address: 'One way 98'},
{ id: 10, name: 'Vicky', address: 'Yellow Garden 2'},
{ id: 11, name: 'Ben', address: 'Park Lane 38'},
{ id: 12, name: 'William', address: 'Central st 954'},
{ id: 13, name: 'Chuck', address: 'Main Road 989'},
{ id: 14, name: 'Viola', address: 'Sideway 1633'}
]
Выбор столбцов
Чтобы выбрать только некоторые столбцы в таблице, используйте оператор «SELECT», за которым следует имя столбца.Выберите имя и адрес из таблицы «клиенты» и отобразите объект возврата:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT name, address FROM customers", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});
C:\Users\Your Name>node db_select2.jsЧто даст вам такой результат:
JSON:
[
{ name: 'John', address: 'Highway 71'},
{ name: 'Peter', address: 'Lowstreet 4'},
{ name: 'Amy', address: 'Apple st 652'},
{ name: 'Hannah', address: 'Mountain 21'},
{ name: 'Michael', address: 'Valley 345'},
{ name: 'Sandy', address: 'Ocean blvd 2'},
{ name: 'Betty', address: 'Green Grass 1'},
{ name: 'Richard', address: 'Sky st 331'},
{ name: 'Susan', address: 'One way 98'},
{ name: 'Vicky', address: 'Yellow Garden 2'},
{ name: 'Ben', address: 'Park Lane 38'},
{ name: 'William', address: 'Central st 954'},
{ name: 'Chuck', address: 'Main Road 989'},
{ name: 'Viola', address: 'Sideway 1633'}
]
Объект результата
Как видно из результата приведенного выше примера, объект результата - это массив, содержащий каждую строку как объект.Чтобы вернуть, например, адрес третьей записи, просто обратитесь к свойству адреса третьего объекта массива.
Верните адрес третьей записи:
JavaScript:
console.log(result[2].address);
Apple st 652Объект Fields
Третий параметр функции обратного вызова - это массив, содержащий информацию о каждом поле в результате.Выберите все записи из таблицы «клиенты» и отобразите объект полей :
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT name, address FROM customers", function (err, result, fields) {
if (err) throw err;
console.log(fields);
});
});
C:\Users\Your Name>node db_select_fields.jsЧто даст вам такой результат:
JSON:
[
{
catalog: 'def',
db: 'mydb',
table: 'customers',
orgTable: 'customers',
name: 'name',
orgName: 'address',
charsetNr: 33,
length: 765,
type: 253,
flags: 0,
decimals: 0,
default: undefined,
zeroFill: false,
protocol41: true
},
{
catalog: 'def',
db: 'mydb',
table: 'customers',
orgTable: 'customers',
name: 'address',
orgName: 'address',
charsetNr: 33,
length: 765,
type: 253,
flags: 0,
decimals: 0,
default: undefined,
zeroFill: false,
protocol41: true
}
]
Чтобы вернуть, например, имя второго поля, просто обратитесь к свойству name второго элемента массива
Верните имя второго поля:
JavaScript:
console.log(fields[1].name);
addressВыбрать с фильтром
При выборе записей из таблицы вы можете отфильтровать выбор с помощью оператора «WHERE»Выберите запись с адресом «Park Lane 38»:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers WHERE address = 'Park Lane 38'", function (err, result) {
if (err) throw err;
console.log(result);
});
});
C:\Users\Your Name>node db_where.jsЧто даст вам такой результат:
JSON:
[
{ id: 11, name: 'Ben', address: 'Park Lane 38'}
]
Подстановочные знаки
Вы также можете выбрать записи, которые начинаются, включают или заканчиваются данной буквой или фразой.Используйте подстановочный знак "%" для обозначения нуля, одного или нескольких символов
Выберите записи, адрес которых начинается с буквы «S»:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers WHERE address LIKE 'S%'", function (err, result) {
if (err) throw err;
console.log(result);
});
});
C:\Users\Your Name>node db_where_s.jsЧто даст вам такой результат:
JSON:
[
{ id: 8, name: 'Richard', address: 'Sky st 331'},
{ id: 14, name: 'Viola', address: 'Sideway 1633'}
]
Экранирование значений запроса
Если значения запроса являются переменными, предоставленными пользователем, вам следует избегать значений.Это сделано для предотвращения SQL-инъекций, которые являются распространенным методом взлома сети для уничтожения или неправильного использования вашей базы данных.
В модуле MySQL есть методы для экранирования значений запроса
Экранировать значения запроса с помощью mysql.escape() метода:
JavaScript:
var adr = 'Mountain 21';
var sql = 'SELECT * FROM customers WHERE address = ' + mysql.escape(adr);
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
В этом случае переменная отправляется вторым параметром в методе query()
Экранировать значения запроса с помощью «?» метода заполнителя:
JavaScript:
var adr = 'Mountain 21';
var sql = 'SELECT * FROM customers WHERE address = ?';
con.query(sql, [adr], function (err, result) {
if (err) throw err;
console.log(result);
});
JavaScript:
var name = 'Amy';
var adr = 'Mountain 21';
var sql = 'SELECT * FROM customers WHERE name = ? OR address = ?';
con.query(sql, [name, adr], function (err, result) {
if (err) throw err;
console.log(result);
});
Сортировать результат
Используйте оператор ORDER BY, чтобы отсортировать результат в порядке возрастания или убывания.Ключевое слово ORDER BY по умолчанию сортирует результат по возрастанию. Чтобы отсортировать результат в порядке убывания, используйте ключевое слово DESC.
Отсортируйте результат в алфавитном порядке по имени:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers ORDER BY name", function (err, result) {
if (err) throw err;
console.log(result);
});
});
C:\Users\Your Name>node db_orderby.jsЧто даст вам такой результат:
JSON:
[
{ id: 3, name: 'Amy', address: 'Apple st 652'},
{ id: 11, name: 'Ben', address: 'Park Lane 38'},
{ id: 7, name: 'Betty', address: 'Green Grass 1'},
{ id: 13, name: 'Chuck', address: 'Main Road 989'},
{ id: 4, name: 'Hannah', address: 'Mountain 21'},
{ id: 1, name: 'John', address: 'Higheay 71'},
{ id: 5, name: 'Michael', address: 'Valley 345'},
{ id: 2, name: 'Peter', address: 'Lowstreet 4'},
{ id: 8, name: 'Richard', address: 'Sky st 331'},
{ id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
{ id: 9, name: 'Susan', address: 'One way 98'},
{ id: 10, name: 'Vicky', address: 'Yellow Garden 2'},
{ id: 14, name: 'Viola', address: 'Sideway 1633'},
{ id: 12, name: 'William', address: 'Central st 954'}
]
ORDER BY DESC
Используйте ключевое слово DESC, чтобы отсортировать результат в порядке убывания.Отсортируйте результат в обратном алфавитном порядке по имени:
JavaScript:
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers ORDER BY name DESC", function (err, result) {
if (err) throw err;
console.log(result);
});
});
C:\Users\Your Name>node db_orderby_desc.jsЧто даст вам такой результат:
JSON:
[
{ id: 12, name: 'William', address: 'Central st 954'},
{ id: 14, name: 'Viola', address: 'Sideway 1633'},
{ id: 10, name: 'Vicky', address: 'Yellow Garden 2'},
{ id: 9, name: 'Susan', address: 'One way 98'},
{ id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
{ id: 8, name: 'Richard', address: 'Sky st 331'},
{ id: 2, name: 'Peter', address: 'Lowstreet 4'},
{ id: 5, name: 'Michael', address: 'Valley 345'},
{ id: 1, name: 'John', address: 'Higheay 71'},
{ id: 4, name: 'Hannah', address: 'Mountain 21'},
{ id: 13, name: 'Chuck', address: 'Main Road 989'},
{ id: 7, name: 'Betty', address: 'Green Grass 1'},
{ id: 11, name: 'Ben', address: 'Park Lane 38'},
{ id: 3, name: 'Amy', address: 'Apple st 652'}
]
Удалить запись
Вы можете удалить записи из существующей таблицы с помощью оператора «DELETE FROM»Удалите любую запись с адресом «Mountain 21»:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "DELETE FROM customers WHERE address = 'Mountain 21'";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Number of records deleted: " + result.affectedRows);
});
});
Сохраните приведенный выше код в файле с именем db_delete.js и запустите этот файл:
C:\Users\Your Name>node db_delete.jsЧто даст вам такой результат:
Number of records deleted: 1Объект результата
При выполнении запроса возвращается объект результата.Объект результата содержит информацию о том, как запрос повлиял на таблицу.
Объект результата, возвращенный из приведенного выше примера, выглядит так:
JavaScript:
{
fieldCount: 0,
affectedRows: 1,
insertId: 0,
serverStatus: 34,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0
}
Вернуть количество затронутых строк:
JavaScript:
console.log(result.affectedRows)
1Удалить таблицу
Вы можете удалить существующую таблицу с помощью оператора "DROP TABLE"Удаляем таблицу «клиенты»:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "DROP TABLE customers";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table deleted");
});
});
C:\Users\Your Name>node db_drop_table.jsЧто даст вам такой результат:
Table deletedУдалить, только если существует
Если таблица, которую вы хотите удалить, уже удалена или по какой-либо другой причине не существует, вы можете использовать ключевое слово IF EXISTS, чтобы избежать ошибки.Удалите таблицу «клиенты», если она существует:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "DROP TABLE IF EXISTS customers";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});
C:\Users\Your Name>node db_drop_table_if.jsЕсли таблица существует, результат будет выглядеть так:
JavaScript:
{
fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverstatus: 2,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0
}
JavaScript:
{
fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverstatus: 2,
warningCount: 1,
message: '',
protocol41: true,
changedRows: 0
}
Обновить таблицу
Вы можете обновить существующие записи в таблице с помощью оператора «UPDATE»Замените столбец адреса с «Valley 345» на «Canyon 123»:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Valley 345'";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result.affectedRows + " record(s) updated");
});
});
Сохраните приведенный выше код в файле с именем db_update.js и запустите этот файл:
C:\Users\Your Name>node db_update.jsЧто даст вам такой результат:
1 record(s) updatedОбъект результата
При выполнении запроса возвращается объект результата.Объект результата содержит информацию о том, как запрос повлиял на таблицу.
Объект результата, возвращенный из приведенного выше примера, выглядит так:
JavaScript:
{
fieldCount: 0,
affectedRows: 1,
insertId: 0,
serverStatus: 34,
warningCount: 0,
message: '(Rows matched: 1 Changed: 1 Warnings: 0',
protocol41: true,
changedRows: 1
}
Вернуть количество затронутых строк:
JavaScript:
console.log(result.affectedRows)
1Ограничьте результат
Вы можете ограничить количество записей, возвращаемых из запроса, используя оператор "LIMIT"Выберите 5 первых записей в таблице «клиенты»:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "SELECT * FROM customers LIMIT 5";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});
C:\Users\Your Name>node db_limit.jsЧто даст вам такой результат:
JSON:
[
{ id: 1, name: 'John', address: 'Highway 71'},
{ id: 2, name: 'Peter', address: 'Lowstreet 4'},
{ id: 3, name: 'Amy', address: 'Apple st 652'},
{ id: 4, name: 'Hannah', address: 'Mountain 21'},
{ id: 5, name: 'Michael', address: 'Valley 345'}
]
Начать с другой позиции
Если вы хотите вернуть пять записей, начиная с третьей записи, вы можете использовать ключевое слово «OFFSET»Начните с позиции 3 и верните следующие 5 записей:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "SELECT * FROM customers LIMIT 5 OFFSET 2";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});
Сохраните приведенный выше код в файле с именем db_offset.js и запустите файл:
C:\Users\Your Name>node db_offset.jsЧто даст вам такой результат:
JSON:
[
{ id: 3, name: 'Amy', address: 'Apple st 652'},
{ id: 4, name: 'Hannah', address: 'Mountain 21'},
{ id: 5, name: 'Michael', address: 'Valley 345'},
{ id: 6, name: 'Sandy', address: 'Ocean blvd 2'},
{ id: 7, name: 'Betty', address: 'Green Grass 1'}
]
Более короткий синтаксис
Вы также можете написать свой оператор SQL, например, «LIMIT 2, 5», который возвращает то же, что и в приведенном выше примере смещенияНачните с позиции 3 и верните следующие 5 записей:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "SELECT * FROM customers LIMIT 2, 5";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});
Присоединяйтесь к двум или более таблицам
Вы можете комбинировать строки из двух или более таблиц на основе связанного столбца между ними, используя оператор JOIN.Представьте, что у вас есть таблица "пользователи" и таблица "продукты"
пользователи:
JSON:
[
{ id: 1, name: 'John', favorite_product: 154},
{ id: 2, name: 'Peter', favorite_product: 154},
{ id: 3, name: 'Amy', favorite_product: 155},
{ id: 4, name: 'Hannah', favorite_product:},
{ id: 5, name: 'Michael', favorite_product:}
]
JSON:
[
{ id: 154, name: 'Chocolate Heaven' },
{ id: 155, name: 'Tasty Lemons' },
{ id: 156, name: 'Vanilla Dreams' }
]
Выберите записи с совпадением в обеих таблицах:
JavaScript:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
var sql = "SELECT users.name AS user, products.name AS favorite FROM users JOIN products ON users.favorite_product = products.id";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
});
Сохраните приведенный выше код в файле под названием db_join.js и запустите файл:
C:\Users\Your Name>node db_join.jsЧто даст вам такой результат:
JSON:
[
{ user: 'John', favorite: 'Chocolate Heaven' },
{ user: 'Peter', favorite: 'Chocolate Heaven' },
{ user: 'Amy', favorite: 'Tasty Lemons' }
]
Left Join
Если вы хотите вернуть всех пользователей, независимо от того, есть ли у них любимый продукт или нет, используйте оператор LEFT JOINВыберите всех пользователей и их любимый продукт:
SQL:
SELECT users.name AS user,
products.name AS favorite
FROM users
LEFT JOIN products ON users.favorite_product = products.id
JSON:
[
{ user: 'John', favorite: 'Chocolate Heaven' },
{ user: 'Peter', favorite: 'Chocolate Heaven' },
{ user: 'Amy', favorite: 'Tasty Lemons' },
{ user: 'Hannah', favorite: null },
{ user: 'Michael', favorite: null }
]
Right Join
Если вы хотите вернуть все продукты и пользователей, которые выбрали их в качестве избранных, даже если ни один пользователь не указал их в качестве избранных, используйте оператор RIGHT JOINВыберите все продукты и пользователя, которому они нравятся:
SQL:
SELECT users.name AS user,
products.name AS favorite
FROM users
RIGHT JOIN products ON users.favorite_product = products.id
JSON:
[
{ user: 'John', favorite: 'Chocolate Heaven' },
{ user: 'Peter', favorite: 'Chocolate Heaven' },
{ user: 'Amy', favorite: 'Tasty Lemons' },
{ user: null, favorite: 'Vanilla Dreams' }
]
Последнее редактирование:
