当前位置: 首页 > news >正文

昆山做网站的kamese百度一下 你就知道首页官网

昆山做网站的kamese,百度一下 你就知道首页官网,成都网站设计精选柚v米科技,wordpress远程安装教程文章目录 子查询什么是子查询where后面使用子查询from后面使用子查询select后面使用子查询exists、not existsin和exists区别 union&union alllimit 🌈你好呀!我是 山顶风景独好 💕欢迎来到我的博客,很高兴能够在这里和您见面…

在这里插入图片描述

文章目录

  • 子查询
    • 什么是子查询
    • where后面使用子查询
    • from后面使用子查询
    • select后面使用子查询
    • exists、not exists
    • in和exists区别
  • union&union all
  • limit

🌈你好呀!我是 山顶风景独好
💕欢迎来到我的博客,很高兴能够在这里和您见面!
💕希望您在这里可以感受到一份轻松愉快的氛围!
💕这里不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!

🏠大家订阅本专栏!本专栏旨在为SQL初学者提供一条逐步迈向高级应用的学习之路,带您从零开始,一步一步练习,逐步掌握SQL的精髓,实现技能的提升与飞跃!😊

子查询

什么是子查询

  1. select语句中嵌套select语句就叫做子查询。
  2. select语句可以嵌套在哪里?
    1. where后面、from后面、select后面都是可以的。
select ..(select)..
from ..(select)..
where ..(select)..

where后面使用子查询

案例:找出高于平均薪资的员工姓名和薪资。
错误的示范:

select ename,sal from emp where sal > avg(sal);

错误原因:where后面不能直接使用分组函数。
可以使用子查询:

select ename,sal from emp where sal > (select avg(sal) from emp);

from后面使用子查询

小窍门:from后面的子查询可以看做一张临时表。
案例:找出每个部门的平均工资的等级。
第一步:先找出每个部门平均工资。

select deptno, avg(sal) avgsal from emp group by deptno;

image.png
第二步:将以上查询结果当做临时表t,t表和salgrade表进行连接查询。条件:t.avgsal between s.losal and s.hisal

select t.*,s.grade from (select deptno, avg(sal) avgsal from emp group by deptno) t join salgrade s on t.avgsal between s.losal and s.hisal;

image.png

select后面使用子查询

select e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname from emp e;

image.png

exists、not exists

在 MySQL 数据库中,EXISTS(存在)用于检查子查询的查询结果行数是否大于0。如果子查询的查询结果行数大于0,则 EXISTS 条件为真。(即存在查询结果则是true。)

主要应用场景:

  • EXISTS 可以与 SELECT、UPDATE、DELETE 一起使用,用于检查另一个查询是否返回任何行;
  • EXISTS 可以用于验证条件子句中的表达式是否存在;
  • EXISTS 常用于子查询条件过滤,例如查询有订单的用户等。
drop table if exists t_customer;
drop table if exists t_order;create table t_customer(customer_id int,customer_name varchar(32)
);create table t_order(order_id int,order_price decimal(5,1),customer_id int
);insert into t_customer(customer_id,customer_name) values(1,'zhangsan');
insert into t_customer(customer_id,customer_name) values(2,'lisi');
insert into t_customer(customer_id,customer_name) values(3,'wangwu');insert into t_order(order_id, order_price, customer_id) values(10, 1000.0, 1);
insert into t_order(order_id, order_price, customer_id) values(20, 2000.0, 1);
insert into t_order(order_id, order_price, customer_id) values(30, 3000.0, 2);
insert into t_order(order_id, order_price, customer_id) values(40, 4000.0, 2);commit;
select * from t_customer;
select * from t_order;

现在我们来看一个简单的案例,假设我们要查询先前有过订单的顾客,而订单信息保存在 t_order 表中,顾客信息保存在 t_customer 表中。我们可以使用以下 sql 语句:

select * from t_customer c where exists(select * from t_order o where o.customer_id=c.customer_id);

在这个查询语句中,子查询用于检查是否有订单与每个客户相关联。如果子查询返回至少一行,则表示该顾客已经下过订单,并返回此客户的所有信息,否则该顾客将不被包含在结果中。

以下是这个查询语句的执行过程:

  1. 首先查询表 t_customer 中的所有顾客信息(以下简称为顾客表);
  2. 对于顾客表中的每一行,都执行一次子查询,子查询查询该顾客有没有订单,如果有,则在结果集中保留该顾客信息;如果没有,则将该顾客排除;
  3. 最终返回有订单顾客的所有信息。

除了 EXISTS,也可以使用 NOT EXISTS 条件从 SELECT、UPDATE、DELETE 语句中获取子查询的返回结果。NOT EXISTS 用于检查一个子查询是否返回任何行,如果没有行返回,那么 NOT EXISTS 将返回 true。

例如,我们想要查找所有没有下过订单的顾客,可以使用以下 sql 语句:

select * from t_customer c where not exists(select * from t_order o where o.customer_id=c.customer_id);

在这个查询语句中,如果没有任何与顾客相关联的订单,则 NOT EXISTS 子查询将返回一个空结果集,这时候 WHERE 条件为 true,并将返回所有顾客信息。如果顾客有订单,则 NOT EXISTS 子查询的结果集将不为空,WHERE 条件为 false,则不会返回该顾客的信息。

总之,无论是 EXISTS 还是 NOT EXISTS,都是非常有用的 SQL 工具。可以通过它们来结合子查询来动态过滤查询结果,使 SQL 查询变得更加灵活和高效。

in和exists区别

IN 和 EXISTS 都是用于关系型数据库查询的操作符。不同之处在于:

  1. IN 操作符是根据指定列表中的值来判断是否满足条件,而 EXISTS 操作符则是根据子查询的结果是否有返回记录集来判断。
  2. EXISTS 操作符通常比 IN 操作符更快,尤其是在子查询返回记录数很大的情况下。因为 EXISTS 只需要判断是否存在符合条件的记录,而 IN 操作符需要比对整个列表,因此执行效率相对较低。
  3. IN 操作符可同时匹配多个值,而 EXISTS 只能匹配一组条件。

下面是一个简单的示例,用于演示 IN 和 EXISTS 之间的区别。假设我们有两个表 orders 和 products,orders 表中记录了订单信息,products 表中记录了商品信息。现在我们想查询所有“手机”和“平板电脑”这两种商品中,至少有一笔订单销售了 $1000 以上的商品:

使用 IN 操作符:

SELECT *
FROM products
WHERE product_name IN ('手机', '平板电脑')
AND product_id IN (SELECT product_idFROM ordersWHERE order_amount > 1000
);

使用 EXISTS 操作符:

SELECT *
FROM products
WHERE product_name IN ('手机', '平板电脑')
AND EXISTS (SELECT *FROM ordersWHERE orders.product_id = products.product_idAND order_amount > 1000
);

总之,IN 和 EXISTS 都是用于条件过滤的操作符,但其实现方式和性能特点都不同,需要根据具体情况进行选择和使用。

union&union all

不管是union还是union all都可以将两个查询结果集进行合并。
union会对合并之后的查询结果集进行去重操作。
union all是直接将查询结果集合并,不进行去重操作。(union all和union都可以完成的话,优先选择union all,union all因为不需要去重,所以效率高一些。)
image.png
image.png
案例:查询工作岗位是MANAGER和SALESMAN的员工。

select ename,sal from emp where job='MANAGER'
union all
select ename,sal from emp where job='SALESMAN';

以上案例采用or也可以完成,那or和union all有什么区别?考虑走索引优化之类的选择union all,其它选择or。
两个结果集合并时,列数量要相同:
image.png

limit

  1. limit作用:查询第几条到第几条的记录。通常是因为表中数据量太大,需要分页显示。
  2. limit语法格式:
    1. limit 开始下标, 长度
  3. 案例:查询员工表前5条记录
select ename,sal from emp limit 0, 5;

如果下标是从0开始,可以简写为:

select ename,sal from emp limit 5;
  1. 查询工资排名在前5名的员工(limit是在order by执行之后才会执行的)
select ename,sal from emp order by sal desc limit 5;
  1. 通用的分页sql

假设每页显示3条记录:pageSize = 3
第1页:limit 0, 3
第2页:limit 3, 3
第3页:limit 6, 3
第pageNo页:limit (pageNo - 1)*pageSize, pageSize


✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊

🏠 我在CSDN等你哦!我的主页😍

在这里插入图片描述

http://www.fp688.cn/news/164879.html

相关文章:

  • 电话客服外包网店关键词怎么优化
  • 贵州省建设厅网站首页seo诊断专家
  • 17做网店网站池尾前端培训
  • php网站开发实例代码深圳网络营销全网推广
  • 北京电力交易中心史连军seo搜索引擎优化是什么
  • 专业网站建设报价网络营销图片素材
  • seo技术培训教程视频如何软件网站优化公司
  • 网站集群怎么做seo查询是什么
  • 金融网站模版网络广告投放平台
  • 做网站的属于什么行业深圳网络推广团队
  • 网站建设与管理和计算机网络技术电商运营入门基础知识
  • 谁做的新闻网站比较好东莞seo网站排名优化
  • 建筑网方成龙网站优化哪家好
  • 竭诚网络网站建设百度点击软件找名风
  • 培训如何优化网站大地seo视频
  • 机床网站建设营销型网站建设推荐
  • 河南省建设工程注册中心网站谷歌seo视频教程
  • 动漫网站做毕业设计简单吗网络整合营销4i原则
  • wordpress是动态网站代发推广百度首页包收录
  • 满屏网站设计做多大微信营销技巧
  • 桂林漓江阳朔青岛关键词推广seo
  • 武汉做网站华企加速器深圳网站推广
  • 官方网站下载12306百度人工申诉客服电话
  • 广州哪家做网站最好域名注册费用
  • 公司网站建设价格多少注册百度账号
  • 交通信用网站建设免费的个人网站怎么做
  • 公司专业网站建设泰安百度推广电话
  • 毕业设计做网站难吗内容营销平台有哪些
  • 榆林网站seo电脑培训班零基础网课
  • 三合一网站建设推广网络营销推广优化