当前位置 博文首页 > LuciferLiu_DBA:SQL零基础入门,一文带你轻松学会增删改查!
SQL是什么?
官方解释: SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。
SQL能用来干什么?
通俗的讲: 让您可以访问和处理数据库,包括数据插入、查询、更新和删除。
下面让我们看看小美是如何零基础学习SQL的:
👸小美:Lucifer,最新领导让我负责数据库开发,需要写SQL,但是我零基础没学过,有办法快速入门吗?
🙉Lucifer:小美啊,SQL语言其实入门不难,我先来教你最简单的增删改查基础吧。
👸小美:好的,我试试看,奥力给。
🙉Lucifer:Ok,那我们先来一个最简单常用的SQL语句DUAL查询: SELECT SYSDATE FROM DUA;
。
使用这个SQL语句可以查看数据库当前时间,当然也可以把 SYSDATE 换成任意东西。
例如:
计算器:SELECT 365 * 24 FROM dual;
这个SQL我们在开发中会经常用到,作为入门第一个SQL轻松有趣。小美,你觉得难吗?
👸小美:这个太实用了,以后计算器和日历都可以省了,哈哈哈。
🙉Lucifer:是的,其实我们刚刚已经不经意的学习了SQL语言增删改查中的 查 操作了。接下来,我要介绍一个新的对象:表 :是相关的数据项的集合,它由列和行组成。通俗的讲,数据库相当于图书馆,表就类似于其中的一个个书架,表数据就类似于一本本书。我们查询数据库表的数据,就好比我们进入图书馆去找一本喜欢的书。我这么说,你能理解吗?
查 的基本语法:select * from 表名;
👸小美:可以可以,这个比喻我一下子就听懂了,原来数据库查询是这样的,那表是怎么创建的呢?
🙉Lucifer:不要着急,先来介绍一下数据库中最常用的3个数据类型:NUMBER,VARCHAR2,DATE,分别为数字型,字符型,日期型。顾名思义,即用来定义表中列字段用来存放数据的类型。
👸小美:嗯嗯,这个能理解,跟java,C 好像有些相似。
🙉Lucifer:嗯嗯。理解了这个,就可以开始建表了,现在来创建一个简单的图书馆书架表。
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表没有任何记录。现在,图书馆里已经增加一个空的书架,是不是需要将书放入书架上呢?这时就需要用到 增 操作了。
👸小美:嗯嗯,很形象,感觉自己就像个图书管理员一样,哈哈哈。
🙉Lucifer:哈哈,没错,我们数据库管理员跟图书管理员可以说是异曲同工。好了,继续说放书吧,现在假设有一本书《飘》,作者:玛格丽特·米切尔,类型:长篇小说。现在通过 INSERT
将这本书放入书架上:
INSERT INTO bookshelf
(book_id,
book_name,
book_type,
author,
intime)
VALUES
(1,
'飘',
'长篇小说',
'玛格丽特·米切尔',
SYSDATE);
COMMIT;
增 的基本语法:insert into 表名 (需要插入的列名,用逗号隔开) values (对应列名的值);
通过sql查询发现,这本书《飘》已经放入了书架上,可供大家借用和查看。
👸小美:太形象了,那如果我把书的作者写错了,那怎么办呢?再插入一条吗?
🙉Lucifer:这个问题问的很好,因为人为的操作总会存在误差,因此提出了 改 和 删 两种操作。
改 的基本语法: UPDATE 表名 SET 列名 = 新的值;
删 的基本语法: DELETE FROM 表名;
现在来模拟一下场景:
1、修改作者名:
UPDATE bookshelf SET author='Margaret Mitchell';
COMMIT;
2、下架图书:
DELETE FROM bookshelf;
COMMIT;
通过以上两个场景,演示了 改 和 删 两种操作。
👸小美:lucifer,你讲的很明了,我现在已经懂了增删改查四种操作了,迫不及待想要动手开始操作了!
🙉Lucifer:小美,先别急,你没有发现一个严重的问题吗?如果书架上不止一本书呢?那你怎么对指定的那本书进行操作呢?有思考过吗?
👸小美:啊!对哦,上面都是演示的一本书,如果有多本书,是不是也有对应的操作可以来筛选呢?
🙉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,我现在是不是可以去开发了?好像练练手啊!!!
🙉Lucifer:嗯。现在只能说是入门了,会简单的增删改查是数据库开发的第一部,所有的数据库操作都是基于SQL语言的。
👸小美:好的好的。有问题了,我在继续问你,谢谢lucifer!!!Thanks?(・ω・)ノ。
文末,赠送给各位看官几个一句SQL画图的趣味小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.