常用SQL语句及在node中使用MySQL
文章 1998 0 0 0
发布时间:2019年08月06日

概述

摘要:一些重要的SQL命令

名称 描述
SELECT 从数据库中提取数据
UPDATE 更新数据库中的数据
DELETE 从数据库中删除数据
INSERT INTO 向数据库中插入新数据
CREATE DATABAS 创建新数据库
ALTER DATABASE 修改数据库
CREATE TABLE 创建新表
ALTER TABLE 变更(改变)数据库表
DROP TABLE 删除表
CREATE INDEX 创建索引(搜索键)
DROP INDEX 删除索引

1.SELECT 语句用于从数据库中选取数据

语法:

SELECT column_name,column_name FROM table_name;

2.SQL SELECT DISTINCT 语句

在表中,一个列可能会包含多个重复值,有时希望仅仅列出不同(distinct)的值。

DISTINCT 关键词用于返回唯一不同的值。

语法:

SELECT DISTINCT column_name,column_name FROM table_name;

3.SQL WHERE 子句

语法:

SELECT column_name,column_name FROM table_name WHERE column_name operator value;
SELECT  FROM Websites WHERE id=1;

4.SQL AND & OR 运算符

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

5.AND 运算符实例

下面的 SQL 语句从 “Websites” 表中选取国家为 “CN” 且alexa排名大于 “50” 的所有网站

SELECT  FROM Websites WHERE country='CN' AND alexa > 50;

6.OR 运算符实例

下面的 SQL 语句从 “Websites” 表中选取国家为 “USA” 或者 “CN” 的所有客户:

SELECT  FROM Websites WHERE country='USA' OR country='CN';

7.结合 AND & OR

您也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式)。

下面的 SQL 语句从 “Websites” 表中选取 alexa 排名大于 “15” 且国家为 “CN” 或 “USA” 的所有网站:

SELECT  FROM WebsitesWHERE alexa > 15AND (country='CN' OR country='USA');

8.SQL ORDER BY 关键字

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。

ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用 DESC 关键字。

语法:

SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC;

9.ORDER BY 实例

SELECT  FROM WebsitesORDER BY age;

10.ORDER BY DESC 实例

下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “age” 列降序排序:

SELECT  FROM WebsitesORDER BY age DESC;

按价格(price)升序排列,如果价格相同,按销量(sales)降序排列

ORDER BY price ASC,sales DESC

11.ORDER BY 多列

下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “country” 和 “alexa” 列排序:

SELECT  FROM WebsitesORDER BY country,alexa;

12.SQL INSERT INTO

INSERT INTO 语句可以有两种编写形式。

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

语法:

INSERT INTO table_name VALUES (value1,value2,value3,…);

第二种形式需要指定列名及被插入的值:

语法:

INSERT INTO table_name (column1,column2,column3,…) VALUES (value1,value2,value3,…);

13.在指定的列插入数据

下面的 SQL 语句将插入一个新行,但是只在 “name”、”url” 和 “country” 列插入数据(id 字段会自动更新):

INSERT INTO Websites (name, url, country) VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND');

14.SQL UPDATE 语句

语法:

UPDATE table_name SET column1=value1,column2=value2,… WHERE some_column=some_value;

15.请注意 SQL UPDATE 语句中的 WHERE 子句

WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';

16.SQL DELETE 语句

DELETE 语句用于删除表中的行。

语法:

DELETE FROM table_name WHERE some_column=some_value;

17.请注意 SQL DELETE 语句中的 WHERE 子句

WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

DELETE FROM Websites WHERE name='百度' AND country='CN';

18.删除所有数据

您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:

DELETE FROM table_name; 或 DELETE  FROM table_name;

19.GROUP 聚类-合并相同的

统计每个班的人数

SELECT  FROM student_table GROUP BY class;

// GROUP BY class,以class为合并依据,单独用只是个去重的作用

SELECT class FROM student_table GROUP BY class;

//只是单独列出有哪些班级

SELECT class,COUNT(class) FROM student_table GROUP BY class;

//每个班级的平均分

SELECT class,AVG(score) FROM student_table GROUP BY class;
SELECT class,AVG(score),MAX(score),MIN(SCORE),AVG(age) FROM student_table GROUP BY class;

20.SUM(price)

//总和

LIMIT限制输出

SELECT  form 表名 WHERE 条件 limit 5,10; //检索6-15条数据
SELECT  form 表名 WHERE 条件 limit 5,-1; //检索6到最后一条数据
SELECT  form 表名 WHERE 条件 limit 5; //检索前5条数据

如分页:

LIMIT 10; //前10条

LIMIT 5,8; //从5开始,要8个

第1页 0,20 0-19

第2页 20,20 20-39

第3页 40,20

第n页 (n-1)20,20

子句间的顺序

WHERE GROUP ORDER LIMIT

筛选 合并 排序 限制

在node中使用MySQL

const mysql=require('mysql');
// 链接数据库

// createConnection(那台数据库,用户名,密码,库)
var db=mysql.createConnection({
    host:'localhost',
    port:9999,
    user:'root',
    password:'root',
    database:'student'
});
// console.log(db)

// 查询

db.query('SELECT
         FROM user_table',(err,data)=>{
         if(err) console.log(err);
         else
         console.log(data);
         console.log(JSON.stringify(data));
         })

//按条件查询

db.query('SELECT name,age FROM user_table')

数据库连接建议

如果每个请求都链接一次数据库也不好。

如果只连接一个也不好,如果其中一个没有查完,后面的就得等着。

建议,保持20个左右的连接:

// 连接池

const db=mysql.createPool({
                          host:'localhost',
                          port:9999,
                          user:'root',
                          password:'root',
                          database:'student'
                          });

//错误时加一个状态码

if(err){
    res.status(500).send('database error').end();
}
评论专区