前言
Lucifer,最新领导让我负责数据库开发,需要写SQL,但是我零基础没学过,有办法快速入门吗?
小美啊,SQL语言其实入门不难,我先来教你最简单的增删改查基础吧。
好的,我试试看,奥力给。
Ok,那我们先来一个最简单常用的SQL语句DUAL查询:SELECT SYSDATE FROM DUAL;
SELECT 365 * 24 FROM dual;
这个太实用了,以后计算器和日历都可以省了,哈哈哈。
是的,其实我们刚刚已经不经意的学习了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
);
SELECT语法,来查询一下这张表:
SELECT * FROM bookshelf;
嗯嗯,很形象,感觉自己就像个图书管理员一样,哈哈哈。
哈哈,没错,我们数据库管理员跟图书管理员可以说是异曲同工。好了,继续说放书吧,现在假设有一本书《飘》,作者:玛格丽特·米切尔,类型:长篇小说。现在通过 INSERT 将这本书放入书架上:
INSERT INTO bookshelf
(book_id,
book_name,
book_type,
author,
intime)
VALUES
(1,
'飘',
'长篇小说',
'玛格丽特·米切尔',
SYSDATE);
COMMIT;
insert into 表名 (需要插入的列名,用逗号隔开) values (对应列名的值);
太形象了,那如果我把书的作者写错了,那怎么办呢?再插入一条吗?
这个问题问的很好,因为人为的操作总会存在误差,因此提出了 改 和 删 两种操作。
UPDATE 表名 SET 列名 = 新的值;
DELETE FROM 表名;
UPDATE bookshelf SET author='Margaret Mitchell';
COMMIT;
DELETE FROM bookshelf;
COMMIT;
lucifer,你讲的很明了,我现在已经懂了增删改查四种操作了,迫不及待想要动手开始操作了!
小美,先别急,你没有发现一个严重的问题吗?如果书架上不止一本书呢?那你怎么对指定的那本书进行操作呢?有思考过吗?
对哦,上面都是演示的一本书,如果有多本书,是不是也有对应的操作可以来筛选呢?
没错,很聪明。现在隆重有请 WHERE 查询条件登场。正如上面所说,WHERE 子句用于提取那些满足指定条件的记录
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;
懂了懂了,lucifer,我现在是不是可以去开发了?好像练练手啊!!!
嗯。现在只能说是入门了,会简单的增删改查是数据库开发的第一部,所有的数据库操作都是基于SQL语言的。
好的好的。有问题了,我在继续问你,谢谢lucifer!!!Thanks♪(・ω・)ノ。
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;
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;

