• 连接查询知识点以及案例


      1 #进阶6连接查询
      2 /*
      3 含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
      4 笛卡尔乘积现象:表1 有m行,表2 有n行,结果=m*n行
      5 发生原因:没有有效的连接条件
      6 如何避免:添加有效的连接条件
      7 
      8 分类:  按年代分类:sql92标准 sql99标准【推荐】支持内连接+外连接(左外+内外)+交叉连接
      9          按功能分类;内连接: 
     10                             等值连接 非等值连接 自连接
     11                                         外连接:
     12                                                         左外连接 右外连接 全外连接
     13                     交叉连接
     14 */
     15 
     16 SELECT * FROM beauty;
     17 
     18 SELECT * FROM boys;
     19 
     20 
     21 #一、sql92标准
     22 #1.等值连接
     23 
     24 /*
     25 ①多表等值连接的结果为多表的交集部分
     26 ②n表连接,至少需要n-1个连接条件
     27 ③多表的顺序没有要求
     28 ④一般需要为表起别名
     29 ⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
     30 */
     31 
     32 #案例1:查询女神名对应的男神名
     33 SELECT NAME,boyName from boys,beauty
     34 WHERE beauty.boyfriend_id=boys.id;
     35 
     36 #案例2;查询员工名和对应的部门名
     37 SELECT last_name,department_name
     38 FROM employees,departments
     39 WHERE employees.department_id=departments.department_id;
     40 
     41 #2.为表起别名
     42 /*
     43 ①提高语句的简洁度
     44 ②区分多个重名的字段
     45 注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限划
     46 */
     47 #查询员工号、工种号、工种名
     48 
     49 SELECT last_name,e.job_id,job_title
     50 FROM employees as e,jobs j
     51 WHERE e.job_id=j.job_id;
     52 
     53 #3、两个表的顺序是否可以调换
     54 #查询员工名、工种号、工种名
     55 SELECT last_name,e.job_id,job_title
     56 FROM jobs j,employees as e
     57 WHERE e.job_id=j.job_id;
     58 
     59 #4、可以加筛选?
     60 #案例:查询有奖金的员工名、部门名
     61 SELECT last_name,department_name,commission_pct
     62 FROM employees e ,departments d
     63 WHERE e.department_id=d.department_id
     64 AND e.commission_pct is not NULL;
     65 
     66 #案例2:查询城市名中第二个字符为o的部门名和城市名
     67 SELECT department_name,city
     68 FROM departments d,locations l
     69 WHERE d.location_id=l.location_id
     70 and city LIKE '__a%';
     71 
     72 #5.可以加分组?
     73 #案例1:查询每个城市部门个数
     74 SELECT COUNT(*) 个数,city
     75 FROM departments d,locations l
     76 WHERE d.location_id=l.location_id
     77 GROUP BY city;
     78 
     79 #案例2:查询出有奖金的每个部门的部门名和部门的领导编号和钙部门的最低工资
     80 
     81 SELECT department_name,d.manager_id,MIN(salary)
     82 FROM departments d,employees e
     83 WHERE d.department_id=e.department_id
     84 and commission_pct is not NULL
     85 GROUP BY department_name;
     86 
     87 #6.可以加排序
     88 
     89 #案例:查询每个工种的工种名和员工的个数,并且按员工个数降序
     90 SELECT job_title,COUNT(*)
     91 FROM employees e,jobs j
     92 WHERE e.job_id=j.job_id
     93 GROUP BY job_title
     94 ORDER BY COUNT(*) desc;
     95 
     96 #7.可以实现三表连接?可
     97 #案例:查询员工名、部门名和所在的城市
     98 
     99 SELECT last_name,department_name,city
    100 FROM employees e,departments d,locations l
    101 WHERE e.department_id=d.department_id
    102 and d.location_id=l.location_id
    103 and city like 's%';
  • 相关阅读:
    帆软查看注册用户的数据库信息
    [已解决]报错:sql server 返回结果出现中文乱码
    消除点击单元格时出现的黑框
    python tcp udp函数装饰器,无需亲自手写socket连接代码。
    介绍一个python代码自动运行在远程机器的三方包。
    python paramiko上传文件夹到linux
    filebeat自定义索引名,filebeat索引模板
    mydumper
    mysql误删ibd文件
    mysql update多字段时引发的一个问题
  • 原文地址:https://www.cnblogs.com/deyo/p/13245843.html
Copyright © 2020-2023  润新知