当前位置: 首页 > 后端技术 > Node.js

MySql入门-(二)

时间:2023-04-03 23:02:05 Node.js

最近刚开始学习Mysql,但是学习MySql的必备流程之一就是SQL语句。只能根据文档从头学习SQL语句。学习的过程是痛苦的,但学习的结果是甜蜜的。SQL语法所有SQL语句都以下列关键字之一开头:SELECT、INSERT、UPDATE、DELETE、ALTER、DROP、CREATE、USE、SHOW,并以分号(;)结尾。有一点需要特别注意:SQL是不区分大小写的,也就是说,SELECT和select在SQL语句中的含义是一样的。但是,MySQL在涉及表名时不遵循此规则。所以,如果你使用的是MySQL,你需要在程序中严格按照它们在数据库中的名字来使用。在SQL语句中使用*表示通配符。SELECTSELECT关键字用于从数据中查询数据。语法SELECTqueryfieldFROMtablename;//查询id,nameloglists表中的两个字段SELECTid,nameFROM`loglists`;SELECTDISTINCTSELECTDISTINCT语句用于返回唯一不同的值。语法SELECTDISTINCTqueryfieldFROMtablename;//查询loglists表中的内容和name都是不同的数据SELECTDISTINCTcontent,nameFROM`loglists`;如果SELECTDISTINCT查询多个字段,则会根据这些字段中的当前值所有不同的数据。使用时需要注意的是,主键的唯一性不能作为查询条件。WHEREWHERE子句用于提取那些满足指定条件的记录。语法SELECTqueryfieldFROMtablenameWHEREquerycondition;//查询loglists表中内容为111的数据,查询字段包括content,name,idSELECTcontent,name,idFROMloglistsWHEREcontent="111";AND第一个条件和第二个条件都为真,AND运算符显示一条记录。语法SELECTqueryfieldFROMtablenameWHEREconditionANDcondition;//查询loglists表中content="111"且id<=150的数据,查询字段包括id,content,nameSELECTid,content,nameFROMloglistsWHERE内容=“111”和id<=150;如果有多个条件,可以连续进行AND查询。OR只要第一个条件和第二个条件之一为真,OR运算符就会显示一条记录。语法SELECTqueryfieldFROMtablenameWHEREconditionORcondition;//查询loglists表中content="111"或id<=150的数据,查询字段包括id,content,nameSELECTid,content,nameFROMloglists其中content="111"或id<=150;如果有多个条件,可以连续进行OR查询。AND和OR一起使用。//查询loglists表中content="111"andid<=150orname="111"的数据,查询数据包括id,content,nameSELECTid,content,nameFROMloglistsWHEREcontent="111"ANDid<=150或name="111";ORDERBYORDERBY关键字用于对结果集进行排序。先对查询值的列进行排序,相同CN的行在前,相同USA的行在后。然后在这些属于CN的多行数据中,按照alexa值的大小进行排列。按ORDERBY排序时,如果不指定ASCDESC,默认为ASC。ASC升序DESC降序语法SELECTfieldFROMtablenameORDERBYfieldASC|DESC;//查询loglists包括字段id,content,name//先按name升序排序,再根据内容查询成块,并按降序排序SELECTid,content,nameFROMloglistsORDERBYnameASC,contentDESC;INSERTINTOINSERTINTO语句用于将新记录插入表中。语法INSERTINTOtablename(addfield)VALUES(value);//给loglists添加一个数据字段,有name、content、text值"aaron","my'saaron","haha"INSERTINTOloglists(name,内容,文本)VALUES(“亚伦”,“我的亚伦”,“哈哈”);下面也是用条件查询插入一条数据//插入一条数据到loglists中//插入的数据是loglists表中的content=123INSERTINTOloglists的结构SELECT*FROMloglistsWHEREcontent="123";上面的写法需要注意:inserted表和found表中的主键不能相同,如果相同,查询表有多条数据时会报错,会重复添加多条数据。UPDATEUPDATE语句必须存在于表中才能更新表中的记录。语法UPDATE表示SET更新数据(name="liergou")WHERE条件;//更新loglists表//name="liergou",text="eroguzi",content="ok"//根据id=1或text="999"//查找数据并更新UPDATEloglistsSETname="liergou",text="eroguzi",content="ok"WHEREid=1ORtext="999";DELETEDDELETE语句用于删除记录在桌子。语法DELETEFROM表名WHERE查询条件;//删除loglists中id=1或text="angie"的数据DELETEFROMloglistsWHEREid=1ORtext="angie";删除所有数据:DELETEFROMtable_name;DELETE*FROMtable_name;++友情提示:删除记录时要格外小心!因为你不能重来一遍!++LIMIT拦截查询数据。语法SELECT字段FROM表名ORDERBY查询字段ASCLIMIT截取的数字;//在loglists表中//按照id升序,截取1-3位SELECT*FROMloglistsORDERBYidASCLIMIT3;如果LIMIT后面只有一个数,默认在1-n之间。在看SQL语句的时候,看到了一条TOP语句,但是在使用Mysql的时候,报错了。Mysql中实现了类似的TOP语句:SELECT*FROMloglistsORDERBYidASCLIMIT1,3;LIKELIKE运算符用于在WHERE子句的列中搜索指定模式。语法SELECT字段FROM表名WHERE搜索字段LIKE条件;//查询loglists表中的文本字段//文本包含一个字母//包括所有字段SELECT*FROMloglistsWHEREnameLIKE"%a%";模糊搜索规则:'%a':以a%结尾的数据:以a%a%开头的数据:包含a的数据:三个数字且中间字母为a'_a':两个数字和结尾字母是a的'a_':以a开头的两位数字的ININ运算符允许在WHERE子句中指定多个值。语法SELECTfieldFROMtablenameWHEREqueryfieldinquerycondition;//查询loglists中name字段为a或b的数据SELECT*FROMloglistsWHEREnamein("a","b");如果不使用IN运算符也可实现:SELECT*FROMloglistsWHEREname="a"ORname="b";这种写法和上面的是等价的。BETWEENBETWEEN运算符用于选择两个值之间的数据范围内的值。语法SELECTfieldfrom表示WHEREconditionfieldBETWEENcondition1ANDcondition2;//查询loglists表中id在9-11之间的数据SELECT*fromloglistsWHEREidBETWEEN9AND11;JOIN和INNERJOINjoin用于合并来自Join两个或多个表的行的数据。INNERJOIN1生成的结果集是表1和表2的交集。语法SELECTfield(loglists.id)FROMtable1INNERJOINtable2ONcondition;//查询loglists和children表//loglists.id和children.cid相同的数据//查询字段为//loglists.id,//loglists.name,//children.age,//loglists.content,//loglists.textSELECTl.id,l.name,c.age,l.content,l.textFROMloglistsASlINNERJOINchildrenAScONl.id=c.cid;LEFTJOINLEFTJOIN关键字返回左表(table1)中的所有行,即使右表(table2)中没有匹配项。如果右表中没有匹配项,则结果为NULL。语法SELECTfieldFROMtable1LEFTJOINtable2ONcondition;//查询loglists和children表//loglists.id和children.cid相同的数据//查询字段为//loglists.id,//loglists.name,//children.age,//loglists.content,//loglists.textSELECTl.id,l.`name`,c.age,l.text,l.contentFROMloglistsASlLEFTJOINchildrenAScONl.id=c.age;查询数据如下:idnameagetextcontent12aaron12profilenothing13angienullprofilesomethingRIGHTJOINRIGHTJOIN关键字返回右表(table2)中的所有行,即使左表(table1)中没有匹配项。如果左表中没有匹配项,则结果为NULL。语法SELECTfieldFROMtable1RIGHTJOINtable2ONcondition;//查询loglists和children表//loglists.id和children.cid是同一个数据//查询字段是//loglists.id,//loglists.name,//children.age,//loglists.content,//loglists.textSELECTl.id,c.age,l.`name`,l.text,l.contentFROMloglistsASlRIGHTJOINchildrenAScONl.id=c.age;查询数据如下:idnameagetextcontent12aaron12IntroductionNothingnullnull55nullnullnullnull77nullnull总结做了一些笔记,虽然很基础,但我觉得很实用。如有错误,请在下方留言,我会尽快修改。