当前位置: 首页 > 科技观察

SQL:我可以玩这个把戏吗?

时间:2023-03-13 00:51:27 科技观察

本文转载自微信公众号《杰哥的IT之旅》,作者三笠。转载本文请联系蔡杰哥IT游公众号。前言什么是SQL?官方解释:SQL(StructuredQueryLanguage:结构化查询语言)用于管理关系数据库管理系统(RDBMS)。SQL可以用来做什么?通俗地说:允许您访问和处理数据库,包括数据插入、查询、更新和删除。来看看小美零基础是怎么学SQL的:女:Lucifer,最近领导让我负责数据库开发,需要写SQL,但我零基础没学过SQL。有没有快速入门的方法?男:小梅啊,SQL语言其实入门不难,先教你最简单的增删改查基础知识。女:好的,我试试看,奥力。男:好的,那我们就从最简单最常用的SQL语句DUAL查询开始:SELECTSYSDATEFROMDUAL;sysdate这个SQL语句用来查看数据库的当前时间,当然你也可以把SYSDATE换成任何东西。例如:计算器:SELECT365*24FROMdual;我们在开发中会经常用到计算器的SQL,作为入门的第一个SQL,简单又有趣。小美,你觉得难吗?女:太实用了,我以后可以把计算器和万年历省下来了,哈哈哈。男:是的,其实我们只是无意中学习了SQL语言增删改查中的查询操作。接下来,我要介绍一个新的对象:表:是相关数据项的集合,由列和行组成。通俗地说,数据库相当于图书馆,表就像书架,表数据就像书。我们查询数据库表中的数据,就像我们去图书馆找一本喜欢的书一样。你能明白我说的吗?检查的基本语法:select*fromtablename;女:对,这个比喻我一下子就明白了。原来数据库查询是这样的,那么表是怎么创建的呢?男:别着急,先介绍一下数据库中最常用的三种数据类型:NUMBER、VARCHAR2、DATE,分别是数字型、字符型和日期型。顾名思义,它用于定义用于存储数据的表中列字段的类型。数据类型女:嗯,这个可以理解,好像和java、C有点类似。男:嗯。了解这些之后,就可以开始建表了。现在让我们创建一个简单的图书馆书架表。创建表书架(BOOK_IDNUMBER,BOOK_NAMEVARCHAR2(100),BOOK_TYPEVARCHAR2(100),AUTHORVARCHAR2(100),INTIMEDATE);表名为:bookshelf,列有:bookid,书名,书类型,作者,存放时间。使用上面学到的SELECT语法来查询这个表:SELECT*FROMbookshelf;查询books表,发现新建的bookshelf表没有任何记录。现在,图书馆里多了一个空书架,还需要把书放在书架上吗?这时候我们就需要用到增加操作。女:嗯,很形象,有图书管理员的感觉,哈哈哈。男:哈哈,对,我们数据库管理员和图书管理员可以说是志同道合。好了,继续说出书吧,现在假设有一本书《飘》,作者:MargaretMitchell,类型:小说。现在通过INSERT把书放在书架上:INSERTINTObookshelf(book_id,book_name,book_type,author,intime)VALUES(1,'GonewiththeWind','Novel','MargaretMitchell',SYSDATE);COMMIT;的基本语法addition:insertintotablename(要插入的列名,用逗号分隔)values(列名对应的值);通过sql查询插入数据,这本书?已经放在书架上了,大家可以借阅查看。女:太生动了,写错书的作者怎么办?我可以插入另一个吗?男:这个问题很好,因为人为操作总会有错误,所以建议修改一下。删除两个操作。修改的基本语法:UPDATE表名SET列名=新值;删除的基本语法:DELETEFROM表名;现在模拟场景:1.修改作者姓名:UPDATEbookshelfSETauthor='MargaretMitchell';犯罪;修改作者姓名2、删除书架:DELETEFROMbookshelf;犯罪;图书删除通过以上两个场景演示了修改和删除两个操作。女:路西法,你说的很清楚。增删改查四个操作我都已经看懂了,迫不及待的开始操作了!男:小美,别着急,你没发现大问题吗?如果书架上有不止一本书吗?那么如何操作指定的书呢?你想过吗?女:对,上面是演示书。如果有多本书,是否有对应的一本?操作可以用来筛选吗?男:对,很聪明。下面介绍一下WHERE查询条件。如前所述,WHERE子句用于提取那些满足指定条件的记录,并首先将3本书放在书架上:INSERTINTObookshelf(book_id,book_name,book_type,author,intime)VALUES(1,'乱世佳人','小说','MaGreetMitchell',SYSDATE);INSERTINTObookshelf(book_id,book_name,book_type,author,intime)VALUES(2,'倾城之恋','爱情小说','张爱玲',SYSDATE);INSERTINTObookshelf(book_id,book_name,book_type,author,intime)VALUES(3、《路过你的世界》、《短篇》、《张佳佳》、SYSDATE);犯罪;插入数据查看《倾城之恋》:SELECT*FROMbookshelfWHEREBOOK_NAME='倾城之恋';查看《倾城之恋》更新《飘》:更新bookshelfSETauthor='MargaretMitchell'WHEREbook_name='乱世佳人';COMMIT;通过上面的几个栗子??,大家应该能很好的理解WHERE查询条件的使用了。女:明白了明白了,路西法,我现在可以发育了吗?好像在练!!!男:是的。现在只能说是入门了。简单的增删改查是数据库开发的第一部分。所有的数据库操作都是基于SQL语言。女:好的好的。我有个问题,我会继续问你,谢谢lucifer!!!Thanks?(?ω?)?。另外给大家分享三个有趣的单句SQL画图的小工具:SELECTn,cos(trunc(n/20)*(1-1/5)*3.1415926)*2x,sin(trunc(n/20)*(1-1/5)*3.1415926)yFROM(SELECTrownum-1nFROMall_objectsWHERErownum<=20*5)))SELECTREPLACE(sys_connect_by_path(point,'/'),'/',NULL)starFROM(SELECTb.y,b.x,decode(a.x,NULL,'','*')pointFROMa,(SELECT*FROM(SELECTrownum-1+(SELECTMIN(x)FROMa)xFROMall_objectsWHERErownum<=(SELECTMAX(x)-MIN(x)+1FROMa)),(SELECTrownum-1+(SELECTMIN(y)FROMa)yFROMall_objectsWHERErownum<=(SELECTMAX(y)-MIN(y)+1FROMa)))bWHEREa.x(+)=b.xANDa.y(+)=b.y)WHEREx=(SELECTMAX(x)FROMa)STARTWITHx=(SELECTMIN(x)FROMa)CONNECTBYy=PRIORyANDx=优先x+1;五角星调整期间数字5,还可以输出7角星和9角星。奥运五环:WITHaAS(SELECTDISTINCTround(a.x+b.x)x,round(a.y+b.y)yFROM(SELECT(SUM(x)over(ORDERBYn))x,round(SUM(y)over(ORDERBYn))yFROM(SELECTn,cos(n/30*3.1415926)*2x,sin(n/30*3.1415926)yFROM(SELECTrownum-1nFROMall_objectsWHERErownum<=30+30)))a,(SELECTn,(SUM(x)over(ORDERBYn))x,round(SUM(y)over(ORDERBYn))yFROM(SELECTn,cos(m/3*3.1415926)*2*15x,sin(m/3*3.1415926)*15yFROM(SELECTCASEWHENrownum<=2THEN3WHENrownum=3THEN-2ELSE-6ENDm,rownum-1nFROMall_objectsWHERErownum<=5)))b)SELECTREPLACE(sys_connect_by_path(point,'/'),'/',NULL)starFROM(SELECTb.y,b.x,decode(a.x,NULL,'','*')pointFROMa,(SELECT*FROM(SELECTrownum-1+(SELECTMIN(x)FROMa)xFROMall_objectsWHERErownum<=(SELECTMAX(x)-MIN(x)+1FROMa)),(SELECTrownum-1+(SELECTMIN(y)FROMa)yFROMall_objectsWHERErownum<=(SELECTMAX(y)-MIN(y)+1FROMa)))bWHEREa.x(+)=b.xANDa.y(+)=b.y)WHEREx=(SELECTMAX(x)FROMa)STARTWITHx=(SELECTMIN(x)FROMa)CONNECTBYy=PRIORyANDx=PRIORx+1;奥运五环打印当月历:SELECTMAX(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))satFROM(SELECTrownumd,rownum-2+to_number(to_char(trunc(SYSDATE,'MM'),'D'))p,to_char(trunc(SYSDATE,'MM')-1+rownum,'D')dowFROMall_objectsWHERErownum<=to_number(to_char(last_day(to_date(SYSDATE)),'DD')))GROUPBYtrunc(p/7)ORDERBYsunNULLSFIRST;打印日历