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

php动态网站设计南京网站推广公司

php动态网站设计,南京网站推广公司,制作网页倒计时按钮,怎么上网站做简易注销的步骤文章目录 MySQL复合查询和内外连接1. 复合查询1.1 多表查询1.2 自连接1.3 子查询单行子查询多行子查询多列子查询from中使用子查询合并查询 2. 内外连接1. INNER JOIN2. LEFT JOIN3. RIGHT JOIN4. FULL JOIN5. CROSS JOIN MySQL复合查询和内外连接 1. 复合查询 1.1 多表查询 …

文章目录

  • MySQL复合查询和内外连接
  • 1. 复合查询
    • 1.1 多表查询
    • 1.2 自连接
    • 1.3 子查询
      • 单行子查询
      • 多行子查询
      • 多列子查询
      • from中使用子查询
      • 合并查询
  • 2. 内外连接
      • 1. INNER JOIN
      • 2. LEFT JOIN
      • 3. RIGHT JOIN
      • 4. FULL JOIN
      • 5. CROSS JOIN


MySQL复合查询和内外连接

1. 复合查询

1.1 多表查询

select * from `tb_1`, `tb_2`where dept.deptno = emp.deptno;

不加过滤条件,得到的结果被称为笛卡尔积。本质是取主表的每一条记录拼接上从表的每一条记录。

多表查询中一定会包含where条件,将主键和外键对应,可以将无意义的记录抛弃。

1.2 自连接

同一张表自己和自己拼接的叫做自连接。给两张相同的表起别名,就可以放到一起。

select * from emp wkr, emp ldr;where wkr.mgr = ldr.empno;

自连接的话,需要根据实际需求筛去不满足条件的数据。

1.3 子查询

子查询也称嵌套查询,也就是将select的结果作为另一个select的条件。

单行子查询

返回一行记录的查询称为单行子查询。

select * from emp where deptno=(select deptno from emp where ename='SMITH');

多行子查询

返回多行记录的查询称为多行子查询。关键字有:inallany

  • in 表示是否存在于集合中,存在即满足条件。
  • all 表示整个集合的每一个结果
  • any 表示集合中的任意一个结果
# 显示和10号部门具有的工作岗位相同的员工
select * from emp where job in (select distinct job from emp where deptno=10);
# 显示工资比10号部门所有人工资都高的员工
select * from emp where sal > all (select distinct sal from emp where deptno=10);
# 显示工资比10号部门任意员工工资高的员工
select * from emp where sal > any (select distinct sal from emp where deptno=10);

不管是单行还是多行子查询,都叫做单列子查询,返回的都是单列的一个字段的数据。

多列子查询

# 查询和SMITH的部门和岗位完全相同的所有雇员
select * from emp where (deptno, job)=(select deptno, job from emp where ename='SMITH');

from中使用子查询

from跟是的表名,既然我们查询出来的记录都可以看作表结构。这里就是一个数据查询的技巧,把子查询当作临时表使用。

# 显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资
select ename, emp.deptno, sal, myavgfrom emp, (select deptno, avg(sal) as myavg from emp group by deptno) as avg_tbwhere emp.deptno=avg_tb.deptno and sal>myavg;# 显示每个部门的部门名,编号,地点和人员数量
select dname, dept.deptno, loc, cntfrom emp, dept, (select deptno, count(*) cnt from emp group by deptno) as cnt_tbwhere cnt_tb.deptno=emp.deptno and cnt_tb.deptno=dept.deptno;

合并查询

合并查询是就是合并多个 select 的查询结果,可使用集合操作符 unionunion all

关键字解释
union取并集,将多个 select 结果合并到一起,自动去掉重复行
union all取并集,将多个 select 结果合并到一起,但不去重
select * from emp where sal > 2500 union     select * from emp where job='MANAGER';
select * from emp where sal > 2500 union all select * from emp where job='MANAGER';

OJ连接

  • https://www.nowcoder.com/practice/23142e7a23e4480781a3b978b5e0f33a
  • https://www.nowcoder.com/practice/355036f7f0c8429a85281f7ac05b457a
  • https://www.nowcoder.com/practice/32c53d06443346f4a2f2ca733c19660c
  • https://www.nowcoder.com/practice/e50d92b8673a440ebdf3a517b5b37d62

 

2. 内外连接

通过不同类型的表连接,可以将多个表中的数据有效地组合在一起,以满足复杂的查询需求。将详细介绍MySQL中常见的表连接方式,分别是 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 和 CROSS JOIN,并通过具体的表格数据展示它们的用法和特点。
下表总结了各种表连接方式的主要特点:

连接方式结果匹配条件不满足时备注
INNER JOIN返回符合连接条件的行不返回结果最常用的连接方式
LEFT JOIN返回左表中所有行,以及右表中符合条件的行右表列为NULL适用于需要左表所有行的情况
RIGHT JOIN返回右表中所有行,以及左表中符合条件的行左表列为NULL适用于需要右表所有行的情况
FULL JOIN返回左右表中所有行,不管是否有匹配的行NULL值适用于需要两个表所有行的情况
CROSS JOIN返回两个表的笛卡尔积适用于需要生成所有组合的情况

我们将使用以下两个示例表格进行表连接操作:

表格:employees

employee_idemployee_namedepartment_id
1Alice1
2Bob2
3CharlieNULL
4David1

表格:departments

department_iddepartment_name
1HR
2IT
3Finance

1. INNER JOIN

INNER JOIN 是最常见的表连接方式,它返回两个表中符合连接条件的行。

**示例查询及结果:**查询员工及其所在部门(基于employees和departments表格)。

SELECT e.employee_id, e.employee_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
employee_idemployee_namedepartment_name
1AliceHR
2BobIT
4DavidHR

2. LEFT JOIN

LEFT JOIN 返回左表中的所有行,以及右表中与左表中行匹配的行。如果右表中没有匹配的行,则会返回 NULL 值。

**示例查询及结果:**查询所有员工及其所在部门(基于employees和departments表格)。

SELECT e.employee_id, e.employee_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
employee_idemployee_namedepartment_name
1AliceHR
2BobIT
3CharlieNULL
4DavidHR

3. RIGHT JOIN

RIGHT JOIN 返回右表中的所有行,以及左表中与右表中行匹配的行。如果左表中没有匹配的行,则会返回 NULL 值。

**示例查询及结果:**查询所有部门及其员工(基于employees和departments表格)。

SELECT e.employee_id, e.employee_name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;
employee_idemployee_namedepartment_name
1AliceHR
2BobIT
4DavidHR
NULLNULLFinance

4. FULL JOIN

FULL JOIN 返回左右两个表中的所有行,如果某个表中没有匹配的行,则返回 NULL 值。

**示例查询及结果:**查询所有员工及其所在部门,包括没有部门的员工和没有员工的部门(基于employees和departments表格)。

SELECT e.employee_id, e.employee_name, d.department_name
FROM employees e
FULL JOIN departments d ON e.department_id = d.department_id;
employee_idemployee_namedepartment_name
1AliceHR
2BobIT
3CharlieNULL
4DavidHR
NULLNULLFinance

5. CROSS JOIN

CROSS JOIN 返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行组合在一起。

如果执行一个简单的 CROSS JOIN 操作,假设表 orders 和表 products,它们分别有以下数据:

表格:orders

order_idorder_name
1Order A
2Order B

表格:products

product_idproduct_name
101Product X
102Product Y
103Product Z

执行如下的 CROSS JOIN 查询:

SELECT o.order_id, p.product_id, p.product_name
FROM orders o
CROSS JOIN products p;

将会得到以下结果,这是两个表的笛卡尔积:

order_idproduct_idproduct_name
1101Product X
1102Product Y
1103Product Z
2101Product X
2102Product Y
2103Product Z

这个结果显示了 orders 表中每个订单与 products 表中每个产品的所有组合。笛卡尔积操作是一种非常基础但强大的数据组合方式,通常用于需要生成所有可能组合的场景。

OJ练习

  • https://leetcode.com/problems/rank-scores/
  • https://leetcode.com/problems/exchange-seats/description/
http://www.hkea.cn/news/904459/

相关文章:

  • 如何用腾讯云主机做网站株洲发布最新通告
  • 中国建设银行官网站下载信息流广告投放公司
  • 合肥建站平台网络平台推广是干什么
  • 黄冈工程建设标准造价信息网优化工作流程
  • 怎么做服装外贸网站怎么去推广一个产品
  • 和各大网站做视频的工作总结软件推广赚佣金渠道
  • asp.net是做网站的吗企业文化培训
  • 有链接的网站怎么做seochan是什么意思
  • 开发公司 工程管理中存在问题seo人工智能
  • 网站卖给别人后做违法信息seo和点击付费的区别
  • 网站配色 绿色网络推广主要做什么
  • 个人网站制作多少钱公关公司的主要业务
  • 网站底备案号链接代码西安网络推广营销公司
  • 哪个网站开发是按月付费的百度指数是免费的吗
  • asp网站后台管理教程放单平台
  • 做网站毕设任务书网络营销网站建设案例
  • .net 企业网站 模版关键词seo深圳
  • 网站建设优化价格网站seo诊断
  • 网站设计详细设计有没有好用的网站推荐
  • 没有货源可以开网店吗网站更新seo
  • 淄博有做网站的吗百度搜索排名怎么收费
  • wordpress页面添加自定义字段木卢seo教程
  • 长寿网站制作保定seo排名外包
  • 域名和网站一样吗电商运营推广怎么做
  • css个人简介网站怎么做b2b网站免费推广平台
  • 网站建设中企动力上海百度广告投诉电话客服24小时
  • 深圳靠谱的电商公司正版搜索引擎优化
  • 自己如何做团购网站腾讯云建站
  • 怀化招标网站磁力狗bt
  • 佛山网站建设服务公司培训机构查询网