2022.02.16

1.176. 第二高的薪水
编写一个 SQL 查询,获取并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null 。

Create table If Not Exists Employee (id int, salary int)
Truncate table Employee
insert into Employee (id, salary) values ('1', '100')
insert into Employee (id, salary) values ('2', '200')
insert into Employee (id, salary) values ('3', '300')


要点1:如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中,否则会出现错误.

SELECT DISTINCT Company FROM Orders order by Num ASC是不能正确执行的;SELECT DISTINCT Company,Num FROM Orders order by Num ASC可以正常执行。```

要点2:LIMIT与OFFSET区别

① select * from Employee limit 2,1;

② select * from Employee limit 2 offset 1;
1.数据库数据计算是从0开始的

2.offset X是跳过X个数据,limit Y是选取Y个数据

3.limit  X,Y  中X表示跳过X个数据,读取Y个数据

这两个都是能完成需要,但是他们之间是有区别的:

①是从数据库中第三条开始查询,取一条数据,即第三条数据读取,一二条跳过

②是从数据库中的第二条数据开始查询两条数据,即第二条和第三条。

解题:SELECT IFNULL( (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1), NULL) AS SecondHighestSalary
2.
1–VSCode开启调试(启动服务器);此时app.listen()方法调用完成,绑定主机和端口。
2–在postman里发送请求,Express接收到参数
3–在app.get()回调函数中查看res是否接收到发送的请求
4–此时得到的是一个Json数据{code:‘688509’},因为在数据库sql查询,?与[‘68809’]一一对应,所以传递给数据库查询的参数应该是res.query.code读取的值。
5–Promise回调函数查询到的Json数据转为字符串,然后返回给response。
6–res.send(结果)

1--app.listen()
app.listen()函数用于绑定和侦听指定主机和端口上的连接。此方法与Node的http.Server.listen()方法相同。
express()返回的应用程序实际上是JavaScript函数,旨在将其作为回调传递给Node的HTTP服务器以处理请求。这使为应用程序的HTTP和HTTPS版本提供相同的代码库变得容易,因为该应用程序不继承自这些代码(只是一个回调)。

//express_demo.js 文件
import express from 'express';
 let app = express();
   let server = app.listen(ServerCfgService.PORT, function () {
      var host = server.address().address
      var port = server.address().port
      console.log("url http://127.0.0.1:" + port + "/api/helloworld");
    })

  
app.listen(PORT, function(err){ 
    if (err) console.log("Error in server setup") 
    console.log("Server listening on Port", PORT); 
})
2--app.get()
  app.get('/api/helloworld', async function (req, res) {
      let endSendMessage = await EastService.getInstance().importToMySQL(req.query.code);

      res.send(endSendMessage);

    })
5--sql查询
 public async importToMySQL(code) {

        let connection = await ConnectionDao.getInstance().getConnection();

        let sqlSelect = `select * from stock_score where code=? `;
        let sqlData = [code];

        let dateQueryResults = <Promise<string>>new Promise(async function (resolve, reject) {
            await connection.query(sqlSelect, sqlData, async function (error, results, fields) {
                if (error)
                    throw error;
                let testStr = JSON.stringify(results);

                await connection.commit();
                resolve(testStr);
            });

        });

        return dateQueryResults;

    }

3.开启调试和打断点不一样,打断点会停留在断点处,程序并不往下执行。
4.插入多个 数据时req获取参数仍然是req.query.code,req.query.name,req.query.date,req.query.count,传多个参数用逗号隔开,接收参数的函数也要接收4个参数,一一对应。
5.引入 express 模块-菜鸟教程

//express_demo.js 文件
var express = require('express');
var app = express();
 
app.get('/', function (req, res) {
   res.send('Hello World');
})
 
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("应用实例,访问地址为 http://%s:%s", host, port)
 
})
$ node express_demo.js 
应用实例,访问地址为 http://0.0.0.0:8081

6.Express 应用使用回调函数的参数: request 和 response 对象来处理请求和响应的数据。

Request 对象

request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性。
常见属性:
req.app:当callback为外部文件时,用req.app访问express的实例
req.baseUrl:获取路由当前安装的URL路径
req.body / req.cookies:获得「请求主体」/ Cookies
req.fresh / req.stale:判断请求是否还「新鲜」
req.hostname / req.ip:获取主机名和IP地址
req.originalUrl:获取原始请求URL
req.params:获取路由的parameters
req.path:获取请求路径
req.protocol:获取协议类型
req.query:获取URL的查询参数串
req.route:获取当前匹配的路由
req.subdomains:获取子域名
req.accepts():检查可接受的请求的文档类型
req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages:返回指定字符集的第一个可接受字符编码
req.get():获取指定的HTTP请求头
req.is():判断请求头Content-Type的MIME类型

Response 对象

response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据。
常见属性:
res.app:同req.app一样
res.append():追加指定HTTP头
res.set()在res.append()后将重置之前设置的头
res.cookie(name,value [,option]):设置Cookie
opition: domain / expires / httpOnly / maxAge / path / secure / signed
res.clearCookie():清除Cookie
res.download():传送指定路径的文件
res.get():返回指定的HTTP头
res.json():传送JSON响应
res.jsonp():传送JSONP响应
res.location():只设置响应的Location HTTP头,不设置状态码或者close response
res.redirect():设置响应的Location HTTP头,并且设置状态码302
res.render(view,[locals],callback):渲染一个view,同时向callback传递渲染后的字符串,如果在渲染过程中有错误发生next(err)将会被自动调用。callback将会被传入一个可能发生的错误以及渲染后的页面,这样就不会自动输出了。
res.send():传送HTTP响应
res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type
res.set():设置HTTP头,传入object可以一次设置多个头
res.status():设置HTTP状态码
res.type():设置Content-Type的MIME类型

路由决定了由谁(指定脚本)去响应客户端请求,在HTTP请求中,我们可以通过路由提取出请求的URL以及GET/POST参数。

var express = require('express');
var app = express();
 
app.use('/public', express.static('public'));
 
app.get('/index.html', function (req, res) {
   res.sendFile( __dirname + "/" + "index.html" );
})
 
app.get('/process_get', function (req, res) {
 
   // 输出 JSON 格式
   var response = {
       "first_name":req.query.first_name,
       "last_name":req.query.last_name
   };
   console.log(response);
   res.end(JSON.stringify(response));
})
 
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("应用实例,访问地址为 http://%s:%s", host, port)
 
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
| 序号 | 日期 | 说明 | | ---- | ----------- | ---- | | 1 | 2022.12.01 | | | 2 | 2022.12.02 | | | 3 | 2022.12.03 | | | 4 | 2022.12.04 | | | 5 | 2022.12.05 | | | 6 | 2022.12.06 | | | 7 | 2022.12.07 | | | 8 | 2022.12.08 | | | 9 | 2022.12.09 | | | 10 | 2022.12.10 | | | 11 | 2022.12.11 | | | 12 | 2022.12.12 | | | 13 | 2022.12.13 | | | 14 | 2022.12.14 | | | 15 | 2022.12.15 | | | 16 | 2022.12.16 | | | 17 | 2022.12.17 | | | 18 | 2022.12.18 | | | 19 | 2022.12.19 | | | 20 | 2022.12.20 | | | 21 | 2022.12.21 | | | 22 | 2022.12.22 | | | 23 | 2022.12.23 | | | 24 | 2022.12.24 | | | 25 | 2022.12.25 | | | 26 | 2022.12.26 | | | 27 | 2022.12.27 | | | 28 | 2022.12.28 | | | 29 | 2022.12.29 | | | 30 | 2022.12.30 | | | 31 | 2022.12.31 | | | 32 | 2023.01.01 | | | 33 | 2023.01.02 | | | 34 | 2023.01.03 | | | 35 | 2023.01.04 | | | 36 | 2023.01.05 | | | 37 | 2023.01.06 | | | 38 | 2023.01.07 | | | 39 | 2023.01.08 | | | 40 | 2023.01.09 | | | 41 | 2023.01.10 | | | 42 | 2023.01.11 | | | 43 | 2023.01.12 | | | 44 | 2023.01.13 | | | 45 | 2023.01.14 | | | 46 | 2023.01.15 | | | 47 | 2023.01.16 | | | 48 | 2023.01.17 | | | 49 | 2023.01.18 | | | 50 | 2023.01.19 | | | 51 | 2023.01.20 | | | 52 | 2023.01.21 | | | 53 | 2023.01.22 | | | 54 | 2023.01.23 | | | 55 | 2023.01.24 | | | 56 | 2023.01.25 | | | 57 | 2023.01.26 | | | 58 | 2023.01.27 | | | 59 | 2023.01.28 | | | 60 | 2023.01.29 | | | 61 | 2023.01.30 | | | 62 | 2023.01.31 | | | 63 | 2023.02.01 | | | 64 | 2023.02.02 | | | 65 | 2023.02.03 | | | 66 | 2023.02.04 | | | 67 | 2023.02.05 | | | 68 | 2023.02.06 | | | 69 | 2023.02.07 | | | 70 | 2023.02.08 | | | 71 | 2023.02.09 | | | 72 | 2023.02.10 | | | 73 | 2023.02.11 | | | 74 | 2023.02.12 | | | 75 | 2023.02.13 | | | 76 | 2023.02.14 | | | 77 | 2023.02.15 | | | 78 | 2023.02.16 | | | 79 | 2023.02.17 | | | 80 | 2023.02.18 | | | 81 | 2023.02.19 | | | 82 | 2023.02.20 | | | 83 | 2023.02.21 | | | 84 | 2023.02.22 | | | 85 | 2023.02.23 | | | 86 | 2023.02.24 | | | 87 | 2023.02.25 | | | 88 | 2023.02.26 | | | 89 | 2023.02.27 | | | 90 | 2023.02.28 | | | 91 | 2023.03.01 | | | 92 | 2023.03.02 | | | 93 | 2023.03.03 | | | 94 | 2023.03.04 | | | 95 | 2023.03.05 | | | 96 | 2023.03.06 | | | 97 | 2023.03.07 | | | 98 | 2023.03.08 | | | 99 | 2023.03.09 | | | 100 | 2023.03.10 | | | 101 | 2023.03.11 | | | 102 | 2023.03.12 | | | 103 | 2023.03.13 | | | 104 | 2023.03.14 | | | 105 | 2023.03.15 | | | 106 | 2023.03.16 | | | 107 | 2023.03.17 | | | 108 | 2023.03.18 | | | 109 | 2023.03.19 | | | 110 | 2023.03.20 | | | 111 | 2023.03.21 | | | 112 | 2023.03.22 | | | 113 | 2023.03.23 | | | 114 | 2023.03.24 | | | 115 | 2023.03.25 | |

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值