SQL作为咱们程序员必备技能之一,无论是初级程序员还是高级程序员,SQL已经是各大公司招聘条件里的必选项,为什么SQL对于咱们来说如此重要呢?在回答这个问题之前,我们先搞懂以下几个问题。

第一个问题,什么是SQL?

SQL是Structured Query Language的缩写,意思是结构化查询语言,是一种在数据库管理系统(RelationalDatabase Management System, RDBMS)中查询数据,或通过RDBMS对数据库中的数据进行更改的语言。

是不是有点看不懂?来点简单的

SQL就是一种对数据库中的数据表或者数据进行增、删、改、查等操作的语言。

什么是数据库?“数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。简单点来说就是可以按照一定数据库所规范的结构来存储数据的仓库,市场上常见的数据库有Oracle,MySQL,SQL Server,只是有一些是商业的数据库,一些是开源免费的而已。

第二个问题,为什么要学SQL?

如果理解了数据库与SQL的关系之后,这个问题其实就很简单了,我们在查看数据库的数据以及分析数据的时候,肯定是需要SQL语句的,如果是自己的写的东西,数据很少的话,那么可能你看不到SQL的妙用之处,如果是在企业里面,几百张表到几千张表的数据库表多的是,几百万到几十亿的数据记录,你以后肯定是要提取其中的数据的,SQL就是这么一个方便的,取数的工具,因为几乎所有的数据库的SQL语法极其相似,所以学会了SQL几乎掌握了所有的数据库的取数方法。

第三个问题,到底怎么学SQL?

SQL不就是写一串SQL语句然后就得到自己想要的数据了吗?

1、SQL不仅能取数据,还提供了丰富的函数,可以做数据的清洗、转换等数据处理,而且SQL还能像Excel的透视表那样,可以方便地在不同的维度上对数据进行求和、计数、去重计数、求平均等操作,进而对数据进行分析,而这一切,也只需要短短的几行SQL代码就能实现。

2、如果数据很多很复杂,像Excel那样存放在不同的Sheet里,要汇总在一起进行分析,要怎么处理呢?SQL的强大之处就在于可以非常方便地将不同的数据按照一定的关联连接起来,这个关联可以是内连接inner join (找两个表的交集)、左连接left join (交集并且左表所有)、右连接(right join 交集并且右表所有)、全连接outer join(找两个表的并集),可以通过各种不同的关联条件可以实现各种不同的数据连接,最终对连接后的数据进行分析。

3、通过以上两点来看,SQL好像和Excel功能上没啥区别啊?Excel也能做数据清洗,透视表也能做求和、计数等聚合操作,Excel的Power Pivot也能实现多个表之间的连接。实际上,SQL除了以上这些功能之外,还提供了一个非常强大的功能:窗口函数,窗口函数有什么用呢?如果我们要计算每个人在特定分组下的排名、每月销售额的同比、环比、截至每天的累计销售额,这些数据分析中经常遇到的、且基础的SQL语句无法很好解决的问题,窗口函数就显示出它的威力了。所以窗口函数也是判断你是SQL基础玩家和高阶玩家的重要标准,也是数据分析面试中最喜欢考查的内容之一。

那么怎么才能快速高效地掌握SQL呢?根据前面的介绍,提升SQL水平可以按照这样的学习路径:

SQL基本语法=====》SQL常用函数====》SQL表链接和子查询====》SQL窗口函数

03、内连接INNER JOIN

内连接inner join使用连接运算符匹配两个表共有的列,返回两个表中均满足连接条件的记录,若不满足条件则不返回。

内连接按照连接方式的不同,又可以分为以下几种:

  • 等值连接:在连接条件中使用等号(=)运算符连接两个表中相同的列,返回两个表共同满足连接条件的所有行。
  • 非等值连接:在连接条件使用除等于运算符以外的其它比较运算符进行连接的情况,包括>、>=、<=、<、!>、!<和<>,均为非等值连接。
  • 自连接:有时在查询时需要自身和自身连接(自连接),这个时候我们要为同一个表定义不同的别名以示区分。
  • 笛卡尔积连接:两张表中的每一条记录和另外一个表进行笛卡尔积组合,然后根据WHERE条件过滤结果集中的记录。

在所有的内连接类型中最典型、最常用的内连接方式是等值连接,也就是连接条件ON中的匹配类型为等值“=”匹配,等值连接返回两个表中共同字段值相等的所有行。

看这个图来理解内连接,简单的说,表A和表B进行等值连接后,返回的是两个表中满足连接条件的共用部分C,即交集。

我们来数据库演示一波

这是我们的数据库表

kcb是课程表 字段 kid(课程编号),kname(课程名称)

stu是学生副表 字段有 id(学生id) ,ah(爱好),cs(生日)

student是学生表 字段 id(学生id),name(学生姓名),sex(学生性别),cj(学生成绩),kid(课程id)

xkb是选课表 字段 id(学生id),kid(课程id),cj(成绩)

新建查询,输出结果如下

04、左连接left join

看这个图我们可以理解为返回包括左表中的所有记录和右表中连接字段相等的记录。

接下来来一波数据库实例

左连接和内连接格式差不多,只是改了个连接的关键字,这里写的是a.* 代表输出别名a里面的所有字段,b.*同理,如果想按照上面的内连接来的话可以改成这样,有什么不同可以对照一下

左连接和内连接的区别

可以这么说 内连接的几个表是平等关系,左连接是以左表为主表又表为从表

什么是SQL以及内连接与左连接的区别相关推荐

  1. SQL内连接和左连接的区别 - 使用SQLite演示

    SQL INNER JOIN 关键字 在表中存在至少一个匹配时,INNER JOIN 关键字返回行. INNER JOIN 与 JOIN 是相同的. SQL LEFT JOIN 关键字 LEFT JO ...

  2. SQL连接的理解和使用(内连接:自然连接等值连接,外连接:左连接右连接全外连接)

    目录 一.连接的介绍 连接是什么? 连接分几种? 条件连接 等值连接 自然连接 二.连接的使用 内连接 INNER JOIN 内连接与等值连接区别 内连接与自然连接区别 外连接 OUTER JOIN ...

  3. SQL语句的内连接,外连接,左连接,右连接,全连接详解例子

    SQL语句的内连接,外连接,左连接,右连接,全连接详解例子 1.关系:链接分为内连接,外连接:外连接又分为左连接.右连接和全连接 分别为 内连接:(Inner Join):参与表格以JOIN关键词连在 ...

  4. SQL内连接、左连接、右连接的区别

    SQL内连接.左连接.右连接的区别 前言:目前研究生已经毕业,刚刚找到了一份BA数据分析师的工作.目前的工作内容主要是指标的理解和使用SQL将代码写出来.在这里经常用到内连接(inner) join和 ...

  5. 图解SQL的连接:左连接、右连接、全连接、内连接、自然连接

    SQL的连接分为三类: 外连接(包括左连接left join.右连接right join.全连接full join) 内连接 inner join 自然连接 natural join 我们来看一个超级 ...

  6. sql内连接、左连接、右连接以及全连接查询

    Mysql 一,内连接.左连接.右连接以及全连接查询 一.内连接查询 inner join 关键字:inner join on 语句:select * from a_table a inner joi ...

  7. SQL内连接,左连接,右连接区别及联系

    目录 数据库建表及其内容 内连接(默认连接) 左连接 右连接 总结: 数据库建表及其内容 stu表 班级表(class) 内连接(默认连接) SELECT stu.stuname , classnam ...

  8. SQL中常见的几种连接方法-(内连接,左连接,右连接)

    连接是数据库主要的特点,通常一个表中不会存放不同实体的信息,不同实体的信息存在不同的表当中,但是要同时查出多个表当中的信息时就需要多个表合并到一起进行查询,此时连接表的作用就出来了. 在表建立时常把一 ...

  9. SQLserver中的内连接和左连接

                                    SQLserver中的内连接和左连接 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  10. mysql join 会算笛卡尔积吗_mysql 内连接、左连接会出现笛卡尔积?

    这周的部门周会,分享的同事说的是数据库优化相关,过程中,一个同事跟我讨论左连接查询,是不是笛卡尔积.我第一反应,左连接肯定不是笛卡尔积啊,左连接是以左表为准,左表有m条记录,则结果集是m条记录(哈哈, ...

最新文章

  1. LetCode: 5. 最长回文子串
  2. (第四篇)Vue生命周期
  3. 7-5 两个有序链表序列的合并 (20 分)
  4. 1451C. String Equality
  5. 数据结构与算法理论概述
  6. Python运算符 - Python零基础入门教程
  7. python模型的属性是什么_python – Django:为什么Django模型字段的类属性?
  8. 【POJ1088】滑雪
  9. struts2学习笔记(一) MVC模式
  10. QT中PRO文件写法的详细介绍,很有用,很重要!
  11. 论ul、ol和dl的区别
  12. shopnc定时任务
  13. SSH-keygen用法
  14. 人工智能实验报告 牧师与野人渡河 知识表示方法
  15. Android DES,AES,RSA加密实现
  16. 【STM32F429】第5章 RL-USB移植(MDK AC6)
  17. Windows-CMD常用命令总结
  18. 看张亚飞《.Net for Flash FMS》的笔记
  19. 大学四年,我因为使用这几个学习方法,成为了同学眼中的“大神”、BUG克星!
  20. Python竞猜商品价格

热门文章

  1. mysql怎么加乐观锁和悲观锁_mysql - 乐观锁和悲观锁
  2. html表格居中设置css样式,css怎么设置table居中?
  3. 先后抽纸牌游戏 暴力递归
  4. JAVA—Markdown
  5. 防止表单重复提交的4种方法
  6. Linux修改IP之后远程连接不上的解决方法
  7. 五一假期出行必备的高科技手册
  8. unity伤害数字显示,最简单简洁的方法
  9. kafka之消费者进阶
  10. JAVA8特性之函数式接口-@FunctionalInterface注解