mysql sql高级应用程序_mysql-sql高级应用

sql语言进阶

典型操作order by

- select * from play_list order bycreatetime;- select * from play_list order by bookedcount desc,createtime asc;order by语句用于根据指定的列对结果集进行排序order by语句默认按照升序对记录排序,使用desc则降序排序order by也可以多个字段排序,而desc只作用于一个字段;distinct

select distinct userid fromplay_list;select distinct userid,play_name fromplay_list;

(userid,play_named都相同时去重)distinct用于去重,可以返回多列的唯一组合;distinct在后台做排序,所以很消耗CUP的;group by having场景:统计云音乐创建歌单的用户列表和每人创建歌单的数量

mysql> select userid,count(*) AS play_num from play_list group by userid having count(*)>=2;

分组关键字userid,需要在查询中出现,且一般查询分组关键字后要加聚合函数;like

select * from play_list where play_name like ‘%男孩%‘;

通配符

描述%代替一个或多个字符

_

替代单个字符[charlist]中括号中的任何单一字符[^charlist]或者[!charlist]不在中括号中的任何单一字符

大表慎用like;

除了%号在最右边以外,会对表中所有记录进行查询匹配;

limit offset

场景4:查询一个月内创建的歌单(从第6行开始显示10条记录)select * from play_list where (createtime between 1427701323 and 1430383307) limit 10 offset 6注意:offset 后面的值不要太大,假设offset1000,那它会扫描前1000条记录,这样IO开销会很大case when

case when 实现类似编程语言的 if else功能,可以对SQL的输出结果进行选择判断;

场景5:对于未录入的歌单(trackcount= null),输出结果时歌曲数返回0

mysql> select play_name,case when trackcount is null then 0 else trackcount end fromplay_list;

连接-join用一个SQL 语句把多个表中相互关联的数据查询出来;

场景6:查询收藏“老男孩”歌单的用户列表

mysql> SELECT play_fav.userid FROM play_fav INNER JOIN play_list ON play_fav.play_id = play_list.id where play_list.play_name = ‘老男孩‘;

另一种写法:

mysql> select f.userid from play_list lst,play_fav f where lst.id = f.play_id and lst.play_name = ‘老男孩‘子查询及问题

子查询的写法:select userid from play_fav where play_id=(select id from play_list where play_name = ‘老男孩‘);

别名 可以不用使用AS 关键字,直接空格加别名就可以了;

子查询在性能上有一定劣势,不利于mysql性能优化器进行优化;

因为内层表和驱动表用户自己定死了,而联结的驱动表和内层表 性能优化器 会根据实际情况 来定;

子查询为什么不利于优化:

联结是嵌套循环查询实现;

如select* from play_list,play_fav where play_list.id =play_fav.play_id;

play_list驱动表(where等号左边);内层表play_fav(where等号右边);

遍历去东北play_list.id,找到一个id后再去play_fav.play_id中找;依次循环下去;

内层表此时可以查询一次或者几次索引,便可以得到;

所以基本的优化就是将表量比较小的作为驱动表,这样减少了循环的次数;union作用:把不同表中相同的字段聚合在一个结果集中返回给用户

场景8:老板想看创建和收藏歌单的所有用户,查询play_list和play_fav两表中所有的userid;

mysql> select userid fromplay_list-> union

-> select userid fromplay_fav;

默认的union 会对结果集进行去重处理,不想去重使用union all;

DML进阶语法

多值插入:insert into table values(.....),(.....)

覆盖插入:replace into table values(...)

忽略插入:insert ignore into table values(...)

查询插入:insert into table_a select * fromtable_b

多值插入:减少数据库访问次数,提高效率;

覆盖插入,忽略插入:简化业务逻辑的判断;避免主键重复;

查询插入:导表结构中;

insert主键重复则update:insert into table tb1 values(id,col1,col2)on duplicate key update col2=....;

mysql> insert into a values(1,100) on duplicate key update age=100;

如果id=1存在,则键age 更改为100;

注意得是主键噢,如何表中没有设置主键,则会新增加一条记录;

而给表a增加主键则是:

mysql> alter table order add primary key(id);

连表update

用B表中的age 更新到 A 表中的age :

复制代码

mysql> select * froma;+----+------+

| id | age |

+----+------+

| 1 | 100 |

| 2 | 34 |

| 3 | 23 |

| 4 | 29 |

+----+------+

mysql> select * fromb;+------+------+------+

| id | name | age |

+------+------+------+

| 1 | pw | 20 |

| 2 | ljb | 30 |

+------+------+------+

mysql> update a,b set a.age=b.age where a.id =b.id;

mysql> select * froma;+----+------+

| id | age |

+----+------+

| 1 | 20 |

| 2 | 30 |

| 3 | 23 |

| 4 | 29 |

+----+------+

复制代码

连表delete

用B表中的条件去删除A表中数据;

复制代码

mysql> select * froma;+----+------+

| id | age |

+----+------+

| 1 | 20 |

| 2 | 30 |

| 3 | 23 |

| 4 | 29 |

+----+------+

mysql> select * fromb;+------+------+------+

| id | name | age |

+------+------+------+

| 1 | pw | 20 |

| 2 | ljb | 30 |

+------+------+------+

mysql> delete a from a,b where a.id=b.id and b.name=‘pw‘;

mysql> select * froma;+----+------+

| id | age |

+----+------+

| 2 | 30 |

| 3 | 23 |

| 4 | 29 |

+----+------+

复制代码

删除语法:DELETE FROMCustomersWHERE cust_id = ‘1000000006‘;

连表在delete之后还要将需要删除的表放在delete后面;

内置函数

目标:掌握常用的mysql聚合函数,预定义函数

在SQL查询语句中运用上述函数结构groupby,orderby等语法完成各种统计功能

聚合函数

聚合函数面向一组数据,对数据进行聚合运算后返回单一的值

mysql聚合函数基本语法:select function(列) from表

常用聚合函数:

场景:查询播放次数最多的歌曲

复制代码

mysql> select song_name,max(playcount) from song_list; //错误查法

#selectsong_name,没有对应 playcount;

#注意聚合函数是对返回列来做处理的,此中放回列是所有歌曲;

mysql> select song_name,playcount from song_list order by playcount desc limit1;//正确

子查询方法:select song_name from song_list where playcount=(select max(playcount) fromsong_list);

复制代码

场景:显示每张专辑的歌曲列表。例如:

复制代码

mysql> select album,group_concat(song_name) from song_list group byalbum;+------------------+-------------------------------------------------+

| album | group_concat(song_name) |

+------------------+-------------------------------------------------+

| 1701 | 大象,定西 |

| Straight Shooter | Good Lovin‘Gone Bad,Weep No More,Shooting Star |

| 作品李宗盛 | 风柜来的人 |

| 红雪莲 | 红雪莲 |

+------------------+-------------------------------------------------+

复制代码

group_concat 连接的最长字符是1024,可以通过参数调整;

使用聚合函数做数据库行列转换:

预定义函数:

预定义函数面向单一值数据,返回一对一的处理结果(聚合函数可以理解成多对一)

预定义函数基本语法:select function(列) from 表;select * from 表 where 列 = function(value)

时间处理函数:

总结

order by

distinct

limit offset:

case when then else end

连接-join两种写法

子查询为什么不利于优化:优化器不能改变,驱动表,内层表;从而不能优化;驱动表一般表量较小,因其需要全表id;内层表,仅需要查找一个或几个索引;这就是jion后优化器工作

union:把不同表中相同字段聚合在一个结果集中

连表update,根据B表age值更新A表age:update a,b set a.age=b.age where a.id = b.id;

连表delete,根据B表name删除A表的数据:delete a from a,b where a.id=b.id and b.name=‘pw‘;

聚合函数:AVG(),COUNT(),COUNT(DISTNCT),MAX(),MIN(),SUM()常与 group by,order by连用;

group_concat()mysql特有

预定义函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML+CSS+JS实现 ❤️个人相册封面卡片❤️

效果演示: 代码目录: 主要代码实现: CSS样式: charset "utf-8"; import url("https://s2.pstatp.com/cdn/expire-1-M/font-awesome/4.7.0/css/font-awesome.min.css"); body {background-color: #1F1F1F;o…

python隐藏启动台_如何在Python中启动后台进程?

如何在Python中启动后台进程?我正在尝试将shell脚本移植到更易读的python版本。 原始shell脚本在后台使用“&”启动多个进程(实用程序,监视器等)。 如何在python中实现相同的效果? 我希望这些进程不会在python脚本完成时死掉。…

HTML+CSS+JS实现 ❤️swiper倾斜图片特效❤️

效果演示: 代码目录: 主要代码实现: CSS样式: .img_swiper {width: 800px;margin: 0 auto;position: relative; }.img {width: 100%;height: 100%; }.img_swiper .swiper-button-prev {width: 40px;height: 40px;background-im…

如何将c语言程序封装供python调用_C++调用python

C调用python在C/C中嵌入Python,可以使用Python提供的强大功能,通过嵌入Python可以替代动态链接库形式的接口,这样可以方便地根据需要修改脚本代码,而不用重新编译链接二进制的动态链接库。至少你可以把它当成文本形式的动态链接库…

HTML+CSS+JS实现 ❤️touchSlider图片滚动图片轮播❤️

效果演示: 代码目录: 主要代码实现: CSS样式: charset "utf-8"; * {margin: 0;padding: 0;list-style: none;border: 0; }body {width: 100%;margin: 0 auto;overflow: hidden }/* main_image */.main_visual {heigh…

win10配置mysql8.0_Win10下mysql 8.0.20 安装配置方法图文教程

Win10系统下MySQL 8.0.20安装和配置超详细教程MySQL下载MySQL直接去官网下载就行,选择community版本(免费)下载,链接。在select operating system中选择Microsoft Windows,下方对应出现最新版本的MySQL,目前是MySQL 8.0.20&#x…

HTML+CSS+JS实现 ❤️echarts省市区地图城市选择❤️

效果演示: 代码目录: 主要代码实现: CSS样式: * {margin: 0;padding: 0; }body {font-family: Exo, -apple-system, Open Sans, HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Hiragino Sans GB, Microsoft YaH…

基于SpringBoot+mybatis+layui就业管理系统设计和实现

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我,都给你】 🍅 欢迎点赞 👍 收藏 ⭐留言 &#x1f…

java集合清空_java 集合删除数据

public static void main(String[] args) {List list new ArrayList<>(Arrays.asList(1, 2, 3, 4));// 常规删除// list.removeIf(next -> next 3);Iterator iterator list.iterator();while (iterator.hasNext()) {// Integer next iterator.next();// 当不执行 …

HTML+CSS+JS实现 ❤️图片轮播幻灯片❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; font-face {font-weight: normal;font-style: normal; }.csslider1 {display: inline-block;position: relative;max-width: 833px;width: 100%;margin-top: 10px; }.…

single java_java single Pattern 单例模式

单例模式是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它涉及到一个单一的类&#xff0c;该类自己负责创建自己的对象并且确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式&#xff0c;可以直接访问&#xff0c;不需要实例化…

HTML+CSS+JS实现 ❤️ html5响应式图片轮播❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; .flickerplate {position: relative;width: 100%;height: 600px;background-color: #e6e6e6;overflow: hidden }.flickerplate ul.flicks {width: 10000%;height: 100…

php time java_java 时间戳和PHP时间戳 的转换 php time()

最近在弄discuz,数据库mysql,时间类型int 10总结一下java 时间戳和PHP时间戳 的转换问题&#xff1a;由于精度不同&#xff0c;导致长度不一致&#xff0c;直接转换错误。JAVA时间戳长度是13位&#xff0c;如&#xff1a;1294890876859PHP时间戳长度是10位&#xff0c; 如&…

HTML+CSS+JS实现 ❤️HTML5图片幻灯片轮播切换❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

HTML+CSS+JS实现echarts图表炫光分布地图动画

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <html lang"en"><head><meta charset"utf-8"><title>ECharts</title> </head><body style"background:#1B1…

java jndi使用_java – 使用JNDI进行数据库连接

那么,它是一个客户端应用程序&#xff1f;应用程序和数据库通常使用DriverManager#getConnection()获得的连接相互通信&#xff1f;如果是这样,那么您不一定需要JNDI才能使连接池工作.单独的连接池框架已经足够了.例如C3P0或Apache Commons DBCP(我建议使用C3P0; DBCP是单线程的…

HTML+CSS+JS实现 ❤️echarts企业地区大数据图表模板❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; body, ul, li, p, h1, h2, h3, h4, h5, h6, dl, dt, dd {margin: 0;padding: 0; }ul, li {list-style: none; }a:link, a:visited, a:active {text-decoration: none; …

HTML+CSS+JS实现 ❤️echarts大数据统计图表实例❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <!doctype html> <html lang"en"><head><meta charset"UTF-8"><meta name"Generator" content"EditPlus"…

2014 java面试题_2014 java面试题 (答案)

2014 java面试题 (答案)题目一、选择题1. 如下代码&#xff1a;class Super {public Integer getLenght() { return new Integer(4); }}public class Sub extends Super {public Long getLenght() { return new Long(5); }public static void main(String[] args) {Super soope…

HTML+CSS+JS实现 ❤️3D万花筒图片相册展示特效❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns&q…