1 小时 SQL 极速入门(一)

前几天,我在论坛溜达。看到一个人发帖说

做了6年的企业级开发,总是被互联网行业的人认为没技术含量,不就是CRUD么
先解释下 CRUD 是什么。CRUD 就是我们常说的增删改查(Create,Retrieve,Update,Delete)

其实,对这个问题,我也思考过。我们所有的业务流程,最终都会抽象出数据模型,保存到数据库中。把业务之间的联系抽象成数据库中表与表,字段与字段之间的联系。实际上,企业的各种系统,在技术层面上确实是在 CRUD。

不过话说回来了,互联网的系统不是 CRUD 吗?只不过 CRUD 的姿势不同罢了,互联网可能是面对高并发的 CRUD, 我们是面对的是复杂业务流程的 CRUD。这些业务逻辑还需要一定的行业积淀才能捋清楚。所以在企业级开发上业务和技术基本是五五开,业务比重甚至要大于技术。

所以,今天我们就花很短的时间,来学学简单的 SQL.了解下 CRUD 的姿势。
假如我们有下面一个订单表 ORDER_HEADER,不要在意表里的数据,为了方便说明,瞎填的。

查询

查询是我们平日使用最多的,下面着重说一下:
查询使用 SELECT 关键字,基本结构如下

SELECT FROM WHERE

假如我们想查找所有已经完工的订单信息,那么 SQL 怎么写呢?

SELECT * FROM order_header WHERE order_status = '完工'

执行后会看到我们需要的结果

SELECT * 代表查询所有列,一般我们会关注我们需要的字段,比如我们要找到订单类型为 1 的并且完工的订单号,我们可以这么写

SELECT order_no FROM order_header WHERE order_status = '完工' AND order_type = 1

我们可以看到只有下面两个符合条件的订单号被选中。在写 SQL 中我们要尽量避免 SELECT * ,我们需要哪个字段就取哪个字段,可以节省 SQL 查询的时间。

如果要查询订单类型为 1 的或者处于下达状态的订单,SQL 怎么写呢?

SELECT order_no FROM order_header WHERE order_type = 1 OR order_status = '下达'

如果要查找开工,下达和完工状态的订单,我们可以用 IN 关键字

SELECT
    order_no,
    order_type,
    order_status
FROM
    order_header
WHERE
    order_status IN ( '开工', '完工', '下达' )

除了 IN 我们可以使用 LIKE 进行模糊查询,比如我们要查询订单状态中包含 “工” 的所有订单

SELECT order_no FROM order_header WHERE  order_status LIKE '%工%'

这里的 "%" 表示通配符,"%工"表示以工结尾的所有匹配,"工%"表示以工开头的所有匹配。
此外,我们可以用 NOT IN , NOT LIKE 来取相反的逻辑。

通过 GROUP BY 可以进行分组,比如我们按照订单状态来分组,就可以很方便的查看当前有几种状态的订单

SELECT order_status FROM order_header GROUP BY order_status

结果如下图

如果我们想看到每个分组中有多少订单,那个我们可以使用 COUNT() 函数

SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status

结果如下图,可以看到每个分组中订单的数量。除了COUNT(),还有 MAX(),MIN(),SUM()等函数

如果我们只想看到数量大于 2 的分组,该怎么写?

SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status HAVING COUNT(1) > 2

可以看到,只有数量大于2的分组被查到了。

如果仅仅想去重,比如想知道总共有几种订单类型,那么我们只需要对此列用 DISTINCT 即可。

SELECT DISTINCT order_type FROM order_header

结果中的订单类型列已经被去重了。

CASE WHEN ,有时我们会需要简单的判断逻辑,就可以用 CASE WHEN 了。比如我们想让 订单类型为1 的表示生产订单,订单类型为2 的表示更改订单,订单类型为3 的表示废弃订单。那么我们可以这么写

SELECT
    order_no,
    order_type,
    order_status,
CASE
    WHEN order_type = 1 THEN '生产订单'
    WHEN order_type = 2 THEN '更改订单'
    WHEN order_type = 3 THEN '废弃订单'
    ELSE '未知类型'
    END AS type_desc
FROM
order_header

结果如下图

子查询,有时候我们需要从一个结果集中再次查找,就会用到子查询。比如下面这样写

SELECT
    order_no,
    type_desc
FROM
    (
SELECT
    order_no,
    order_type,
    order_status,
CASE
    WHEN order_type = 1 THEN '生产订单'
    WHEN order_type = 2 THEN '更改订单'
    WHEN order_type = 3 THEN '废弃订单'
    ELSE '未知类型'
    END AS type_desc
FROM
    order_header
) t

下节课我们说一下 连接查询和常用到的分析函数,在企业中,单表查询情况是很少的,要关联查询。

插入数据

插入数据我们使用 INSERT 语句

INSERT INTO order_header ( order_no, order_type, order_status, order_date, createdon )
VALUES
    ( '2018102109', 2, '下达', sysdate( ), sysdate( ) )

看到,最下面就是我们新插入的一行

更新数据

更新数据使用 UPDATE 语句,我们更新一下刚才插入的数据的订单号

UPDATE order_header SET order_no = '112109' WHERE order_no = '2018102109'

我们把 订单号为‘2018102109‘的一行数据更新为了‘112109‘,在update时一定要写好 WHERE 条件,如果没有 WHERE 条件,会更新表中所有数据。

删除数据

我们删除刚才加入的一条数据

DELETE FROM order_header WHERE order_no = '112109'

运行后,订单号为‘112109‘的订单就被删除了,DELETE 时同样要写好 WHERE 条件,如果没有 WHERE 条件,会删除表中所有数据。

下节重点说说 多表连接,常用分析函数。不要走开哦。

原文地址:https://www.cnblogs.com/injet/p/10000372.html

时间: 2024-08-30 13:30:44

1 小时 SQL 极速入门(一)的相关文章

1 小时 SQL 极速入门(三)——分析函数

转自:https://www.cnblogs.com/injet/p/10122832.html 前面两篇我们从 SQL 的最基础语法讲起,到表联结多表查询.大家可以点击链接查看1 小时 SQL 极速入门(一)1 小时 SQL 极速入门(二)今天我们讲一些在做报表和复杂计算时非常实用的分析函数.由于各个数据库函数的实现不太一样,本文基于 Oracle 12c . ROW_NUMBER()函数 这个函数在平时用的还是比较多的.这个函数的作用是为分组内的每一行返回一个行号.我们还是举例来说明.假设我

1 小时 SQL 极速入门(二)

转自:https://www.cnblogs.com/injet/p/10061372.html 上篇我们说了 SQL 的基本语法,掌握了这些基本语法后,我们可以对单表进行查询及计算分析.但是一个大的系统,往往会有数十上百张表,而业务关系又错综复杂.我们要查的数据往往在好几张表中,而要从多张表中来获取信息就需要用到表联结了. 先说说什么是联结,联结就是用一条 SELECT 语句从多个表中查询数据.通过联结,让多张表中的数据互相关联起来.联结又分为内联结.左外联结.右外联结.全外联结.别怕,我知道

AppCan开发极速入门,从0开始!

由于种种原因而不能参加AppCan线下培训,遗憾! 不喜欢视频教程的单机节奏,苦恼! AppCan线上直播课堂,冲破时间.地域.空间限制,从0开始,教你如何极速入门AppCan移动开发! 本次线上直播内容以插件的使用.项目实战为主,将线下开发者培训课程进行精简,高效的呈现给大家, 6小时即可让你快速上手移动APP开发! PS:直播课堂中老师会按需求量进行大众问题的答疑,对课程有疑问的同学请将问题统统抛过来! 1.开播时间 3月24 日-3月25日(14:30-17:30) 2.必备知识 1).H

每篇半小时1天入门MongoDB——2.MongoDB环境变量配置和Shell操作

上一篇:每篇半小时1天入门MongoDB——1.MongoDB介绍和安装 配置环境变量 Win10系统为例 右键单击“此电脑”——属性——高级系统设置——高级——环境变量,添加C:\Program Files\MongoDB\Server\3.0\bin;.注意:要以;隔开各种变量. 这样的话就可以直接在CMD命令窗口中输入mongo 表示环境变量设置成功,并已经连接到默认数据库test中. 我们可以输入mongod --help来查看相关的帮助信息 C:\Users\zouqi>mongod

《Python黑客编程之极速入门》正式开课

玄魂 玄魂工作室 今天 之前开启了一个<Python黑客编程>的系列,后来中断了,内容当时设置的比较宽,不太适合入门.现在将其拆分成两个系列<Python黑客编程之极速入门>和<Python黑客编程之网络安全>,以便初学者有一个入门和提升的过程. 我们首先开启的是<Python黑客编程之极速入门>,考虑到学习质量的保证问题, 这次采用的是培训的方式,图文教程+课后练习+答疑+案例介绍+扩展阅读. 培训目前只面向我们知识星球内部成员(加入星球自动享受该课程权益

SparkSQL极速入门 整合Kudu实现广告业务数据分析

第1章 课程介绍&学习指南本章会对这门课程进行说明并进行学习方法介绍. 第2章 为什么要学SparkSpark作为近几年最火爆的大数据处理技术,是成为大数据工程师必备的技能之一.本章节将从如下几个方面对Spark进行一个宏观上的介绍:Spark产生背景.特性.环境部署.Spark与Hadoop的对比.Spark开发语言及运行模式等. 第3章 Spark SQL快速入门Spark SQL面世已来,深受小伙伴们的喜爱,继续为Spark用户提供高性能SQL on Hadoop解决方案,还为Spark带

1.SQL语句入门

--SQL语句入门-- --1.sql语言是解释语言 --2.它不区分大小写 --3.没有“”,所有字符或者字符串都使用''包含 --4.sql里面也有类似于c#的运算符 -- 算术运算符:+ - * / % -- 关系运算符:> < >= <= =(赋值与逻辑相等都是=), <> != -- 逻辑运算符:!(not)&&(and) || (or) --5.在sql中没有BOOL值的概念,也就意味着条件中不能写true/false 但是对于bit类型的值

SQL 存储过程入门(事务)(四)

SQL 存储过程入门(事务)(四) 本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我们插入的顺序是先插入A,再插入B表,如果都顺利插入成功了,当然没有问题,如果任意一张表插入失败了,而另一张表插入成功了,插入成功的表就是垃圾数据了.我们要判断,任意一张表插入失败都回滚,就是都不插入,这就是事务的基本使用. 一,sql事务定义 所谓事务是用户定义的一个数据库操作序列,是一个不可分割的工作

SQL从入门到基础&ndash;03 SQLServer基础1(主键选择、数据插入、数据更新)

一.SQL语句入门 1. SQL语句是和DBMS"交谈"专用的语句,不同DBMS都认SQL语法. 2. SQL语句中字符串用单引号. 3. SQL语句中,对于SQL关键字大小写不敏感,对于字符串值大小写敏感. 4. 创建表.删除表不仅可以手工完成,还可以执行SQL语句完成,在自动化部署.数据导入中用的很多,Create Table T_Person(Id int not NULL,Name nvarchar(50),Age int NULL).Drop Table T_Person1