---恢复内容开始---

(一)SQL关联查询的使用技巧 (各种 join)

这几天因为工作的时候,发现自己的sql语句基础不是很好,特意研究了一下,发现sql语句真的是博大精深,sql语句不仅是要查出来你想要的数据,更讲究查询的效率,因为在查询大量数据时往往会因为数据量大,造成效率很低,再加上前后台数据的交互,造成了访问延迟等等的一系列问题。

在我们的日常工作中往往用到很多的查询方式,例如 嵌套查询,关联查询,子查询等等,就我而言,我感觉关联查询是最容易学习,和效率最高的。下面就我总结的关联查询如下:

关联查询:

1)内连接

关联查询分为内连接(inner join或者join)只返回两个表中连接字段相等的行
select * from 表1 inner join 表2
on 表1.字段号=表2.字段号
内连接连接三表的例子:
select * from (表1 inner join 表2
on 表1.字段号=表2.字段号) inner join 表3
on
表1.字段号=表3.字段号
内连接四表的例子:
select * from ((表1 inner join 表2
on 表1.字段号=表2.字段号)inner join 表3
on
表1.字段号=表3.字段号)inner join 表4
on 表1.字段号=表4.字段号
类似查询最好使用数字字段,其查询的字段必须是主键,自动增长类型。否则很难成功,内连接还可以增加where字句来缩小乏味

2)左连接

左连接(left join)返回左表中所有记录和右表中连接字段相等的记录
如果两个表中字段并不完全一一对应,想要那些没有对应的字段也显示出来就可以使用左连接和
右连接查询,一个是包括左边所有,一个是包括右边所有罢了
左连接两表的例子:
select * from 表1 left join 表2
on 表.字段号=表2.字段号;
左连接三表查询的例子:
left join 表2 on 表1.字段号=表2.字段号 left join 表3 on
表2.字段号=表3.字段号

3)右连接

右连接(right join)返回右表中所有记录和左表中连接字段相等的记录,语法与左连接同,这里就不再举例。另外还有全连接,是将左右两表中没有相关性的记录都选出来。
自连接左连接右连接还可以用于同一张表中,称为自连接,这中用法一般用于表中有层级关系的数据,例如部门表,有部门id,部门名称,上级部门id。为了查询部门名称和
所有上级部门名称,可以这样查询
select 部门名,上级部门名 from 部门表 别名1
left join 部门表 别名2
on 别名1.部门id=别名2.上级部门id

4)分组查询

group by的使用技巧:他的作用就是对相应的字段进行分组:

例子如下:

新建一张学生成绩数据表:

这是一个t_grade表

(1)查询该学生的总体成绩的总分

sql:  select
t.stuName,SUM(t.score) as score from t_grade t 
GROUP BY t.stuName

结果图:

(2)查询该学生最高的成绩

sql: select
t.stuName,MAX(t.score) as score from t_grade t 
GROUP BY t.stuName
结果图:

在分组查询中往往还有很多的查询关系,这里我就不一一的例举了

下面分享一个工作中用到的五张表关联查询所用到的sql语句

下面是所有的表:

(1)sam_domain

(2) sam_appsystem

(3) sam_service

(4) sam_operation

(5) nxgjj_user_operation

查询需求:查询出每个系统模块下,有多少用户访问生成柱状图:

sql :

select
total.app_name, count(distinct total.userid) total_num from

(

select
t.domain_code,a.app_code,a.app_name,s.service_code,o.operation_code,u.* from

(

select
domain.domain_code from sam_domain domain

where domain.domain_code ='com.hopesoftnxgjj'

) t

inner
join sam_appsystem a on a.domain_code = t.domain_code

left join 
sam_service s on s.app_code = a.app_code

left join sam_operation o on
o.sam_service_code = s.service_code

left join nxgjj_user_operation u on
u.dest_operation_code = o.operation_code) total

group by total.app_name

结果图:

效果图:

以上数据都为测试数据;

---恢复内容结束---

(一)SQL关联查询的使用技巧 (各种 join)

这几天因为工作的时候,发现自己的sql语句基础不是很好,特意研究了一下,发现sql语句真的是博大精深,sql语句不仅是要查出来你想要的数据,更讲究查询的效率,因为在查询大量数据时往往会因为数据量大,造成效率很低,再加上前后台数据的交互,造成了访问延迟等等的一系列问题。

在我们的日常工作中往往用到很多的查询方式,例如 嵌套查询,关联查询,子查询等等,就我而言,我感觉关联查询是最容易学习,和效率最高的。下面就我总结的关联查询如下:

关联查询:

1)内连接

关联查询分为内连接(inner join或者join)只返回两个表中连接字段相等的行
select * from 表1 inner join 表2
on 表1.字段号=表2.字段号
内连接连接三表的例子:
select * from (表1 inner join 表2
on 表1.字段号=表2.字段号) inner join 表3
on
表1.字段号=表3.字段号
内连接四表的例子:
select * from ((表1 inner join 表2
on 表1.字段号=表2.字段号)inner join 表3
on
表1.字段号=表3.字段号)inner join 表4
on 表1.字段号=表4.字段号
类似查询最好使用数字字段,其查询的字段必须是主键,自动增长类型。否则很难成功,内连接还可以增加where字句来缩小乏味

2)左连接

左连接(left join)返回左表中所有记录和右表中连接字段相等的记录
如果两个表中字段并不完全一一对应,想要那些没有对应的字段也显示出来就可以使用左连接和
右连接查询,一个是包括左边所有,一个是包括右边所有罢了
左连接两表的例子:
select * from 表1 left join 表2
on 表.字段号=表2.字段号;
左连接三表查询的例子:
left join 表2 on 表1.字段号=表2.字段号 left join 表3 on
表2.字段号=表3.字段号

3)右连接

右连接(right join)返回右表中所有记录和左表中连接字段相等的记录,语法与左连接同,这里就不再举例。另外还有全连接,是将左右两表中没有相关性的记录都选出来。
自连接左连接右连接还可以用于同一张表中,称为自连接,这中用法一般用于表中有层级关系的数据,例如部门表,有部门id,部门名称,上级部门id。为了查询部门名称和
所有上级部门名称,可以这样查询
select 部门名,上级部门名 from 部门表 别名1
left join 部门表 别名2
on 别名1.部门id=别名2.上级部门id

4)分组查询

group by的使用技巧:他的作用就是对相应的字段进行分组:

例子如下:

新建一张学生成绩数据表:

这是一个t_grade表

(1)查询该学生的总体成绩的总分

sql:  select
t.stuName,SUM(t.score) as score from t_grade t 
GROUP BY t.stuName

结果图:

(2)查询该学生最高的成绩

sql: select
t.stuName,MAX(t.score) as score from t_grade t 
GROUP BY t.stuName
结果图:

在分组查询中往往还有很多的查询关系,这里我就不一一的例举了

下面分享一个工作中用到的五张表关联查询所用到的sql语句

下面是所有的表:

(1)sam_domain

(2) sam_appsystem

(3) sam_service

(4) sam_operation

(5) nxgjj_user_operation

查询需求:查询出每个系统模块下,有多少用户访问生成柱状图:

sql :

select
total.app_name, count(distinct total.userid) total_num from

(

select
t.domain_code,a.app_code,a.app_name,s.service_code,o.operation_code,u.* from

(

select
domain.domain_code from sam_domain domain

where domain.domain_code ='com.hopesoftnxgjj'

) t

inner
join sam_appsystem a on a.domain_code = t.domain_code

left join 
sam_service s on s.app_code = a.app_code

left join sam_operation o on
o.sam_service_code = s.service_code

left join nxgjj_user_operation u on
u.dest_operation_code = o.operation_code) total

group by total.app_name

结果图:

效果图:

以上数据都为测试数据;

(一)SQL关联查询的使用技巧 (各种 join)的更多相关文章

  1. 通过Spark SQL关联查询两个HDFS上的文件操作

    order_created.txt   订单编号  订单创建时间 -- :: -- :: -- :: -- :: -- :: order_picked.txt   订单编号  订单提取时间 -- :: ...

  2. 学习SQL关联查询

    通过一个小问题来学习SQL关联查询 原话题: 是关于一个left join的,没有技术难度,但不想清楚不一定能回答出正确答案来: TabA表有三个字段Id,Col1,Col2 且里面有一条数据1,1, ...

  3. MyBatis 实践 -动态SQL/关联查询

    MyBatis 实践 标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条 ...

  4. 转载:sql关联查询

    inner join(等值连接)只返回两个表中联结字段相等的行 left join(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接)返回包括右表中的所有记录和 ...

  5. SQL关联查询中on与where

    微信公众号:刺刺刺猬的优雅 前段时间,做一个查询,打算用left join查询存在于A表但不存在于B表记录,但怎么查都不对,原因是把所有filter全部放在了where语句中,因此回头看了资料,记录一 ...

  6. sql关联查询—将一个表的查询结果作为新表进行查询操作

    例题:#  各个部门中 最高工资中最低的那个部门的 最低工资是多少? 先考虑取得各个部门最高工资 SELECT MAX(salary) AS max_salary,e.`department_id` ...

  7. SQL关联查询

    从2张或多张表中,取出有关联的数据 关联查询一共有几种情况: 内连接:INNER JOIN .CROSS JOIN (1)形式一 select 字段列表 from A表 inner join B表 o ...

  8. 通过一个小问题来学习SQL关联查询

    原话题: 是关于一个left join的,没有技术难度,但不想清楚不一定能回答出正确答案来: TabA表有三个字段Id,Col1,Col2 且里面有一条数据1,1,2 TabB表有两个字段Id,Col ...

  9. sql关联查询更新速度慢的问题

    原语句 update B b set b.fid = (select f.id from F f where f.bid = b.id) ; 可以考虑用 begin for f in (select ...

随机推荐

  1. Java web中常见编码乱码问题(一)

    最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

  2. [转]tomcat部署(1)

      阅读目录 1 目录结构 2 部署 3 发布 4 测试 本篇参考Tomcat官方文档:<First Webapp>翻译,并结合自己的开发经验介绍关于tomcat部署以及发布的相关内容. ...

  3. Python+requests库 POST接口图片上传

    捕获到POST接口的请求参数,如下: 包括data.file两个部分,上传代码如下: 比较简单,直接发送files参数即可 heads中 content-type 折腾了1个小时,呵呵

  4. Python爬虫-爬小说

    用途 用来爬小说网站的小说默认是这本御天邪神,虽然我并没有看小说,但是丝毫不妨碍我用爬虫来爬小说啊. 如果下载不到txt,那不如自己把txt爬下来好了. 功能 将小说取回,去除HTML标签 记录已爬过 ...

  5. WKWebView 官方文档

    WKWebView 类 一个WKWebView对象可以显示交互式的web内容.就像一个应用程序的浏览器.你可以使用WKWebView类嵌入Web内容的应用程序.这样做,创造一个WKWebView对象, ...

  6. 一些JQuery使用技巧

    最近做项目,在使用JQuery中遇到一些问题记录下. 1.根据Id查询父级内容,或者父级的父级 之前会使用$("#id").parent().parent(): 这种使用有很大的弊 ...

  7. Windows 7安装Oracle 10g的方法

    Windows7下安装Oracle 10g提示"程序异常终止,发生未知错误"的解决方法 1.修改Oracle 10G\database\stage\prereq\db\refhos ...

  8. 在Windows上远程运行Linux程序

    1.在Windows主机上安装X Server软件,如Cygwin带的XWin Server 2.在Windows主机上启动X服务器,并将Linux主机设为允许访问该Windows主机上的X服务器. ...

  9. ClassLoader机制:一个类何时会被虚拟机初始化?

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 大家都知道Java程序被编译器编译成字节码文件保存在硬盘里,Java虚拟机在执行代码时首先要把编译后的字节码文件从硬盘加载到内存中,然后才 ...

  10. Scrapy爬虫大战京东商城

    Scrapy爬虫大战京东商城 引言 上一篇已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇 代码详解 首先应该构造请求,这里使用scrapy.Request,这个方法默认调 ...