应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

三万字把SQL数据库的所有命令,函数,运算符讲得透彻,内容丰

  前言
  大家可能不习惯SQL大写的习惯,但是真正的规范就是要大写,所以大家要慢慢习惯我用大写的方式讲解。在下面所有的讲解中,我将会以基本语法,案例,联系形式讲解,从而加强对每一个语句的使用和认识。本篇文章是笔者整理了整整一个通宵才写出,希望大家三连好评,谢谢。当然,拥有本篇文章,你将会完全掌握mysql的所有命令使用,不再用去购买或者杂乱学习。本篇内容暂时讲解数据库的筛选部分,因为数据库的最初入门如创建,备份等都有讲过,魔法传送:传送门该传送门内容有:
  MYSQL最重要的命令SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERTINTO将新数据插入数据库CREATEDATABASE创建一个新的数据库ALTERDATABASE修改数据库CREATETABLE创建一个新表ALTERTABLE修改表DROPTABLE删除表CREATEINDEX创建索引(搜索键)DROPINDEX删除索引
  SELECT选择语句
  该SELECT语句用于从数据库中选择数据。返回的数据存储在一个结果表中,称为结果集。SELECT语法:SELECTcolumn1,column2,。。。
  此处,column1、column2、是要从中选择数据的表的字段名称。如果要选择表中的所有可用字段,请使用以下语法:SELECTFROMtablename;
  假设我们已经有一个数据库Customers如下:
  SELECT列示例
  以下SQL语句从Customers表中选择CustomerName和City列:SELECTCustomerName,CityFROMCustomers;
  SELECT示例以下SQL语句从Customers表中选择所有列:SELECTFROMCustomers;
  练习题:1获取Customers表中的所有列。SELECTFROMCustomers;
  2编写一条语句,City从Customers表中选择列。SELECTCityFROMCustomers;
  3从Customers表中的Country列中选择所有不同的值。(下面会讲,不懂没关系)SELECTDISTINCTCountryFROMCustomers;
  SELECTDISTINCT选择不同语句
  该SELECTDISTINCT语句仅用于返回不同(不同)的值。在表中,一列通常包含许多重复值;有时您只想列出不同的(不同的)值。SELECTDISTINCT语法SELECTDISTINCTcolumn1,column2,。。。FROMtablename;
  我们还是假设有这样一个Customers数据库:
  没有DISTINCT的SELECT示例以下SQL语句从Customers表的Country列中选择所有(包括重复的)值:SELECTCountryFROMCustomers;
  SELECTDISTINCT示例SELECTDISTINCTCountryFROMCustomers;
  以下SQL语句列出了不同(不同)客户国家地区的数量:SELECTCOUNT(DISTINCTCountry)FROMCustomers;
  练习:1从表中的Country列中选择所有不同的值Customers。SELECTDISTINCCountryFROMCustomers;
  WHERE查询定位子句
  该WHERE子句用于过滤记录。它用于仅提取满足指定条件的记录。WHERE语法SELECTcolumn1,column2,。。。FROMtablenameWHEREcondition;
  注:该WHERE条款不仅在使用SELECT的语句,它也被用在UPDATE,DELETE等!我们假设还是有Customers这样一个数据库如下:
  WHERE子句示例以下SQL语句在Customers表中选择来自国家Mexico的所有客户:SELECTFROMCustomersWHERECountryMexico;
  文本字段与数字字段SQL需要在文本值周围使用单引号(大多数数据库系统也允许双引号)。但是,数字字段不应包含在引号中:SELECTFROMCustomersWHERECustomerID1;
  WHERE子句中的运算符可以在WHERE子句中使用以下运算符:
  我们可以一一演示这些符号的使用,耐心学假设我们有一下数据库叫做Product:
  选取价格为18的所有产品()SELECTFROMProductsWHEREPrice18;
  选取所有价格大于30的产品()SELECTFROMProductsWHEREPrice30;
  选取所有价格小于30的产品()SELECTFROMProductsWHEREPrice30;
  选取所有价格大于等于30的产品()SELECTFROMProductsWHEREPrice30;
  选取所有价格小于等于30的产品()SELECTFROMProductsWHEREPrice30;
  选取所有价格不等于18的产品(相当于!)SELECTFROMProductsWHEREPrice18;
  选取所有价格处于50和60之间的产品SELECTFROMProductsWHEREPriceBETWEEN50AND60;
  从上面的Customers数据库搜索所有字母s开头的城市SELECTFROMCustomersWHERECityLIKEs;
  从Customers数据库中查找所有在Paris和London的用户SELECTFROMCustomersWHERECityIN(Paris,London);
  以上便是对所有符号的演示。我们再来一些练习加以巩固(我们用到的是上面的customers)1选择City列值为Berlin的所有记录。SELECTFROMCustomersWHERECityBerlin;
  2使用NOT关键字选择City不是Berlin的所有记录。SELECTFROMCustomersWHERENOTCityBerlin;
  3选择CustomerID列值为32的所有记录。SELECTFROMCustomersWHERECustomerID12;
  AND、OR和NOT运算符
  该WHERE子句可以结合AND,OR和NOT操作。在AND与OR操作用于基于多个条件筛选记录:该AND操作显示一个记录,如果所有条件满足AND为真。所述OR操作显示一个记录,如果任何一个条件满足OR为真。该NOT操作显示,如果条件(S)是不正确的记录。AND语法SELECTcolumn1,column2,。。。FROMtablenameWHEREcondition1ANDcondition2ANDcondition3。。。;
  OR语法SELECTcolumn1,column2,。。。FROMtablenameWHEREcondition1ORcondition2ORcondition3。。。;
  NOT语法SELECTcolumn1,column2,。。。FROMtablenameWHERENOTcondition;
  我们还是假设有如下Customers表:
  AND示例以下SQL语句从Customers中选择国家为Germany且city为Berlin的所有字段:SELECTFROMCustomersWHERECountryGermanyANDCityBerlin;
  OR示例选取所有Customers中city为BerlinORMnchen:SELECTFROMCustomersWHERECityBerlinORCityMnchen;
  NOT示例从Customers选取country不是Germany的字段:SELECTFROMCustomersWHERENOTCountryGermany;
  结合AND,ORandNOT从Customers中选择国家为Germany且城市必须为BerlinORMnchen的所有字段(使用括号形成复杂的表达式):SELECTFROMCustomersWHERECountryGermanyAND(CityBerlinORCityMnchen);
  从Customers中选择国家不是Germany也不是USA:的所有字段:SELECTFROMCustomersWHERENOTCountryGermanyANDNOTCountryUSA;
  练习选择City列值为‘Berlin’且PostalCode列值为12209的所有记录。SELECTFROMCustomersWHERECityBerlinANDPostalCode12209;
  ORDERBY关键字
  该ORDERBY关键字用于按升序或降序对结果集进行排序。ORDERBY默认情况下,关键字按升序对记录进行排序。要按降序对记录进行排序,请使用DESC关键字。ORDERBY语法SELECTcolumn1,column2,。。。FROMtablenameORDERBYcolumn1,column2,。。。ASCDESC;
  我们还是假设有这个Customers表如下:
  ORDERBY示例从Customers表中选择所有客户,按Country列排序:SELECTFROMCustomersORDERBYCountry;
  ORDERBYDESC示例从Customers表中选择所有客户,按Country列按DESCENDING排序:SELECTFROMCustomersORDERBYCountryDESC;
  ORDERBY多列示例从Customers表中选择所有客户,按Country和CustomerName列排序。这意味着它按国家地区排序,但如果某些行具有相同的国家地区,则按CustomerName排序:SELECTFROMCustomersORDERBYCountry,CustomerName;
  从Customers表中选择所有客户,按Country升序和CustomerName列降序排序:SELECTFROMCustomersORDERBYCountryASC,CustomerNameDESC;
  练习从Customers表中选择所有记录,按城市列的字母顺序对结果进行排序。SELECTFROMCustomersORDERBYCity;
  INSERTINTO插入语句
  该INSERTINTO语句用于在表中插入新记录。INSERT语法可以INSERTINTO用两种方式编写语句:1指定要插入的列名和值:INSERTINTOtablename(column1,column2,column3,。。。)VALUES(value1,value2,value3,。。。);
  2如果要为表的所有列添加值,则无需在SQL查询中指定列名。但是,请确保值的顺序与表中的列顺序相同。在这里,INSERTINTO语法如下:INSERTINTOtablenameVALUES(value1,value2,value3,。。。);
  我们假设还是有着样一个Customers表:
  INSERT示例以下SQL语句在Customers表中插入一条新记录:INSERTINTOCustomers(CustomerName,ContactName,Address,City,PostalCode,Country)VALUES(Cardinal,TomB。Erichsen,Skagen21,Stavanger,4006,Norway);
  运行显示如下:
  您是否注意到我们没有在CustomerID字段中插入任何数字?CustomerID列是一个自动递增字段,将在新记录插入表中时自动生成。仅在指定列中插入数据下面的SQL语句将插入一条新记录,但只在CustomerName、City和Country列中插入数据(CustomerID会自动更新):INSERTINTOCustomers(CustomerName,City,Country)VALUES(Cardinal,Stavanger,Norway);
  运行后将会显示如下:
  练习:表中插入一条新记录。INSERTINTOCustomers(CustomerName,Address,City,PostalCode,Country)VALUES(HekkanBurger,Gateveien15,Sandnes,4306,Norway);
  NULL空值
  具有NULL值的字段是没有值的字段。如果表中的字段是可选的,则可以在不向该字段添加值的情况下插入新记录或更新记录。然后,该字段将保存为NULL值。注意:NULL值不同于零值或包含空格的字段。具有NULL值的字段是在创建记录期间留空的字段!如何测试NULL值?无法使用比较运算符(例如、或)测试NULL值。我们将不得不改用ISNULL和ISNOTNULL运算符。ISNULL语法SELECTcolumnnamesFROMtablenameWHEREcolumnnameISNULL;
  ISNOTNULL语法SELECTcolumnnamesFROMtablenameWHEREcolumnnameISNOTNULL;
  我们还是以Customers表为例子:
  ISNULL运算符列出了Address字段中具有NULL值的所有客户:SELECTCustomerName,ContactName,AddressFROMCustomersWHEREAddressISNULL;
  提示:始终使用ISNULL来查找NULL值。ISNOTNULL运算符该ISNOTNULL运算符用于测试非空值(NOTNULL值)。列出了在Address字段中具有值的所有客户:SELECTCustomerName,ContactName,AddressFROMCustomersWHEREAddressISNOTNULL;
  练习:从列为空的Customers位置选择所有记录PostalCode。SELECTFROMCustomersWHEREPostalCodeISNULL
  UPDATE更新语句
  UPDATE语句用于修改表中的现有记录。UPDATE语法:UPDATEtablenameSETcolumn1value1,column2value2,。。。WHEREcondition;
  注意:更新表中的记录时要小心!注意WHERE语句中的子句UPDATE。该WHERE子句指定应该更新哪些记录。如果省略该WHERE子句,表中的所有记录都将被更新!我们还是以Customers表为例:
  更新表更新CustomerID1的用户名字和城市数据UPDATECustomersSETContactNameAlfredSchmidt,CityFrankfurtWHERECustomerID1;
  更新过后将会如下:
  更新多条记录该WHERE子句确定将更新多少条记录。将国家为Mexico的所有记录的ContactName更新为Juan:UPDATECustomersSETContactNameJuanWHERECountryMexico;
  更新后将会变成:
  更新警告!更新记录时要小心。如果省略该WHERE子句,则所有记录都将被更新!例如:UPDATECustomersSETContactNameJuan;
  则会导致如下结果:
  练习:更新表City中所有记录的Customers列。UPDATECustomersSETCityOslo;
  DELETE删除语句
  该DELETE语句用于删除表中的现有记录。删除语法DELETEFROMtablenameWHEREcondition;
  注意:删除表中的记录时要小心!注意WHERE语句中的子句DELETE。该WHERE条款指定应删除哪些记录。如果省略该WHERE子句,表中的所有记录都将被删除!哈哈哈哈,我们还是以Customers表为例子如下:
  删除示例从Customers表中删除客户AlfredsFutterkiste:DELETEFROMCustomersWHERECustomerNameAlfredsFutterkiste
  于是就变成这样:
  删除所有记录可以在不删除表的情况下删除表中的所有行。这意味着表结构、属性和索引将保持不变DELETEFROMtablename;
  例如:删除Customers表中的所有行,但不删除该表:DELETEFROMCustomers;
  练习:从Customers表中删除Country值为挪威的所有记录。DELETEFROMCustomersWHERECountryNorway;
  TOP、LIMIT、FETCHFIRST或ROWNUM限制子句
  SELECTTOP子句SELECTTOP子句用于指定要返回的记录数。SELECTTOP子句在具有数千条记录的大表上很有用。返回大量记录会影响性能。注意:并非所有数据库系统都支持该SELECTTOP子句。MySQL支持LIMIT子句选择有限数量的记录,而Oracle使用FETCHFIRSTnROWSONLYROWNUMServerMS访问语法:SELECTTOPnumberpercentcolumnname(s)FROMtablenameWHEREcondition;
  MySQL语法:SELECTcolumnname(s)FROMtablenameWHEREconditionLIMITnumber;
  Oracle12语法:SELECTcolumnname(s)FROMtablenameORDERBYcolumnname(s)FETCHFIRSTnumberROWSONLY;
  比如还是Customers表如下
  TOP、LIMIT和FETCHFIRST示例从Customers表中选择前三个记录(用于SQLServerMSAccess):SELECTTOP3FROMCustomers;
  MySQL的等效示例:SELECTFROMCustomersLIMIT3;
  Oracle的等效示例:SELECTFROMCustomersFETCHFIRST3ROWSONLY;
  TOPPERCENT示例从Customers表中选择前50的记录(用于SQLServerMSAccess):SELECTTOP50PERCENTFROMCustomers;
  Oracle的等效示例:SELECTFROMCustomersFETCHFIRST50PERCENTROWSONLY;
  添加WHERE条款从Customers表中选择前三个记录,其中国家是Germany(对于SQLServerMSAccess):SELECTTOP3FROMCustomersWHERECountryGermany;
  MySQL的等效示例SELECTFROMCustomersWHERECountryGermanyLIMIT3;
  Oracle的等效示例:SELECTFROMCustomersWHERECountryGermanyFETCHFIRST3ROWSONLY;
  MIN()和MAX()函数求最大最小值
  MIN()函数返回所选列的最小值。MAX()函数返回所选列的最大值。MIN()语法SELECTMIN(columnname)FROMtablenameWHEREcondition;
  MAX()语法SELECTMAX(columnname)FROMtablenameWHEREcondition;
  现在我们换一个新的表Product如下:
  MIN()示例查找最便宜产品的价格:SELECTMIN(Price)ASSmallestPriceFROMProducts
  显示如下:
  MAX()示例查找最贵产品的价格:SELECTMAX(Price)ASLargestPriceFROMProducts;
  返回如下:
  练习:使用该MIN函数选择Price列的最小值的记录。SELECTMIN(Price)FROMProducts;
  COUNT()、AVG()和SUM()函数
  该COUNT()函数返回与指定条件匹配的行数。COUNT()语法SELECTCOUNT(columnname)FROMtablenameWHEREcondition;
  该AVG()函数返回数字列的平均值。AVG()语法SELECTAVG(columnname)FROMtablenameWHEREcondition;
  该SUM()函数返回数字列的总和。SUM()语法SELECTSUM(columnname)FROMtablenameWHEREcondition;
  我们还是用表product
  COUNT()示例查找产品数量:SELECTCOUNT(ProductID)FROMProducts;
  注意:NULL值不计算在内。AVG()示例查找所有产品的平均价格:SELECTAVG(Price)FROMProducts;
  注意:NULL值被忽略。假设我现在有OrderDetails表如下:
  SUM()示例查找OrderDetails表中Quantity字段的总和:SELECTSUM(Quantity)FROMOrderDetails;
  返回如下:
  注意:NULL值被忽略。练习:返回Price值设置为18的记录数SELECTCOUNT()FROMProductsWHEREPrice18;
  LIKE运算符
  该LIKE运算符在WHERE子句中用于搜索列中的指定模式。有两个通配符经常与LIKE运算符结合使用:百分号()代表零、一个或多个字符下划线()代表一个,单个字符
  但是呢注意:MSAccess使用星号()代替百分号(),使用问号(?)代替下划线()当然百分号和下划线也可以组合使用!LIKE语法SELECTcolumn1,column2,。。。FROMtablenameWHEREcolumnNLIKEpattern;
  提示:您还可以使用AND或OR运算符组合任意数量的条件。以下是一些示例,显示了LIKE带有和通配符的不同运算符:
  所对应意思为:第一行:匹配任何以a开头的字段第二行:匹配任何以a结尾的字段第三行:匹配任何具有or的字段第四行:查找第二个位置有r的任何值第五行:查找任何以a开头且长度至少为2个字符的值第六行:查找任何以a开头且长度至少为3个字符的值第七行:查看以a开头并以o结尾的任何值比如我们还是有如下Customers表:
  LIKE示例
  选择CustomerName以a开头的所有客户:SELECTFROMCustomersWHERECustomerNameLIKEa;
  选择CustomerName以a结尾的所有客户:SELECTFROMCustomersWHERECustomerNameLIKEa;
  选择CustomerName中任何位置都有或的所有客户:SELECTFROMCustomersWHERECustomerNameLIKEor;
  选择CustomerName中第二个位置为r的所有客户:SELECTFROMCustomersWHERECustomerNameLIKEr;
  选择CustomerName以a开头且长度至少为3个字符的所有客户:SELECTFROMCustomersWHERECustomerNameLIKEa;
  选择ContactName以a开头并以o结尾的所有客户:SELECTFROMCustomersWHEREContactNameLIKEao;
  选择CustomerName不以a开头的所有客户:SELECTFROMCustomersWHERECustomerNameNOTLIKEa;
  通配符?!等
  这是英文文档所有通配符描述(实在不想翻译,大家自己看看)
  假设我们还是有如下Customers表:
  使用通配符选择City以ber开头的所有客户:SELECTFROMCustomersWHERECityLIKEber;
  选择City包含es的所有客户:SELECTFROMCustomersWHERECityLIKEes;
  返回如下:
  使用通配符选择City以任何字符开头,后跟ondon的所有客户:SELECTFROMCustomersWHERECityLIKEondon;
  选择City以L开头、后跟任意字符、n、任意字符、on的所有客户:SELECTFROMCustomersWHERECityLIKELnon;
  使用〔charlist〕通配符选择City以b、s或p开头的所有客户:SELECTFROMCustomersWHERECityLIKE〔bsp〕;
  选择City以a、b或c开头的所有客户:SELECTFROMCustomersWHERECityLIKE〔ac〕;
  使用〔!charlist〕通配符选择City不是以b、s或p开头的所有客户:SELECTFROMCustomersWHERECityLIKE〔!bsp〕;
  或者SELECTFROMCustomersWHERECityNOTLIKE〔bsp〕;
  IN运算符
  IN运算符允许您在WHERE子句中指定多个值。IN操作是针对多个速记OR条件。IN语法SELECTcolumnname(s)FROMtablenameWHEREcolumnnameIN(value1,value2,。。。);
  我们还是以Customers表为例子:
  IN运算符示例选择位于’Germany’,‘France’,UK’的所有客户:SELECTFROMCustomersWHERECountryIN(Germany,France,UK);
  选择不在选择位于’Germany’,‘France’,UK’的所有客户:SELECTFROMCustomersWHERECountryNOTIN(Germany,France,UK);
  选择与Suppliers来自相同国家的所有客户:SELECTFROMCustomersWHERECountryIN(SELECTCountryFROMSuppliers);
  返回如下
  BETWEEN之间运算符
  在BETWEEN操作者选择一个给定的范围内的值。值可以是数字、文本或日期。BETWEEN语法SELECTcolumnname(s)FROMtablenameWHEREcolumnnameBETWEENvalue1ANDvalue2;
  我们有用到如下的product表:
  between示例选择价格在10到20之间的所有产品:SELECTFROMProductsWHEREPriceBETWEEN10AND20;
  要显示上一个示例范围之外的产品,请使用NOTBETWEEN:SELECTFROMProductsWHEREPriceNOTBETWEEN10AND20;
  数字之间选择价格在10到20之间的所有产品。此外;不要显示CategoryID为1,2或3的产品:SELECTFROMProductsWHEREPriceBETWEEN10AND20ANDCategoryIDNOTIN(1,2,3);
  文本值之间语句选择CarnarvonTigers和MozzarelladiGiovanni之间具有ProductName的所有产品SELECTFROMProductsWHEREProductNameBETWEENCarnarvonTigersANDMozzarelladiGiovanniORDERBYProductName;
  选择产品名称介于CarnarvonTigers和ChefAnton’sCajunSeasoning之间的所有产品:SELECTFROMProductsWHEREProductNameBETWEENCarnarvonTigersANDChefAntonsCajunSeasoningORDERBYProductName;
  NOTBETWEEN文本值选择ProductName不在CarnarvonTigers和MozzarelladiGiovanni之间的所有产品:SELECTFROMProductsWHEREProductNameNOTBETWEENCarnarvonTigersANDMozzarelladiGiovanniORDERBYProductName;
  我们现在假设有如下Orders表:
  日期之间示例选择OrderDate介于‘01July1996’和‘31July1996’之间的所有订单SELECTFROMOrdersWHEREOrderDateBETWEEN07011996AND07311996;
  或者使用:SELECTFROMOrdersWHEREOrderDateBETWEEN19960701AND19960731;
  AS别名使用
  别名列语法SELECTcolumnnameASaliasnameFROMtablename;
  别名表语法SELECTcolumnname(s)FROMtablenameASaliasname;
  现在我们还是假设有custorm表如下:
  还有一个oeder表
  列的别名示例创建两个别名,一个用于CustomerID列,另一个用于CustomerName列:SELECTCustomerIDASID,CustomerNameASCustomerFROMCustomers;
  创建两个别名,一个用于CustomerName列,另一个用于ContactName列。注意:如果别名包含空格,则需要双引号或方括号:SELECTCustomerNameASCustomer,ContactNameAS〔ContactPerson〕FROMCustomers;
  创建一个名为Address的别名,该别名组合了四列(Address、PostalCode、City和Country):SELECTCustomerName,Address,PostalCodeCity,CountryASAddressFROMCustomers;
  注意:要使上面的SQL语句在MySQL中工作,请使用以下命令:SELECTCustomerName,CONCAT(Address,,,PostalCode,,,City,,,Country)ASAddressFROMCustomers;
  表别名示例选择来自CustomerID4(AroundtheHorn)的客户的所有订单。我们使用Customers和Orders表,分别给它们表别名c和o(这里我们使用别名来缩短SQL)SELECTo。OrderID,o。OrderDate,c。CustomerNameFROMCustomersASc,OrdersASoWHEREc。CustomerNameAroundtheHornANDc。CustomerIDo。CustomerID;
  以下SQL语句与上面相同,但没有别名:SELECTOrders。OrderID,Orders。OrderDate,Customers。CustomerNameFROMCustomers,OrdersWHERECustomers。CustomerNameAroundtheHornANDCustomers。CustomerIDOrders。CustomerID;
  别名在以下情况下很有用:1。一个查询涉及多个表2。一个查询涉及多个表3。查询中使用的函数4。列名很大或不太可读5。两列或更多列组合在一起
  JOIN连接
  JOIN子句用于行从两个或更多表根据它们之间的相关列结合。假设我们现在有Orders表如下
  同时还有表Customers如下:
  请注意,Orders表中的CustomerID列指的是Customers表中的CustomerID。上面两个表之间的关系是CustomerID列。示例使用INNERJOIN选择在两个表中具有匹配值的记录:SELECTOrders。OrderID,Customers。CustomerName,Orders。OrderDateFROMOrdersINNERJOINCustomersONOrders。CustomerIDCustomers。CustomerID;
  返回如下
  不同类型的SQLJOIN
  INNERJOIN内连接关键字
  INNERJOIN关键字选择在两个表中具有匹配值的记录。语法:SELECTcolumnname(s)FROMtable1INNERJOINtable2ONtable1。columnnametable2。columnname;
  画个图理解:
  假设我们还是有order表
  customer表
  INNERJOIN示例选择所有包含客户信息的订单:SELECTOrders。OrderID,Customers。CustomerNameFROMOrdersINNERJOINCustomersONOrders。CustomerIDCustomers。CustomerID;
  返回
  JOIN三张表选择包含客户和发货人信息的所有订单SELECTOrders。OrderID,Customers。CustomerName,Shippers。ShipperNameFROM((OrdersINNERJOINCustomersONOrders。CustomerIDCustomers。CustomerID)INNERJOINShippersONOrders。ShipperIDShippers。ShipperID);
  返回如下
  LEFTJOIN左连接关键字
  LEFTJOIN关键字返回左表(table1)中的所有记录,以及右表(table2)中的匹配记录。如果没有匹配项,则结果是右侧的0条记录。左连接语法SELECTcolumnname(s)FROMtable1LEFTJOINtable2ONtable1。columnnametable2。columnname;
  来个图就懂了
  我们还是用customer表:
  order表
  LEFTJOIN示例选择所有客户,以及他们可能拥有的任何订单:SELECTCustomers。CustomerName,Orders。OrderIDFROMCustomersLEFTJOINOrdersONCustomers。CustomerIDOrders。CustomerIDORDERBYCustomers。CustomerName;
  返回如下
  RIGHTJOIN右连接关键字
  语法SELECTcolumnname(s)FROMtable1RIGHTJOINtable2ONtable1。columnnametable2。columnname;
  上图就懂了
  现在我们用到order表如下
  还有个employee表
  返回所有员工,以及他们可能下过的任何订单:SELECTOrders。OrderID,Employees。LastName,Employees。FirstNameFROMOrdersRIGHTJOINEmployeesONOrders。EmployeeIDEmployees。EmployeeIDORDERBYOrders。OrderID;
  FULLOUTERJOIN关键字
  FULLOUTERJOIN和FULLJOIN是一样的。语法为:SELECTcolumnname(s)FROMtable1FULLOUTERJOINtable2ONtable1。columnnametable2。columnnameWHEREcondition;
  来个图就懂了
  我们假设还是以customer表
  还有个order表
  选择所有客户和所有订单:SELECTCustomers。CustomerName,Orders。OrderIDFROMCustomersFULLOUTERJOINOrdersONCustomers。CustomerIDOrders。CustomerIDORDERBYCustomers。CustomerName;
  返回如下
  SelfJoin自连接关键字
  语法SELECTcolumnname(s)FROMtable1T1,table1T2WHEREcondition;
  我们假设有custormer表
  匹配来自同一城市的客户:SELECTA。CustomerNameASCustomerName1,B。CustomerNameASCustomerName2,A。CityFROMCustomersA,CustomersBWHEREA。CustomerIDB。CustomerIDANDA。CityB。CityORDERBYA。City;
  返回如下
  GROUPBY语句
  该GROUPBY语句将具有相同值的行分组为汇总行,例如查找每个国家地区的客户数量。该GROUPBY语句通常与聚合函数(COUNT(),MAX(),MIN(),SUM(),AVG())一起使用,以按一列或多列对结果集进行分组。语法:SELECTcolumnname(s)FROMtablenameWHEREconditionGROUPBYcolumnname(s)ORDERBYcolumnname(s);
  假设我们还是有customer这个表
  列出了每个国家地区的客户数量:SELECTCOUNT(CustomerID),CountryFROMCustomersGROUPBYCountry;
  列出了每个国家的客户数量,从高到低排序:SELECTCOUNT(CustomerID),CountryFROMCustomersGROUPBYCountryORDERBYCOUNT(CustomerID)DESC;
  HAVING子句
  语法:SELECTcolumnname(s)FROMtablenameWHEREconditionGROUPBYcolumnname(s)HAVINGconditionORDERBYcolumnname(s);
  假设还是有custorm表如下
  列出了每个国家地区的客户数量。仅包括拥有超过5个客户的国家地区:SELECTCOUNT(CustomerID),CountryFROMCustomersGROUPBYCountryHAVINGCOUNT(CustomerID)5;
  列出了每个国家的客户数量,从高到低排序(仅包括客户超过5个的国家):SELECTCOUNT(CustomerID),CountryFROMCustomersGROUPBYCountryHAVINGCOUNT(CustomerID)5ORDERBYCOUNT(CustomerID)DESC;
  EXISTS运算符
  EXISTS运算符用于测试子查询中是否存在任何记录。EXISTS运算符返回true,如果子查询返回一个或多个记录。语法SELECTcolumnname(s)FROMtablenameWHEREEXISTS(SELECTcolumnnameFROMtablenameWHEREcondition);
  假设我们还是用到product表
  suppiler表
  例如:返回TRUE并列出产品价格小于20的供应商:SELECTSupplierNameFROMSuppliersWHEREEXISTS(SELECTProductNameFROMProductsWHEREProducts。SupplierIDSuppliers。supplierIDANDPrice20);
  返回如下
  返回TRUE并列出产品价格等于22的供应商:SELECTSupplierNameFROMSuppliersWHEREEXISTS(SELECTProductNameFROMProductsWHEREProducts。SupplierIDSuppliers。supplierIDANDPrice22);
  返回为:
  注释
  单行注释以。和行尾之间的任何文本都将被忽略(不会被执行)例如:Selectall:SELECTFROMCustomers;
  又例如SELECTFROMCustomersWHERECityBerlin;
  多行注释以。
  和之间的任何文本都将被忽略。例如:SelectallthecolumnsofalltherecordsintheCustomerstable:SELECTFROMCustomers;
  又例如SELECTFROMCustomers;SELECTFROMProducts;SELECTFROMOrders;SELECTFROMCategories;SELECTFROMSuppliers;
  忽略语句的一部分:例如SELECTCustomerName,City,CountryFROMCustomers;
  又例如SELECTFROMCustomersWHERE(CustomerNameLIKELORCustomerNameLIKERORCustomerNameLIKESORCustomerNameLIKETORCustomerNameLIKEW)ANDCountryUSAORDERBYCustomerName;
  运算符
  其实这一节内容,我已经在前面的运算符都演示过了。再说一下呗。算术运算符有
  演示一部分比如求2030:SELECT3020;
  除法(返回3)SELECT3010;
  取余数(返回2)SELECT175;
  比较运算符
  演示一部分大于SELECTFROMProductsWHEREPrice18;
  不等于SELECTFROMProductsWHEREPrice18;
  大于等于SELECTFROMProductsWHEREPrice30;

司马南对社会的具体伤害不平凡的2022人间一切美好来源于智慧,而智慧来源于苦难;当一个人春风得意之时,往往正在丧失智慧走向愚昧;所以就有了个人的命运沉浮现象,有了社会的兴衰现象。智慧源自……真相大白!晋辽大战主裁判承认漏判解释原因,敢作敢当向球迷道歉CBA常规赛继续进行,目前联赛已经进行到了第4轮。昨晚,山西男篮和辽宁男篮上演强强对话。经过48分钟的激烈角逐,山西男篮笑到了最后,拿到了这场宝贵的胜利。辽宁男篮遗憾败北终结了……留给德约科维奇的时间不多了,拒绝交流解决不了问题现在几乎可以肯定的是,未接种疫苗的选手将无法参加2022年澳大利亚网球公开赛。澳大利亚维多利亚州州长和移民部长在这方面已经明确表示,不会对没有接受两针疫苗的网球运动员给予豁免或……女儿问邓小平,这辈子和谁的关系最好?邓小平说出了哪三个名字百年前的旧中国,挣扎在半殖民地半封建社会的泥潭中,外有列强虎视眈眈,内有军阀混战不休,百姓生活更是苦不堪言。风云变幻中,无数仁人志士挺身而出,甘为劳苦大众的幸福生活抛头颅、洒热……离婚后彻底放飞自我!皮蓬前妻频繁和NBA球员交往,原因是皮蓬作为NBA曾经的巨星,皮蓬最近的日子并不好过。他新交往的小30岁女友比较会花钱,为此他已经卖掉了自己的两处房产。而他的前妻拉尔萨则更加过分,在离婚之后频繁和NBA的年轻球星约会……中国在南沙第一大岛,面积达6平方公里,究竟有何军事意义?在南海,我国共有七大人工岛,在这七大人工岛中,有一座岛显得很特殊,它就是如雷贯耳的美济岛。关于美济岛,军事专家张绍忠曽这样给予高度评价:美济岛是南沙群岛中距离菲律宾最近,……由雷丁实名举报案问社保基数与GDP是否应脱钩?由雷丁实名举报案,问:社保基数与GDP是否应脱钩?实名举报例子并不少见,但是地方企业实名举报一个地方一把手却也不多见,在自媒体时代以前,想都别想,但自媒体使这成为可能。……台湾海峡海底出土石器,证明与大陆相连,而且中国原始人在此生活近日美国总统拜登又拿自古以来本就与中国大陆连在一起的台湾岛当成了独立的地区,无论从历史方面、地理方面。政治方面,台湾岛都有证据证明它是中国的一部分,今天我就给大家介绍地方方面的……美文心阅落叶落叶美文心阅深秋,落叶是最美丽的风景。秋风掠过的树木,一片片树叶飘零。它们在空中轻盈地婆娑着,似只只美丽的彩蝶,翩翩起舞。春夏秋冬,四季轮回,树叶是大自然赐予……有道口袋打印机Artistc错题打印助力学习,而且还会变脸现在孩子们的学习工具,可比以往要丰富得多了,各种电子智能产品、智能设备,都在助力学生进行高效学习,但也有很多产品打着学习工具的旗号,植入了很多的娱乐功能,使得孩子们沉迷其中,本……绝地求生热度直线下滑,多支战队决定解散,韦神决定回归LOL现在电竞行业的热度很多人都在讨论,相信大家也在关注,这两天被讨论最多的一件事就是S11的比赛了,我们知道EDG拿到了最终的冠军,让LPL赛区再次成为第一赛区,站上了顶峰,就看这……花开自有花落,心简单,万物皆可爱图片来自网络微笑的眼睛才能看见美丽的风景简单的心境才能拥有快乐的心情。心简单了,世界就简单了,心简单了,世界就是童话。人生不如意事十之八九。这世界本身就不完美……
房贷还款年龄延长,敢想敢干啊!房地产和银行又瞄上养老金了房地产项目普遍性停工,烂尾楼剧增,法拍房的数量也是急剧攀升而与此相反的是,楼市日益低迷,房产成交量不断探底成也房地产,败也房地产,国内大多城市的经济都跟房地产纠缠在一起,房衰城……感情到最后,拼的是这两个字点上方听一禅第1953次和你说晚安文一禅主播一禅每个人在生命中会遇到谁,在前世就早有定数。在漫漫的轮回之路上,总会有那么一个人,看一眼就惊艳了余生。这一……人一生的五件财富凡事总存在着因果关系,一个人想要生活幸福,除了亲情,爱情的滋养,还需要财富来支撑。物质可以满足我们的衣食住行,而精神财富也是不可或缺的。我们常常提到一个词,叫做个性鲜明。……一超多强!X90主摄规格公布,PK12SUltra根据vivo官方预热,X90系列将搭载IMX989一英寸主摄,有蔡司T镀膜V2影像芯片加持,而且蓝厂在算法、色彩上表现一直不错,主摄表现相当值得期待了,这也是国产厂商中,继小米……葡萄牙VS尼日利亚葡萄牙上届世界杯和西班牙小组同积5分携手出线,淘汰赛首轮不敌乌拉圭止步十六强。本届继续由37岁的C罗领衔,绝对主力迪亚斯、坎塞洛、N。门德斯、B。费尔南德斯上届世界杯都是边缘人……韩国队公布世界杯球衣号码孙兴慜7号孙准浩13号金玟哉4号北京时间11月15日晚,韩国队公布了参加卡塔尔世界杯26名球员的球衣号码,依然有伤在身的孙兴慜继续选择熟悉的7号,10号球衣交给了李在成,山东泰山外援孙准浩选择13号球衣。中超……女乒悍将被刘国梁抛弃!去年排名世界前10,如今排名100开外女乒悍将被刘国梁抛弃!去年排名世界前10,如今排名100开外球迷都知道,中国女排在最近的WTT比赛中,包揽了双打和单打的所有金牌,其中包括布达佩斯站,以及突尼斯站的比赛,……黄河石门二咫尺秦晋彩虹起,沿路丝挂壁。月季格桑,红栌黄菊,妖娆色旖旎!石门一时多笑语,谁言孤亭寂?日月星云,风霜雪雨,滔水夜声急!高强十月……美国制裁到底吓死过谁?自从10月7日美国商务部工业与安全局(BIS)公布了其出口管制政策中的针对性更新,对中国先进计算和半导体制造进行史上最严厉的管制之后,大家曾经预想中还需要多年的分手那一天似乎真……88121,上海队又输了!李春江爱将2011,浙江3连胜,奇10月16日晚上19点35分,CBA焦点之战,上海队过招浙江队,对方实力出色,且以不败战绩高居联赛前列。李春江的球队本赛季之初,没有打出太令人信服的表现。王哲林之外,似乎没有其……继南昌九江之后,赣州将成为江西第三个高铁枢纽城市?近日,赣州区位交通发展接连传来两个好消息。9月30日,瑞金至梅州铁路广东段正式开工建设。瑞梅铁路是国家十四五规划纲要确定的102项重点工程项目,位于江西省南部和广东省东北……裁掉王薪凯!广东宏远球迷被激怒,放走周鹏后,也没锻炼年轻球员如果周鹏在比赛最后一分钟能够更冷静一些,或许广东宏远坚持不到比赛最后时刻。输掉比赛,对于广东宏远来说不是什么灾难,毕竟他们经历了太多困难。但对于球队这个夏天的运作,球迷也……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网