功能强大的SQL语句利用SQL语句,可以查询、插入、更新、删除数据库中的数据。内蒙古利丰汽车孙建新3.1select语句解析与简单SQL语句(P63)从某种意义上说,select语句是数据库结构化查询语言SQL的真正核心。使用select语句可以以多种不同的方式查找数据库中的数据,并且可以显示通过现有数据推导、计算出的数据信息。内蒙古利丰汽车孙建新3.1.1select语句解析(P64)在数据库引擎查询文档中输入64页的代码use企业销售管理系统select仓库号,城市,面积,创建时间from仓库where面积800执行该SQL语句,就可以从数据库表“仓库”中挑选出面积大于800的仓库号、城市、面积、创建时间信息。内蒙古利丰汽车孙建新Select语言句的基本格式Select语言句的基本格式是:select[alldistinct]select_listfromtable_list/view_list[whereconditions][groupbygroup_list][havingconditions][orderbyorder_list]3.1.2选择所有的列(P65)Select语句的第一个子句,即select关键字开头的子句,用于选择进行显示的列,并且可以指定是否显示重复的记录。在数据库引擎输入如下代码:use企业销售管理系统select职工ID,职工号,仓库号,姓名,性别,工资from职工内蒙古利丰汽车孙建新3.1.3投影查询(P66)有时并不需要将所有的列都显示出来,投影查询就是允许用户显示所需要的列。如:use企业销售管理系统select职工号,姓名,工资from职工内蒙古利丰汽车孙建新3.1.4条件查询(P66)Where子句是在使用select语句进行查询时最重要的子句,在where子句中指出了检索的条件,系统进行检索时将按照这些指定的条件对记录进行检索,找出符合条件的记录。在SQL中提供了各种运算符和关键字来实现搜索条件,其中运算符分为比较运算符与逻辑运算符,关键字有in、like、between…and、isnull、isnotnull等。内蒙古利丰汽车孙建新3.1.4.1比较运算符(P67)比较运算符在where字句中使用非常普遍,几乎所有的条件查询都要用到比较运算符。如67页表3-1所列出的比较运算符。内蒙古利丰汽车孙建新数字的比较显示订单金额大于10000元的订单信息,执行下面的代码:use企业销售管理系统select*from订购单where金额10000字符串比较纯英文字符串的比较按照字典顺序进行,先比较第一个字母在字典顺序中的位置,位置在前的字符小于位置在后面的字符,若第一个字符相同则继续比较第二个字符,直到得出比较结果。执行下面的代码:use企业销售管理系统select*from订购单where订购单号'or3'日期时间的比较比较方法按照年、月、日、小时、分钟、秒进行比较。执行下面的代码:use企业销售管理系统select*from订购单where订购日期'2004-09-01'3.1.4.2逻辑运算符(P69)SQL中的逻辑运算符共有3种:and(与)or(或)not(非)内蒙古利丰汽车孙建新and(与)and运算符可以连接两个或两个以上的条件,只有当and连接的条件都为真时,and的结果才为真。执行代码如下:use企业销售管理系统select*from职工where工资1510and仓库号!='wh2'or(或)当or连接的条件中有一个为真,or的结果就为真。执行代码如下:use企业销售管理系统select*from职工where工资2000or仓库号='wh1'not(非)表示将原条件取反,如果原条件为真,则加上not后就是假。执行代码如下:use企业销售管理系统select*from职工wherenot工资15003.1.4.3运算符的优先级(P70)SQL语句各运算符的优先级如71页图31-2所示执行代码如下:use企业销售管理系统select*from职工where(仓库号='wh1'or仓库号='wh2')andnot性别='女'and工资1300and工资2100内蒙古利丰汽车孙建新3.1.5谓词in查询(P71)使用多个or运算符将使where子句过长,这时使用in就非常方便。使用or运算select*from订购单where职工号='zg1'or职工号='zg11'or职工号='zg15'使用谓词inselect*from订购单where职工号in('zg1','zg11','zg15')内蒙古利丰汽车孙建新3.1.6模糊like查询(P72)有时我们不清楚所要查询的确切信息,如不能确定职工的姓名,只知道姓’王’,该如何查找。SQL提供了like关键字。执行以下代码:use企业销售管理系统select*from职工where姓名like'王%'select*from职工where姓名notlike'王%'select*from职工where姓名notlike'王_'内蒙古利丰汽车孙建新3.1.7空值null查询(P74)很多情况下表中记录某一列的值是空值。空值null不能使用比较运算符,null代表的是未知,null不代表任何值。执行以下代码:use企业销售管理系统select*from职工where性别isnullselect*from职工where性别isnotnull内蒙古利丰汽车孙建新3.1.8限制范围between…and查询(P75)限制范围可以使用大于等于号、小于等于号和and运算符三者来完成范围的限制,但使用between…and结构会使SQL更清楚。use企业销售管理系统select*from职工where工资=1300and工资=1900使用限制范围select*from职工where工资between1300and1900内蒙古利丰汽车孙建新3.1.9消除重复字段数据distinct查询(P75)使用关键字distinct可以从结果中除去重复的行use企业销售管理系统select工资from职工selectdistinct工资from职工内蒙古利丰汽车孙建新3.1.10实例剖析----企业销售管理系统(P76)use企业销售管理系统select*from供应商where供应商名like'%厂%'select*from订购单where供应商号in('s1','s2','s5')and金额between8000and1600and订购日期='2004-09-02‘select仓库号,城市from仓库where城市isnotnulland面积!=900内蒙古利丰汽车孙建新3.2嵌套查询(P77)嵌套查询就是在一个select查询语句中嵌套了另一个select子查询语句,即一个select查询结果作为另一个查询的一部分。内蒙古利丰汽车孙建新3.2.1单表嵌套查询(P77)单表嵌套查询就是在一个select查询语句中嵌套了另一个select子查询语句首先利用select语句求出wh1仓库的面积,然后再显示面积大于该值的仓库信息。use企业销售管理系统select*from仓库where面积(select面积from仓库where仓库号='wh1')嵌套查询中也可以带有逻辑运算符、谓词in、like、between…and等。内蒙古利丰汽车孙建新3.2.2多表嵌套查询(P78)多表查询语句就是外层select语句与内层select语句来源于不同的表use企业销售管理系统select*from职工where仓库号in(select仓库号from仓库where城市='北京')select*from订购单where职工号in(select职工号from职工where仓库号in(select仓库号from仓库where城市='北京'))内蒙古利丰汽车孙建新3.2.3实例剖析----企业销售管理系统….实例4(P79)没有职工的仓库信息,就是该仓库中没有职工,哪个仓库号没有在职工表中出现。use企业销售管理系统select*from仓库where仓库号notin(select仓库号from职工)内蒙古利丰汽车孙建新实例剖析----企业销售管理系统….实例5(P80)显示供应商名中含有“青岛”两个字的供应商的订购单信息,并且不显示zg15和zg9职工的订单信息。use企业销售管理系统select*from订购单where供应商号in(select供应商号from供应商where供应商名like'%青岛%')and职工号notin('zg15','zg9')实例剖析----企业销售管理系统….实例6(P80)显示至少经手一次订单的职工信息use企业销售管理系统select*from职工where职工号in(select职工号from订购单)实例剖析----企业销售管理系统….实例7(P80)显示城市不为空,工资在1200到2100之间,销售金额不在8000到1200之间的职工信息use企业销售管理系统select*from职工where仓库号in(select仓库号from仓库where城市isnotnull)and工资between1300and2100and职工号in(select职工号from订购单where金额notbetween8000and12000)实例剖析----企业销售管理系统….实例8(P81)显示工资在职工zg1到zg15工资之间的,职工所在城市为“北京”的职工信息use企业销售管理系统select*from职工where工资between(select工资from职工where职工号='zg1')and(select工资from职工where职工号='zg15')and仓库号in(select仓库号from仓库where城市='北京')3.3排顺查询(P81)查询显示结果一般按照数据被添加到表时的顺序显示,可是在实际运用中往往要求按指定的字段进行排序显示。内蒙古利丰汽车孙建新3.3.1单级排序(P82)排序的关键字是orderby,默认升序,升序关键字asc,降序排列关键字desc。use企业销售管理系统select*from职工orderby工资desc内蒙古利丰汽车孙建新3.3.2多级排序(P82)先按工资降序,再按职工ID升序:use企业销售管理系统select*from职工orderby工资desc,职工IDasc内蒙古利丰汽车孙建新3.4统计函数与别名查询(P83)实际应用中经常需要得到某项值的总和、平均值、最大值等,常用的函数有5个:count()……统计个数sum()……计算总和avg()……计算平均值max()……确定最大值min()……确定最小值内蒙古利丰汽车孙建新3.4.1与列名一起使用的统计函数(P84)use企业销售管理系统selectmax(工资),min(工资),sum(工资),avg(工资),count(*)from职工以上查询结果中统计值没有列名,用下面的代码可显示列名:selectmax(工资)as最大工资,min(工资)as最小工资,sum(工资)as工资总和,avg(工资)as平均工资,count(*)as职工人数from职工内蒙古利丰汽车孙建新3.4.2带有统计函数的嵌套查询(P85)use企业销售管理系统select*from职工where工资(selectavg(工资)from职工)select*from职工where工资(selectavg(工资)from职工where仓库号='wh1'or仓库号='wh2')and姓名notlike'%亮%'内蒙古利丰汽车孙建新3.4.3统计函数字段中添加运算字段(P86)use企业销售管理系统select*,(selectavg(工资)from职工)as平均工资from职工select职工.*,(s