SELECT杂谈二

1 使用视图来简化查询

    mysql> SELECT

               > DATE_FORMAT (t, '%M %e, %Y' ) AS date_sent,

             > CONCAT ( srcuser,'@', srchost ) AS sender,

             > CONCAT ( dstuser,'@', dsthost ) AS recipient,

             > size FROM mail;

    当频繁使用类似上述查询时,需要每一次都在查询中重复写入类似的复杂结构的表达式,

    视图是一个虚拟的数据库表,它并不包含任何实际的数据,实际上,一个视图可以看做是一个特定的SELECT语句。

    mysql> CREATE VIEW mail_view AS

             > SELECT

             > DATE_FORMAT (t, '%M %e, %Y' ) AS date_sent,

             > CONCAT ( srcuser,'@', srchost ) AS sender,

             > CONCAT ( dstuser,'@', dsthost ) AS recipient,

             > size FROM mail;

    查询视图与查询其他普通数据库表是一样的:

    mysql> SELECT date_sent, sender, size FROM mail_view

     mysql> SELECT date_sent, sender, size FROM mail_view

             >  WHERE size>100000 ORDER BY size; 

 

2  多表查询(使用联合join,或者使用子查询)

    使用联合join:

    mysql> SELECT id, name, service, contact_name

             > FROM profile INNER JOIN profile_contact ON id = profile_id;

   以上查询语句中,From子句制定了要查询的表(profile表和profile_contact), ON子句制定了两个表的行的绑定规则。

   在显示的结果中,id列和name列来自profile表,而service和contact_name列来自profile_contact表,它们按照

   id = profile_id的规则绑定到一行。

   使用子查询:

   mysql> SELECT * FROM profile_contact

            > WHERE profile_id = (SELECT id FROM profile WHERE name = 'Mort');

 

3 从查询结果集中取出部分行

   mysql> SELECT * FROM profile LIMIT 5;     -------->取出头5行

   mysql> SELECT * FROM profile ORDER BY birth LlMIT 1;     -------->找到出生最早的人

   mysql> SELECT * FROM profile ORDER BY birth DESC LlMIT 1;     -------->找到出生最晚的人

   mysql> SELECT name, DATE_FORMAT(birth, '%m-%d') AS birthday

            >  FROM profile ORDER BY birthday LIMIT 1;     -------->找到出生月份和日期最早的人

   mysql> SELECT * FROM profile ORDER BY birth LIMIT 20, 20;     -------->找到排序后第20~39个人

  

4  关于ORDER BY和LIMIT的一些问题

   这两者的结合可以很方便的从查询结果中得到含有某个最大值或者最小值的n行记录,但并不能保证每一次这样的查询都是正确

   的,例如当所要查询的行中有重复或者相等的值时,解决办法:使用预查询来帮助确定LIMIT的参数值

   mysql> SELECT name, wins, FROM al_winner

            >  WHERE wins >=

            >      (SELECT wins FROM al_winner

            >       ORDER BY wins DESC, name

            >       LIMIT 3, 1)

            >  ORDER BY wins DESC, name;

   这样就避免了分割具有相同wins值的数据

   如果加入DISTINCT?

   mysql> SELECT name, wins, FROM al_winner

            >  WHERE wins >=

            >      (SELECT DISTINCT wins FROM al_winner

            >       ORDER BY wins DESC, name

            >       LIMIT 3, 1)

            >  ORDER BY wins DESC, name;

   则获得wins列中排名前四的(含相等)的队伍,注:和前一种区别在于wins的值

 

5 查询逆序的排列,结果按照升序输出

   mysql> SELECT * FROM

            > (SELECT name, birth FROM profile ORDER BY birth DESC LIMIT 4)  AS t

            >  ORDER BY birth;

   在查询语句中,FROM子句之后必须是表名,因此在上例中使用了AS t对子查询结果赋予别名,作为FROM的一个临时表名

 

 

 

 

【SCI一区论文复】基于SLSPC系列的高阶PT-WPT无线电能传输系统研究(Matlab代码实现)内容概要:本文围绕“基于SLSPC系列的高阶PT-WPT无线电能传输系统研究”展开,重点复现SCI一区论文中的核心技术,通过Matlab代码实现高阶无线电能传输系统的建模与仿真。研究聚焦SLSPC拓扑结构在恒压-恒流(CV/CC)输出特性方面的优势,深入分析系统的传输效率、耦合特性、频率分裂现象及参数敏感性,并探讨其在高功率、长距离无线充电场景中的应用潜力。文中详细给出了系统数学建模、参数设计、仿真验证等关键步骤,旨在帮助读者掌握先进无线电能传输技术的核心原理与实现方法。; 适合人群:具备一定电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事无线电能传输、新能源充电技术等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解SLSPC型无线电能传输系统的恒压恒流输出机理;②掌握高阶WPT系统的建模、仿真与性能分析方法;③复现SCI一区论文成果,为后续科研创新提供技术基础和代码参考;④应用于无线充电、电动汽车、植入式医疗设备等领域的系统设计与优化。; 阅读建议:建议读者结合Matlab代码逐段分析系统模型构建过程,重点关注谐振参数设计、传输特性仿真及效率优化策略,同时可拓展研究不同耦合条件下的系统行为,以深化对高阶WPT系统动态特性的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值