SQL基础语法:SELECT语句全解析

创始人
2024-12-22 02:18:35
0 次浏览
0 评论

SQL里最基本的语法是什么呢?

1.SELECT语句的完整语法为:SELECT[ALL|DISTINCT|DISTINCTROW|TOP]{*|talbe.*|[table.]field1[ASalias1][,[table.]field2[ASalias2][,…]]}FROM表表达式n[,…][INexternaldatabase][WHERE…][GROUPBY…][HAVING…][ORDERBY…][WITHOWNERACCESSOPTION]注:方括号([])括起来的部分表示可选,方括号([])括起来的部分表示可选。
大括号({}括起来的部分)表示必须选择其中之一。
1.1FROM子句FROM子句指定SELECT语句中字段的来源。
FROM子句后跟一个或多个表达式(用逗号分隔),这些表达式可以是单个表名、已保存的查询或INNERJOIN、LEFTJOIN或RIGHTJOIN的复合结果。
如果表或查询存储在外部数据库中,请在IN子句后指定其完整路径。
示例:以下SQL语句返回所有有订单的客户:SELECTOrderID,Customer.customerIDFROMOrdersCustomersWHEREOrders.CustomerID=Customers.CustomeersID1.2ALL、DISTINCT、DISTINCTROW、TOP谓词(1)ALL返回满足SQL语句条件的所有记录。
如果未指定此谓词,则默认为ALL。
示例:SELECTALLFirstName,LastNameFROMEmployees(2)DISTINCT如果有多条记录具有相同的选择字段数据,则仅返回一条。
(3)DISTINCTROW如果有重复记录,则只返回一条。
(4)TOP显示查询开头和结尾的几条记录。
您还可以返回记录的百分比。
这是要使用TOPNPERCENT子句(其中N代表百分比)。
示例:返回最大订单金额5%的订单。
SELECTTOP5PERCENT*FROM[OrderDetails]ORDERBYUnitPrice*Quantity*(1-Discount)DESC1.3使用AS子句为字段设置别名。
如果您想为返回的列获取新标题,或者在计算或汇总字段后,生成一个新值并且您希望将其显示在新列中。
,则AS被保留。
示例:返回FirstName字段,并将其别名为NickNameSELECTFirstNameASNickName,LastName,CityFROMEmployees示例:返回新列以显示库存值SELECTProductName,UnitPrice,UnitsInStock,UnitPrice*UnitsInStockASvalueInStockFROMProducts2.WHERE子句指定查询条件2.1比较运算符比较运算符含义=等于>大于=大于等于不等于!>不大于!#1/1/96#ANDOrderDate#96-1-1#也可以表示为:WHEREOrderDate>Datevalue('1/1/96')使用NOT表达式求反。
示例:查看1996年1月1日之后的订单WHERENotOrderDateQuantity的另一种方法是使用MicrosofJETSQL独特的JNNERJOIN语法:FROMtable1INNERJOINtable2ONtable1.field1comparisiontable2.field2其中Comparison是前面的WHERE子句中使用的比较运算符。
SELECTFirstName,lastName,OrderID,CustomerID,OrderDateFROMEmployeesINNERJOINOrdersONEmployees.EmployeeID=Orders.EmployeeID注意:INNERJOIN无法连接MemoOLEObjectSingleDouble数据类型字段。
在一个JOIN语句中联接多个ON子句语法:SELECTfieldsFROMtable1INNERJOINtable2ONtable1.field1compoprtable2.field1ANDONtable1.field2compoprtable2.field2ORONtable1.field3compoprtable2.field3也可以是SELECTfieldsFROMtable1INNERJOIN(table2INNERJOIN[(]table3[INNERJOER][(]tablex[INNERJOIN]ONtable1.field1compoprtable2.field1ONtable1.field2compoprtable2.field2ONtable1.field3compoprtable2.field3外部连接返回更多记录,保留结果中不匹配的记录,无论是否存在或满足条件对方的所有记录都返回给FRO。
Mtable[LEFT|RIGHT]JOINtable2ONtable1.field1comparisontable.field2使用左联接建立外部连接,表达式左侧的表将显示其所有数据,例如:无论是否有订单数量,都返回所有数据。
产品选择产品名称,OrderIDFROMProductsLEFTJOINOrdersONProducts.ProductsID=Orders.ProductID右联接和左联接的区别是:无论左表中是否有匹配的记录,都返回左表中的所有记录。
例如:如果想了解客户信息,统计客户在各个地区的分布情况,可以使用右连接。
,即使某个区域没有客户,也会返回客户信息。
空值不会互相匹配,可以传递。
您可以通过外连接测试连接表的某个字段是否为空值。
:Iif(IsNull(Amount,0,Amout)示例:无论订单大于或小于50元,flag必须返回。
Iif([Amount]>50,?Bigorder?,?Smallorder?)第五组和汇总查询结果在SQL语法中,GROUPBY和HAVING子句用于汇总GROUPBY子句指定对哪些字段进行分组,对记录进行分组后,使用SELECTfidldlistFROMtableWHEREcriteria[GROUPBYgroupfieldlist[HAVINGgroupcriteria]]注意:MicrosoftJet数据库Jet无法对GROUPBY字段中的Null值进行分组。
用于分组,但不能省略任何SQL中GROUPBY子句后不计算Null值。
聚合函数最多可以有十个字段,排序优先级从左到右顺序示例:在“WA”区域的员工表中按职称分组后,查找所有职称相同的员工。
比1..SELECTTitle,Count(Title)asTotalFROMEmployeesWHERERegion='WA'GROUPBYTitleHAVINGCount(Title)>1JETSQL中的聚合函数聚合函数SUM()Sum的含义AVG()平均值COUNT()表达式中的记录数COUNT(*)计算记录数MAX最大值MIN最小值VAR方差STDEV标准准误差FIRST第一个值LAST最后一个值六使用Parameters声明创建参数查询参数声明语法:PARAMETERSnamedatatype[,namedatatype[,...]]其中name是参数的标识符,可以通过标识符引用参数。
Datatype描述了参数的数据类型。
使用它时,请将PARAMETERS语句放在任何其他语句之前。
示例:PARAMETERS[Lowprice]Currency,[Beginningdate]datatimeSELECTOrderID,OrderAmountFROMOrdersWHEREOrderAMount>[lowprice]ANDOrderDate>=[Beginningdate]七函数查询所谓函数查询实际上是一种操作查询,可以对数据库进行快速高效的操作。
它以选择查询为目的,选择符合条件的数据,然后对数据进行批量处理。
功能查询包括更新查询、删除查询、添加查询、生成表查询。
7.1更新查询UPDATE子句可以同时更改一个或多个表中的数据。
它还可以同时更改多个字段的值。
更新查询语法:UPDATE表名SET新值WHERE条件示例:英国客户订单量增加5%,货运量增加3%UPDATEOEDERSSETOrderAmount=OrderAmount*1.1Freight=Freight*1.03WHEREShipCountry='UK'7.2删除查询DELETE子句允许用户删除大量过时或冗余的项目。
数据。
注意:删除查询的对象是整条记录。
DELETE子句的语法:DELETE[表名.*]FROM源表WHERE条件示例:要删除94岁之前的所有订单,请同时使用DELETE*FROMOrdersWHEREOrderData=)。
返回布尔值True或False.ANY表示将表达式与子查询返回的一系列值进行逐一比较。
只要其中一个比较产生True结果,ANY测试就会返回True值(WHERE子句的结果),对应于表达式当前记录将被输入到主查询的结果。
ALL测试要求表达式匹配子查询返回的一系列值。
仅当比较产生True结果时才会返回True值。
示例:主查询返回单价高于任何折扣大于或等于25%的产品单价的所有产品。
SELECT*FROMProductsWHEREUnitPrice>ANY(SELECTUnitPriceFROM[OrderDetails]WHEREDiscount>0.25)10.2检查表达式的值是否与子查询返回的一组值中的某个值匹配语法:[NOT]IN(子查询)示例:返回库存价值大于或等于1000的产品。
SELECTProductNameFROMProductsWHEREProductIDIN(SELECTPrdoctIDFROM[OrderDEtails]WHEREUnitPrice*Quantity>=1000)10.2检查子查询是否返回任何记录语法:[NOT]EXISTS(子查询)示例:使用EXISTS检索英国SELEC客户TComPanyName,联系人姓名FROMOrdersWHEREEXISTS(SELECT*FROMCustomersWHERECountry=‘UK’ANDCustomers.CustomerID=Orders.CustomerID)

请教SQL基本语句

SQL中最常用的命令是SELECT语句,它用于检索数据。
语法为:SELECT[ALL|DISTINCT[ON(表达式[,...])]]*|表达式[ASOutputName][,...][INTO[TIMPORARY|TEMP][TABLE]new_table][FROMfrom_item[,.]][WHERE条件][GROUPBY表达式[,...]][HAVINGcondi化[,...]][{UNION|SKIRT|EXCEPT[ALL]}select][ORDERBY表达式[ASC|DESC|USING操作符][,...]][FORUPDATE[OFclass_name[,...]]][LIMIT{count|ALL}[{OFFSET|,}start]]现在我们将通过各种示例来演示SELECT语句的复杂语法。
这些示例中使用的表是在供应商和零件数据库中定义的。
1.4.1.1简单选择下面是使用SELECT语句的一些简单示例:例1-4一个简单的带条件查询是从表PART*FROMPARTWHEREPRICE>10中查找字段PRICE大于10的所有记录,然后得到表:PNO|PNAME|PRICE-----+------------+--------3|Bolt|154|Cam|25在SELECT语句中使用“*”将检索表中的所有属性。
如果我们只想从表PART中检索属性PNAME和PRICE,则使用以下语句:SELECTPNAME,PRICEFROMPARTWHEREPRICE>10这次结果为:PNAME|PRICE--------+----;----Bolt|15Cam|25注意,SQL的SELECT语句相当于关系演算中的“投影”,而不是“选择”(详见关系演算)。
WHERE子句中的条件也可以使用关键字OR、AND和NOT连接在一起:SELECTPNAME,PRICEFROMPARTWHEREPNAME='Bolt'AND(PRICE=0ORPRICE<=15)这将生成以下结果:PNAME|PRICE--);------+--------Bolt|15算术运算可以用在目标列表和WHERE子句中。
例如,如果我们想知道购买两个零件需要多少钱,我们可以使用以下查询:SELECTPNAME,PRICE*2ASDOUBLEFROMPARTWHEREPRICE*2<50>此技术可用于目标列表中的每个项目,为它们提供一个出现在结果列中的新标题。
这个新标题通常称为别名。
此别名不能在此查询中的其他任何地方使用。
在直接使用语句控制数据库的ADO程序中,我使用过SELECT语句,但是我忘记了如何使用INSERT和UPDATE等语句!请虾米们帮帮我吧!附件:我的程序片段:DimadoCnnAsADODB.ConnectionDimadoRstAsADODB.RecordsetDimsqlAsStringSetadoCnn=NewADODB.ConnectionadoCnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:\VB\testdb.mdb;PersistSecurityInfo=False")sql="select*fromtest_table"SetadoRst=adoCnn.Execute(sql)'看来insert、update等语句不能这样执行。
adoRst可以正常使用!DELETE语句用于删除表中的实体(即一行记录),添加WHERE条件删除记录只能删除部分记录或者根本不删除记录。
原理类似于UPDATE的WHERE

简述SQL语言中SELECT语句的基本结构

选择查询语句语法:SELECT[ALL|DISTINCT]<目标列表达式>[AS列名][,<目标列表达式>[AS列名]...]FROM<表名>[,<表名>…][WHERE<条件表达式>[AND|OR<条件表达式>...][GROWUPBY列名称[HAVING<条件表达式>>[ORDERBY列名称[ASC|DESC>]说明:[ALL|DISTINCT]所有所有;DISTINCT:排除重复行<目标列表达式>AVG、COUNT可用于字段,SUM、MIN、MAX、运算<条件表达式>查询条件谓词比较=,>,<,>=,<=,!=,<>、设置范围BETWEEN、NOTBETWEEN和设置IN、NOTIN等字符匹配(“%”匹配任意长度,“_”匹配一个字符),空值不喜欢ISNUISLL、ISNOTNULL子查询ANY、ALL、EXIST查询UNION、INTERSECT、MINUS多个条件AND、OR、NOTGROUPBY查询结果[HAVING<条件表达式>]GROUPFILTERCONDITIONS[ORDERBY列名[ASC|DESC]>对查询结果进行排序;ASC:升序DESC:降序示例1:选择学生编号,学生姓名,课程为课程名称,分数为分数结果,学生twherestudent.sid=score.sidandscore.sid=:sid示例2:选择Student.sno作为学号,student.name作为姓名,AVG(score)作为分数,学生的平均分数wherestudent.sid=score.sidandstudent.class=:classand(term=5orterm=6)groupbystudent.sno,student.namehavingcount(*)>0orderbyaverageScoreDESC示例3:select*fromscorewheresidlike'9634'示例4:select*fromstudentwhereclassin(selectclassfromstudentwherename='杨泉')
文章标签:
SELECT SQL语句
热门文章
1
SQL2000数据库备份压缩技巧:优化空... 怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...

2
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

3
SQL字符串处理技巧:单引号使用与转义标... SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...

4
Windows环境下Redis安装指南与... redis安装windowsredis基本简介与安装安装Redis首先需要获取安...

5
深度解析:Redis性能优势与局限性,助... redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...

6
深入解析:MySQL数据库的特性与应用 mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...

7
MySQL命令行操作指南:轻松启动和登录... 用命令行方式启动和登录mysql服务的方法1.启动MySQL服务1打开命令行窗口...

8
Linux Redis后台启动教程:配置... linux怎么启动redis1、首先,为了管理方便,将Redis文件中的conf...

9
MySQL浮点数与Decimal类型详解... MySQL中的float和decimal类型有什么区别小数类型可以准确地表示非常...

10
C语言实现输入10个整数并找出最大最小值... C语言从键盘输入任意的10个整数,从中找出最大值和最小值并输出代码:#inclu...