50 mysql数据库其它子句

 

50 mysql数据库其它子句

其它子句

group by

分组查询、聚合查询。

SELECT *[,聚合函数] FROM 表名 [GROUP BY 字段]

count(*):总数量

min(字段名)

max(字段名)

avg(字段名)

-- 查询男生和女生分别多少人
-- count(*)
?
SELECT *,count(*) FROM student GROUP BY sex
?
-- 字段别名 AS 关键字
SELECT *,count(*) AS total FROM student GROUP BY sex
-- student.total
?
-- min(字段名) max(字段名) avg(字段名)
?
SELECT *,MAX(age) FROM student GROUP BY sex
SELECT *,MIN(age) FROM student GROUP BY sex
SELECT *,AVG(age) FROM student GROUP BY sex

limit

分页的时候必用。

SELECT * FROM 表名 [ LIMIT [start,]size ]

size:取几条

start:从哪几个位置开始取

示例:

?
SELECT * FROM student LIMIT 2 -- 按照顺序取2条
SELECT * FROM student LIMIT 2,3 -- 从索引为2开始取3条

 

分页原理

size: 每页取几个,比如6

page: 当前的页码,比如1。默认从第1页开始

start:未知数?

页码 start size
1 0 6
2 6 6
3 12 6
4 18 6
... (page-1)*size ...
-- 每页3条
SELECT * FROM student LIMIT 0,3 -- 第1页
SELECT * FROM student LIMIT 3,3 -- 第2页
SELECT * FROM student LIMIT 6,3 -- 第3页

join连表查询

SELECT * FROM 表1 JOIN 表2 ON 连接条件 : 全连接。 只有on后面的条件成立才会连接。
SELECT * FROM 表1 LEFT JOIN 表2 ON 连接条件 :左连接 以左表为基准,左表的数据都会显示
SELECT * FROM 表1 RIGHT JOIN 表2 ON 连接条件 :右连接 以右表为基准,右表的数据都会显示

应用在哪里?

表与表之间是有关系的。学生的对应老师是谁。老师下有哪些学生。

 

示例

1、学生的对应老师是谁

SELECT * FROM student JOIN teacher ON tidcard = idcard
-- Column ‘idcard‘ in on clause is ambiguous 这是一个错误的案例
SELECT * FROM student AS s JOIN teacher AS t ON s.tidcard = t.idcard
SELECT * FROM student JOIN teacher ON student.tidcard = teacher.idcard

2、老师下都有哪些学生

以老师为主,进行和学生连表

SELECT * FROM student RIGHT JOIN teacher ON student.tidcard = teacher.idcard

 

其它补充

ID不连续

注意表名替换

ALTER TABLE teacher DROP id;
ALTER TABLE teacher ADD id int NOT NULL FIRST;
ALTER TABLE teacher MODIFY COLUMN id int NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id);

 

完整select语法

SELECT 
字段名[ 表名.字段名 | 表别名.字段名 | 字段名 AS 字段别名 ] [...]
FROM table_name[as table_alias]
[JOIN table_name2 ON 条件]-- 联合查询
[WHERE....]-- 指定结果须满足的条件
[GROUP BY....]-- 指定结果按照那几个字段来分组
[ORDER BY....]-- 指定查询一个记录按一个或者多个排序
[LIMIT 0,3]-- 指定查询记录‘0’为起始位置,‘3’为末尾位置
JWGOL

示例:

SELECT * FROM student
SELECT uname AS name,age,sex FROM student
SELECT * FROM student WHERE ID > 2
SELECT *,COUNT(*) FROM student WHERE ID > 2 GROUP BY grade

SELECT *,COUNT(*) FROM student WHERE ID > 2 GROUP BY grade ORDER BY age DESC

SELECT *,COUNT(*) FROM student WHERE ID > 2 GROUP BY grade ORDER BY age DESC LIMIT 2
SELECT *,COUNT(*) FROM student WHERE ID > 2 GROUP BY grade ORDER BY age DESC LIMIT 1,2


SELECT *,COUNT(*) FROM student JOIN teacher ON student.tidcard = teacher.idcard WHERE student.id > 2 GROUP BY grade ORDER BY student.age DESC LIMIT 1,2

 

Node操作Mysql

mysql模块

操作流程

1、下载模块

https://www.npmjs.com/package/mysql

npm i mysql	

2、在后端js文件中引入mysql

const mysql = require(‘mysql‘)

3、先创建mysql数据库的配置连接

let connectObj = mysql.createConnection({
host:‘主机名‘,
user:‘用户名‘,
password:‘密码‘
port:‘端口号‘,
database:‘要操作哪个数据库‘
})

4、去连接

connectObj.connect()

5、使用connectObj.query

使用query方法执行sql语句。

let sqlStr = ‘SELECT * FROM student WHERE id=3‘

//connectObj.query 方法就是要标准的sql语句
connectObj.query( sqlStr,(err,results)=>{
console.log( results )
} )

关于query方法

connectObj.query( sqlStr,callback )

callback说明:

它是回调函数。它有两个参数。

如果执行的select语句,那么callback的第2个参数才有效 ( 返回的是select查询的结果 )

select 返回的永远是一个数组

如果是delete 、insert into 、update。那么callback只有第1个参数。

如果是两个参数还是1个参数,第1个参数永远是错误捕获 。

 

封装mysql的query函数

把异步变同步。

Promise + callback: 把callback封装到Pormise中。

只要是回调函数都可以用Promise进行封装。然后结合async、await。

 


$.ajax({
success(){
resolve()
}
})

connectObj.query( sqlStr,(err,results)=>{
console.log( results )
resolve()
} )

//promise封装
function Query( str=‘‘ ){

return new Promise( (resolve,reject)=>{

connectObj.query( str,(err,result)=>{
//resolve/reject
resolve( [err,result] )
//无论sql语句执行成功与否。都传递一个数组
//数组第1项永远是错误信息。如果为null则没有问题
} )

} )

}


async function a(){
let result = await Query()
}

总结:Promise是解决异步回调了。只要是回调函数都可以用Promise进行封装。然后结合async、await。

 

Node+Express+Mysql+Ejs

 

 

RESTful api规范

前言:使用Express开发可以返回html、css、img等这类的数据。 也可以返回json数据: 只提供json数据的Express服务指的就是接口开发 ,这些数据的返回和之前所讲述http协议有着密不可分的关系,只要正确定义路由、使用合理的请求就能拿到结果,但一个好的接口开发工程师应该遵守RESTful API规范。

简介:RESTful规范,是目前一种比较流行的互联网软件设计规范。

优点:使开发者在进行独立开发或协作开发更能标准,以达到行业的统一。它结构清晰、符合标准、易于理解、扩展方便,越来越多的开发者遵守这种规范。

50 mysql数据库其它子句

上一篇:Oracle复制表结构且不复制数据,进行列的移位(20210507)


下一篇:InnoDB锁-共享锁、排他锁与意向锁