一、下载mysql数据库:
npm i mysql --save-dev
二、使用mysql连接数据库:
//1加载mysql数据库
const mysql = require("mysql");
let config = {
host:"localhost",
port:3306,
user:"root",
database:"democurd", //数据库名
password:"root"
}
let connection = mysql.createConnection(config);
// 2.监听是否连接成功
connection.connect(err=>{
console.log(err)
})
三、查询:
查找所有字段:
SELECT * FROM 表名;
或者是输入所有字段的属性名,如果需要改变字段显示的顺序,只需要调整select关键字的顺序即可;
查询指定字段:
select 字段,字段 from 表名;
条件查询:
1.单条件数据查询:
select 属性 from 数据表名where 查询条件;
2.多条件数据查询:
select 字段 from 数据表 where 多个条件;
select 字段 from 数据表 where class='1'&&score>60;
3.BETWEEN AND关键字范围查询:
SELECT 字段 FROM 数据表名 WHERE 查询字段 BETWEEN 60 AND 100;
4.查询不符合条件的内容:
SELECT 字段 FROM 数据表名 WHERE 查询字段 NOT BETWEEN 60 AND 100;
5.带IN关键字查询:
1)在集合中数据记录查询:
查询具体的内容:例学生成绩为90,60的返回name;
select 属性名 from 数据表 where 条件1 or 条件2;
select name from student_table where score=90 or score=60;
select 属性 from 表 where 属性 IN (条件1,条件2);
select name from student_table where score IN (90,60);
2)不在集合中数据记录查询:
例:成绩不在90,60的其他学生
select 属性from 数据表 where 属性NOT IN (条件1,条件2....);
select name from student_table where score NOT IN (90,60);
6.带like关键字的模糊查询:
1) 带有“%”通配符的查询:
例:查找90-99分的学生:
SELECT 属性FROM 数据表 WHERE 属性LIKE '关键字%';
SELECT name FROM student_table WHERE score LIKE '9%';
例:查找除90-99分的学生:
SELECT name FROM student_table WHERE NOT score LIKE '9%';
2) 带有”_”通配符的查询:
例:成绩中第二位为9的学生:
SELECT name FROM student_table WHERE score LIKE '_9%';
例:成绩中第二位除了为9的学生:
SELECT name FROM student_table WHERE NOT score LIKE '_9%';
7.排序:
在多数情况下,查找到的结果是默认顺序,我们可以在查询时给其进行排序:
通过ORDER BY 来实现:
SELECT 属性 FROM 表名 WHERE 属性ORDER BY 条件1 [ASC|DESC];
ASC标识按升序的顺序进行排序,DESC表示按照降序的顺序进行排序;
1) 按照单字段排序:
例:学生成绩升序进行排序;
SELECT * FROM student_table ORDER BY score ASC;
由于mysql 关键字ORDER BY 默认就是升序排序,可以修改成:
SELECT * FROM student_table ORDER BY score;
例:学生成绩升序进行降序序;
SELECT * FROM student_table ORDER BY score DESC;
2) 多字段排序:
例:先班级按升序排序,成绩按降序排序:
SELECT * FROM student_table ORDER BY class ASC,score DESC;
7.限制数据记录查询数量:
使用关键字LIMIT来实现:
SELECT 属性,属性... FROM 表名 WHERE 属性 LIMIT 起始条件,显示的行数
1)不指定初始位置:
1.1)显示记录数小于查询结果:
例:查找成绩小于60 的学生显示两条:
SELECT * FROM student_table WHERE score<60 LIMIT 2;
1.2)显示记录数大于查询结果
例:查找成绩小于60的学生显示结果10条;但是不够10条就显示出仅有的条数;
SELECT * FROM student_table WHERE score<60 LIMIT 10;
2)指定初始位置:
2.1)LIMIT关键字还经常与ORDER BY关键字一起使用,即先对查询结果进行排序,然后显示其中部分数据记录;
寻找大于60分,按照班级排序,从0开始显示5条;
SELECT * FROM student_table WHERE score>60 ORDER BY class LIMIT 0,5;
实现第二次操作,从第6条记录开始显示,共显示5条记录;
SELECT * FROM student_table WHERE score>60 ORDER BY class LIMIT 5,5;
8.统计函数和分组数据记录查询:
统计函数分别为:
1)COUNT():实现统计表中记录的平均值;
2)AVG():实现计算字段值的平均值;
3)SUM():实现计算字段值的总和;
4)MAX():实现查询字段值的最大值;
5)MIN():现在查询字段值的最小值;
8.1)统计数据记录条数:
统计数据表中的总数据:不管是不是空值都会返回
SELECT COUNT(*) number FROM student_table;
对指定字段的统计:会忽略控制
SELECT COUNT(score) number FROM student_table;
8.2)统计计算平均值:
算所有成绩的平均数:
SELECT AVG(score) average FROM student_table;
算所有不小60的成绩的平均值:
SELECT AVG(score) average FROM student_table WHERE NOT score<60;
8.3)统计计算求和:
计算成绩的总和:
SELECT SUM(score) sumvalue FROM student_table;
SELECT SUM(score) FROM student_table;
8.4)统计计算最大值和最小值:
查询成绩的最高成绩和最少成绩:
SELECT MAX(score) maxval,MIN(score) minval FROM student_table;
8.5)可以几个函数同时使用:
SELECT AVG(score),SUM(score), MAX(score),MIN(score) FROM student_table;
8.6)分组查询:
例:以班级为关键字进行查询:
SELECT * FROM student_table GROUP BY class;
8.7)分组数据查询-实现统计功能分组查询
想显示每个分组中的字段,可以通过函数GROUP_CONCAT()来实现,该函数可以实现显示每个分组中的指定字段值
例:按班级分组,并且将每个班级的name返回
SELECT class,GROUP_CONCAT(name) FROM student_table GROUP BY class;
例:按班级分组,并且将每个班级的name,并且返回对应的数量;
SELECT class,GROUP_CONCAT(name) name,COUNT(name) number FROM student_table GROUP BY class;
8.8)实现句子限定分组:
例:按班级分类,并且求出平均成绩:
SELECT class,AVG(score) FROM student_table GROUP BY class;
四、增:
使用INSERT INTO 语句来实现插入数据记录
1.插入完整数据记录:
INSERT INTO 表名(属性1,属性2,属性3) VALUES (值1,值2,值3);
INSERT INTO student_table(class,name,score) VALUES ('3','憨憨',21);
INSERT INTO student_table VALUES (12,'3','憨憨',21);
注意:第二种写法,要按照数据表的顺序来写;
2.插入指定字段:
INSERT INTO student_table(class,name) VALUES(3,'lucky');
3.插入多条数据:
INSERT INTO 表名 VALUES (值1,值2,值3,值4),(值1,值2,值3,值4),(值1,值2,值3,值4);
INSERT INTO student_table VALUES (15,2,'a1',93),(16,1,'a2',78),(17,3,'b1',56);
INSERT INTO student_table(class,name) VALUES (2,'a11'),(1,'a21'),(3,'b11');
五、改(更新):
通过UPDATE来实现:
1.更新指定数据记录:
例:将a1的成绩改成66;
UPDATE student_table SET score=66 WHERE name="a1";
2.更新所有数据记录:
例:成绩小于60,把名字改为不及格;
UPDATE 数据表 SET 被修改属性=值 WHERE 修改条件
UPDATE student_table SET name='及格' WHERE score>60;
1.删除指定数据记录:
例:删除成绩为56的学生:
DELETE FROM 表名 WHERE 条件;
DELETE FROM student_table WHERE score=56;
2.删除所有数据记录:
例:删除成绩为60以下的学生;
DELETE FROM student_table WHERE score<60;
3.删除表中所有数据:
DELETE FROM student_table;
表连接分为内连接和外连接,它们之间的最主要区别是:内连接仅选出两张表中互相匹配的记录,而外连 接会选出其他不匹配的记录。我们常用的是内连接。
外连接有分为左连接和右连接,具体定义如下: 左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录 右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
内连接查询:
1) 两个数据表查询:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号;
例子:根据member中uid获取购物车对应的信息:
通过sql语句INNER JOIN...ON来实现;
SELECT * FROM shopcar INNER JOIN member ON shopcar.uid=member.uid;
INNER JOIN 连接三个数据表的用法:
SELECT * FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号
INNER JOIN 连接四个数据表的用法:
SELECT * FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号)
INNER JOIN 表4 ON Member.字段号=表4.字段号
INNER JOIN 连接五个数据表的用法:
SELECT * FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号)
INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表5 ON Member.字段号=表5.字段号。