首页 > 其他分享 >连接查询-笛卡尔积

连接查询-笛卡尔积

时间:2022-12-14 13:24:01浏览次数:48  
标签:name 笛卡尔 连接 查询 department where id select

多表查询,当查询字段来自多个表

笛卡尔积现象:表一有m行,表二有n行,结果=m*n行

发生:没有有效的连接条件

如何避免:赋予有效的连接条件

分类:

  年代分类:

  sq192标准 只支持内连接

  sq199标准【推荐】

  功能分类:

  内连接:

      等值连接

      非等值连接

      自连接

  外连接:

      左外连接

      右外连接

      全外连接

  交叉连接

#如何避免笛卡尔积

{ 

select  * from beauty ;

select * from boys ;

select name,boyname from boys,beauty

where beauty.boyfriend id = boys.id ;

}

#一、sq192标准

{

#1.等值连接

/*

多表等值连接的结果为多表交集部分

n表连接至少需要n-1个连接条件

多表的顺序没有要求

一般为表起别名

可以搭配前面介绍的所有子句,如排序、分组、筛选

*/

#案例一:查询男女生配对

select  * from beauty ;

select * from boys ;

select name,boyname from boys,beauty

where beauty.boyfriend id = boys.id ;

#案例二:查询员工名对应部门名

select last_name,department_name

from employees,departments

where employees.department_id = departments.department_id ;

#2.为表起别名

/*

提高语句的简洁度

区分多个重名的字段

注意:起了别名就不能用原来的表名去限定

*/

#查询员工名、工种号、工种名

select E.last_name , E.job_id , J.job_title

from employees as E , jobs as J

where E.job_id = J.job_id ;

#3.两个表的顺序是否可以交换:可以

#4.可以加筛选?

#查询有奖金的员工名、部门名

selecrt last_name,department_name

from employees e,departments d

where e.department_id = d.department_id

and e.commission_pct is not null ;

#案例二:查询城市名中第二个字符为o的部门

select department_name,city

from department d,location l

where d.location_id = l.location_id

and city like '_o%' ;

#5.可以加分组

#案例一、查询每个城市的部门个数

select count(*) 个数,city

from departments d,locations l

group by city ;

#案例二:查询有奖金的部门名的领导编号和该部门最低工资

select department_name,d.manger_id,min(salary)

from department d,employees e

where d.department_id = e.department_id

and commission_pct is not null

group by department_name,d.mannger_id ;

#6.可以加排序

#案例:查询每个工种的工种名和员工个数,并按员工个数降序

select job_title,count(*)

from employees e,jobs j

where e.job_id = j.job_id

group by job_title

order by count(*0) desc ;

#7.三表连接

#案例:查询员工名,部门名和所在的城市

select last_name,department_name,city

from employees e,departments d,locations l

where e.department_id = d.department_id

and d.location_id = l.location_id ;

 

#2.非等值连接

#案例一:查询员工的工资和工资级别

select salary,great_level

from employee e,job_generation g

where salary betwwen g.lowest_sal and g.highest_sal ;

#3.自连接 相当于等值连接,只不过只有自己一个表

案例:查询员工名和上级的名字

select e.employee_id,e.last_name,m.employee_id,m.last_name

from employees e,employees m

where e.employee_id = m.employee_id;

 

}

标签:name,笛卡尔,连接,查询,department,where,id,select
From: https://www.cnblogs.com/liujy2233/p/16981783.html

相关文章

  • SqlServer查询历史某一时间段写的Sql脚本
    SELECTTOP1000--创建时间QS.creation_time,--执行文本ST.textFROMsys.dm_exec_query_statsQS--关键字CROSSAPPLYsys.dm_exec_sql_text(QS.sql_handle)STWH......
  • 用 python 的snap7库 连接西门子 200 smart
    先推荐一篇知乎上的文章,讲的非常详细.  使用Snap7读写西门子S7系列PLC但,可能存在版本不同的问题,很多地方不能正常运行.下面贴出的是测试代码:环境python3.8.4(sn......
  • Swift使用Core Data查询排序的方法
    主要是使用fetchRequest.sortDescriptors=[NSSortDescriptor.init(key:"key",ascending:true)]来进行排序效果如下letapp=UIApplication.shared.del......
  • HttpWebRequest获取url出现:基础连接已经关闭:超出了消息长度限制
    在使用HttpWebRequest获取远程url的时候,出现了莫名其妙的一个错误,找遍了所有渠道,网上都没有相关案例,最后经过自己仔细琢磨,终于研究出来了解决案例,案例如下 出现的问题:......
  • 使用线程池和shardingsphere-jdbc对统计进行分表查询优化
    记录之前的一次优化过程,之前发布在wiki上,现摘出发布。0.前言主要查询表为还款计划表xx_plan(近4000w,日新增10~20w)、实还记录表xx_actual(2600w+,日新增5~10w)、代偿记录表x......
  • sql server 查询所有表名,字段名,字段类型
    SELECT表名=casewhena.colorder=1thend.nameelse''end,表说明=casewhena.colorder=1thenisnull(f.value,'')else''end,字段序......
  • flask-session、数据库连接池、wtfroms、信号
    g对象1.g:global缩写,是关键字,不能用,就写成了g-g是一个全局对象,当此请求过程中,一直有效-其实是请求的上下文,从请求进来,就有,到请求走了,一直存在,所以在当次请求过程中,如果......
  • SQL_6_子查询
    子查询,指的是在查询语句内的查询语句,用来获取查询条件的值。它出现的位置为:where语句、having语句、from语句。一般格式:select要投影的列1from表where列1比较符......
  • 1.linux连接、vim编辑器
    1.          window类似   shell控制台界面,进入:ctrl+alt+f2-f6中的一个返回图形界面:ctrl+alt+f1  ~代表处于主文件夹 linux一切皆文......
  • centos7连接网络
    https://blog.csdn.net/jujudeyueyue/article/details/121358663?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167091800516800213055718%2522%252C%2522scm......