当前位置: 首页 > news >正文

SQL:我能玩出这花样儿?

转载请注明以下内容:
来源:公众号【杰哥的IT之旅】
作者:三笠
ID:Jake_Internet

前言

SQL是什么?

官方解释: SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。

SQL能用来干什么?

通俗的讲: 让您可以访问和处理数据库,包括数据插入、查询、更新和删除。

SQL

下面让我们看看小美是如何零基础学习SQL的:

Lucifer,最新领导让我负责数据库开发,需要写SQL,但是我零基础没学过,有办法快速入门吗?

小美啊,SQL语言其实入门不难,我先来教你最简单的增删改查基础吧。

好的,我试试看,奥力给。

Ok,那我们先来一个最简单常用的SQL语句DUAL查询:SELECT SYSDATE FROM DUAL;

sysdate

使用这个SQL语句可以查看数据库当前时间,当然也可以把 SYSDATE 换成任意东西。

例如:

计算器:SELECT 365 * 24 FROM dual;

计算器

这个SQL我们在开发中会经常用到,作为入门第一个SQL轻松有趣。小美,你觉得难吗?

这个太实用了,以后计算器和日历都可以省了,哈哈哈。

是的,其实我们刚刚已经不经意的学习了SQL语言增删改查中的 查 操作了。接下来,我要介绍一个新的对象:表 :是相关的数据项的集合,它由列和行组成。通俗的讲,数据库相当于图书馆,表就类似于其中的一个个书架,表数据就类似于一本本书。我们查询数据库表的数据,就好比我们进入图书馆去找一本喜欢的书。我这么说,你能理解吗?

查 的基本语法:select * from 表名;

可以可以,这个比喻我一下子就听懂了,原来数据库查询是这样的,那表是怎么创建的呢?

不要着急,先来介绍一下数据库中最常用的3个数据类型:NUMBER,VARCHAR2,DATE,分别为数字型,字符型,日期型。顾名思义,即用来定义表中列字段用来存放数据的类型。

数据类型

嗯嗯,这个能理解,跟java,C 好像有些相似。

嗯嗯。理解了这个,就可以开始建表了,现在来创建一个简单的图书馆书架表。

CREATE TABLE bookshelf
(
BOOK_ID NUMBER,
BOOK_NAME VARCHAR2(100),
BOOK_TYPE VARCHAR2(100),
AUTHOR VARCHAR2(100),
INTIME DATE
);

表名为:bookshelf,有列:图书id,图书名称,图书类型,作者,入库时间。通过上面学习的 SELECT语法,来查询一下这张表:

SELECT * FROM bookshelf;

查询图书表

可以发现,新建的bookshelf表没有任何记录。现在,图书馆里已经增加一个空的书架,是不是需要将书放入书架上呢?这时就需要用到 操作了。

嗯嗯,很形象,感觉自己就像个图书管理员一样,哈哈哈。

哈哈,没错,我们数据库管理员跟图书管理员可以说是异曲同工。好了,继续说放书吧,现在假设有一本书《飘》,作者:玛格丽特·米切尔,类型:长篇小说。现在通过 INSERT 将这本书放入书架上:

INSERT INTO bookshelf 
(book_id,
book_name,
book_type,
author,
intime)
VALUES
(1,
'飘',
'长篇小说',
'玛格丽特·米切尔',
SYSDATE);
COMMIT;

的基本语法:insert into 表名 (需要插入的列名,用逗号隔开) values (对应列名的值);

插入数据

通过sql查询发现,这本书《飘》已经放入了书架上,可供大家借用和查看。

太形象了,那如果我把书的作者写错了,那怎么办呢?再插入一条吗?

这个问题问的很好,因为人为的操作总会存在误差,因此提出了 改 和  删 两种操作。

的基本语法:UPDATE 表名 SET 列名 = 新的值;

的基本语法:DELETE FROM 表名;

现在来模拟一下场景:

1、修改作者名:

UPDATE bookshelf SET author='Margaret Mitchell';
COMMIT;

修改作者名

2、下架图书:

DELETE FROM bookshelf;
COMMIT;

图书下架

通过以上两个场景,演示了 和   两种操作。

lucifer,你讲的很明了,我现在已经懂了增删改查四种操作了,迫不及待想要动手开始操作了!

小美,先别急,你没有发现一个严重的问题吗?如果书架上不止一本书呢?那你怎么对指定的那本书进行操作呢?有思考过吗?

对哦,上面都是演示的一本书,如果有多本书,是不是也有对应的操作可以来筛选呢?

没错,很聪明。现在隆重有请 WHERE 查询条件登场。正如上面所说,WHERE 子句用于提取那些满足指定条件的记录




举个栗子

先上架3本书:

INSERT INTO bookshelf (book_id,book_name,book_type,author,intime) VALUES (1,'飘','长篇小说','玛格丽特·米切尔',SYSDATE);
INSERT INTO bookshelf (book_id,book_name,book_type,author,intime) VALUES (2,'倾城之恋','爱情小说','张爱玲',SYSDATE);
INSERT INTO bookshelf (book_id,book_name,book_type,author,intime) VALUES (3,'从你的全世界路过','短篇小说','张嘉佳',SYSDATE);
COMMIT;

插入数据

查看《倾城之恋》:

SELECT * FROM bookshelf WHERE BOOK_NAME = '倾城之恋';

查看《倾城之恋》

更新《飘》:

UPDATE bookshelf SET author='Margaret Mitchell' WHERE book_name = '飘';
COMMIT;

更新《飘》

删除《从你的全世界路过》:

DELETE FROM bookshelf WHERE book_name = '从你的全世界路过';
COMMIT;

删除《从你的全世界路过》

通过上面的几个栗子????,应该能很好的理解 WHERE 查询条件的使用了。

懂了懂了,lucifer,我现在是不是可以去开发了?好像练练手啊!!!

嗯。现在只能说是入门了,会简单的增删改查是数据库开发的第一部,所有的数据库操作都是基于SQL语言的。

好的好的。有问题了,我在继续问你,谢谢lucifer!!!Thanks♪(・ω・)ノ。

另外,这跟大家分享三个一句SQL画图的趣味小玩意儿:

五角星:

WITH a AS
 (SELECT DISTINCT round(SUM(x) over(ORDER BY n)) x,
                  round(SUM(y) over(ORDER BY n)) y
    FROM (SELECT n,
                 cos(trunc(n / 20) * (1 - 1 / 5) * 3.1415926) * 2 x,
                 sin(trunc(n / 20) * (1 - 1 / 5) * 3.1415926) y
            FROM (SELECT rownum - 1 n
                    FROM all_objects
                   WHERE rownum <= 20 * 5)))
SELECT REPLACE(sys_connect_by_path(point,
                                   '/'),
               '/',
               NULL) star
  FROM (SELECT b.y,
               b.x,
               decode(a.x,
                      NULL,
                      ' ',
                      '*') point
          FROM a,
               (SELECT *
                  FROM (SELECT rownum - 1 + (SELECT MIN(x)
                                               FROM a) x
                          FROM all_objects
                         WHERE rownum <= (SELECT MAX(x) - MIN(x) + 1
                                            FROM a)),
                       (SELECT rownum - 1 + (SELECT MIN(y)
                                               FROM a) y
                          FROM all_objects
                         WHERE rownum <= (SELECT MAX(y) - MIN(y) + 1
                                            FROM a))) b
         WHERE a.x(+) = b.x
           AND a.y(+) = b.y)
 WHERE x = (SELECT MAX(x)
              FROM a)
 START WITH x = (SELECT MIN(x)
                   FROM a)
CONNECT BY y = PRIOR y
       AND x = PRIOR x + 1;

五角星

调整期中数字5, 你还可以输出7角星, 9角星。

奥运五环:

WITH a AS
 (SELECT DISTINCT round(a.x + b.x) x,
                  round(a.y + b.y) y
    FROM (SELECT (SUM(x) over(ORDER BY n)) x,
                 round(SUM(y) over(ORDER BY n)) y
            FROM (SELECT n,
                         cos(n / 30 * 3.1415926) * 2 x,
                         sin(n / 30 * 3.1415926) y
                    FROM (SELECT rownum - 1 n
                            FROM all_objects
                           WHERE rownum <= 30 + 30))) a,
         (SELECT n,
                 (SUM(x) over(ORDER BY n)) x,
                 round(SUM(y) over(ORDER BY n)) y
            FROM (SELECT n,
                         cos(m / 3 * 3.1415926) * 2 * 15 x,
                         sin(m / 3 * 3.1415926) * 15 y
                    FROM (SELECT CASE
                                   WHEN rownum <= 2 THEN
                                    3
                                   WHEN rownum = 3 THEN
                                    -2
                                   ELSE
                                    -6
                                 END m,
                                 rownum - 1 n
                            FROM all_objects
                           WHERE rownum <= 5))) b)
SELECT REPLACE(sys_connect_by_path(point,
                                   '/'),
               '/',
               NULL) star
  FROM (SELECT b.y,
               b.x,
               decode(a.x,
                      NULL,
                      ' ',
                      '*') point
          FROM a,
               (SELECT *
                  FROM (SELECT rownum - 1 + (SELECT MIN(x)
                                               FROM a) x
                          FROM all_objects
                         WHERE rownum <= (SELECT MAX(x) - MIN(x) + 1
                                            FROM a)),
                       (SELECT rownum - 1 + (SELECT MIN(y)
                                               FROM a) y
                          FROM all_objects
                         WHERE rownum <= (SELECT MAX(y) - MIN(y) + 1
                                            FROM a))) b
         WHERE a.x(+) = b.x
           AND a.y(+) = b.y)
 WHERE x = (SELECT MAX(x)
              FROM a)
 START WITH x = (SELECT MIN(x)
                   FROM a)
CONNECT BY y = PRIOR y
       AND x = PRIOR x + 1;

奥运五环

打印当月日历:

SELECT MAX(decode(dow,
                  1,
                  d,
                  NULL)) sun,

       MAX(decode(dow,
                  2,
                  d,
                  NULL)) mon,

       MAX(decode(dow,
                  3,
                  d,
                  NULL)) tue,

       MAX(decode(dow,
                  4,
                  d,
                  NULL)) wed,

       MAX(decode(dow,
                  5,
                  d,
                  NULL)) thu,

       MAX(decode(dow,
                  6,
                  d,
                  NULL)) fri,

       MAX(decode(dow,
                  7,
                  d,
                  NULL)) sat

  FROM (SELECT rownum d,

               rownum - 2 + to_number(to_char(trunc(SYSDATE,
                                                    'MM'),
                                              'D')) p,

               to_char(trunc(SYSDATE,
                             'MM') - 1 + rownum,
                       'D') dow

          FROM all_objects

         WHERE rownum <=

               to_number(to_char(last_day(to_date(SYSDATE)),
                                 'DD')))

 GROUP BY trunc(p / 7)

 ORDER BY sun NULLS FIRST;

打印日历

推荐阅读

《数据库高效优化》

推荐理由

本书内含100多个真实案例,以实战为主,以指导读者打造无错、稳定、快速运行的数据库为根本目的。

本书内容全面,从SQL优化、架构设计、开发规范、平台审核等多个角度展开,可以作为DBA日常工作中处理常见问题的备查手册。


扫码关注【华章计算机】视频号

每天来听华章哥讲书

更多精彩回顾

书讯 | 6月书讯 | 初夏,正好读新书

资讯 | 《数据安全法》表决通过!最新解读来了

书单 | 8本书助你零基础转行数据分析岗

干货 | 阿里云官方出品:全面总结阿里云云原生架构方法论与实践经验

收藏 | 手把手教你利用JS给图片打马赛克

上新 | 【新书速递】深入浅出联邦学习

赠书 | 【第60期】5G及现代通信领域不可不读的8本好书

点击阅读全文购买

相关文章:

  • Nginx 架构浅析
  • 【第61期】盘点云计算领域不可不读的9本书
  • 【新书速递】重磅!混沌工程权威指南
  • 当机器学习遇上隐私保护,聊聊联邦学习和分布式机器学习
  • 什么是标签?跟数据中台有什么关系?终于有人讲明白了
  • 7月书讯(上)| 读书开启下半年
  • 终于有人把卷积神经网络(CNN)讲明白了
  • 7月书讯(下)| 读书开启下半年
  • 数据中台、标签、数据资产相关的15个名词解释
  • 【新书速递】深入理解Nginx底层原理与设计,轻松应对高并发
  • CSAPP,永远滴神!
  • 周志明:《凤凰架构:构建可靠的大型分布式系统》
  • 【第62期】学会数据分析,抢占职场风口机遇
  • 腾讯数据科学家详解用户选择行为分析核心模型
  • 【新书速递】人人可懂的深度学习
  • 分享一款快速APP功能测试工具
  • 08.Android之View事件问题
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • canvas绘制圆角头像
  • CSS相对定位
  • ECMAScript6(0):ES6简明参考手册
  • Fabric架构演变之路
  • node-glob通配符
  • Python语法速览与机器学习开发环境搭建
  • Redis中的lru算法实现
  • SQLServer之创建数据库快照
  • 从重复到重用
  • 代理模式
  • 坑!为什么View.startAnimation不起作用?
  • 前端面试题总结
  • 运行时添加log4j2的appender
  • const的用法,特别是用在函数前面与后面的区别
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #Linux(Source Insight安装及工程建立)
  • ${factoryList }后面有空格不影响
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (k8s中)docker netty OOM问题记录
  • (Ruby)Ubuntu12.04安装Rails环境
  • (编译到47%失败)to be deleted
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (三分钟)速览传统边缘检测算子
  • (一)80c52学习之旅-起始篇
  • (一)appium-desktop定位元素原理
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • .Family_物联网
  • .NET : 在VS2008中计算代码度量值
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 依赖注入和配置系统