SQLServerSELECT语句主要用来查询数据。常用的SELECT语句的语法为:SELECT选择列表(查询所显示的内容)FROM表的列表(查询内容所在的表)WHERE查询的条件(查询内容的条件)1.查询图书表book1中每本图书的所有数据USEbookGOSELECT*FROMbook1GO2.在图书book1表中查询每本图书的书名和定价USEbookGOSELECT书名,定价FROMbook1GO3.在book1表中查询编号为“XH5468”、YBZT0001”、YBZT0024”的图书的书名和定价(OR后要有空格)方法一:使用WHERE语句USEbookGOSELECT书名,定价FROMbook1WHERE编号='XH5468'OR编号='YBZT0003'OR编号='YBZT0024'GO方法二:使用IN关键字(IN前要有空格),IN后的括号内数据关系为“或”的关系。USEbookGOSELECT书名,定价FROMbook1WHERE编号IN('XH5468','YBZT0003','YBZT0024')GO使用DISTINCT消除重复值。在SELECT之后使用DISTICT关键字,会消除指定列的值都相同的那些行。4.在图书表book1中查询图书的出版社,要求消除值相同的那些行。USEbookGOSELECTDISTINCT出版社FROMbook1GO使用TOPn[PERCENT]仅返回n[%]行。5.从图书表book1中查询所有图书的信息,要求只显示前5行数据。USEbookGOSELECTTOP5*FROMbook1GO修改查询结果中列的标题(别名)6.查询图书表中的图书编号、ISBN号、定价、出版社,要求查询结果显示如下:方法一:USEbookGOSELECT'图书编号'=编号,'图书书号'=ISBN号,'图书定价'=定价,'图书出版社'=出版社FROMbook1GO方法二:USEbookGOSELECT编号'图书编号',ISBN号'图书书号',定价'图书定价',出版社'图书出版社'FROMbook1GO方法三:(AS前后要有空格)USEbookGOSELECT编号AS'图书编号',ISBN号AS'图书书号',定价AS'图书定价',出版社AS'图书出版社'FROMbook1GO7.在book1表中查询定价为20元的图书编号、书名和定价。(要求使用AS子句将结果中指向目标列标题分别指定为图书的编号、图书名和图书定价)USEbookGOSELECT编号AS'图书的编号',书名AS'图书名',定价AS'图书定价'FROMbook1WHERE定价=20GO使用WHERE字句给出查询条件,指定逻辑表达式,可以包含比较运算符、逻辑运算符、比较运算符有:=(等于)或(不等于)(大于)=(大于等于)!(不大于)(小于)=(小于等于)!(不小于)8.在图书book1表中查询书名为“红楼梦图咏(3册)”的书的出版社。USEbookGOSELECT出版社FROMbook1WHERE书名='红楼梦图咏(册)'GO列为表达式(SELECT字句中的选项列表可以是要指定的表达式或列的列表,表达式可以是列名、函数或常数的列表。)9.查询图书book1表中的最小定价、最大定价、平均定价USEbookGOSELECTMIN(定价)AS最小定价,MAX(定价)AS最大定价,AVG(定价)AS平均定价FROMbook1GO使用ORDERBY子句重新排列查询结果。降序应使用DESC关键字,升序的关键字ASC可以省略。(DESC和ASC前后要加空格)。10.查询book1表的编号、出版社、书名,要求查询结果首先按照书名降序排列,书名相同时,则按编号升序排列。USEbookGOSELECT书名,编号,出版社FROMbook1ORDERBY书名DESC,编号ASCGO使用LIKE关键字进行查询——模糊查询(LIKE前要有空格)通配符有4种:%百分号(匹配0或多个字符的字符串_下划线(匹配任何单个的字符)[]排列通配符(匹配任何在范围或集合之内的单个字符)[^]不在范围之内的字符(匹配任何不在范围或集合之外的单个字符)要查找通配符本身时,需要他们用方括号括起来。11.查询以“中”字开头的书名USEbookGOSELECT*FROMbook1WHERE书名LIKE'中%'GO12.查询以“大学”两字结尾的书名的所有书USEbookGOSELECT*FROMbook1WHERE书名LIKE'%大学'GO13.查询书名第三个字为人的图书USEbookGOSELECT*FROMbook1WHERE书名LIKE'__人%'GO14.查询以“人”和“中”字开头的书名USEbookGOSELECT*FROMbook1WHERE书名LIKE'[中人]%'GO15.查询不以“中”字开头的书名方法一:USEbookGOSELECT*FROMbook1WHERE书名LIKE'[^中]%'GO方法二:USEbookGOSELECT*FROMbook1WHERE书名NOTLIKE'中%'GO使用ISNULL关键字查询没有赋值的行(ISNULL是分开的,而且,IS前要有空格)15.查询book1表中没有出版社的图书名称和出版社USEbookGOSELECT书名,出版社FROMbook1WHERE出版社ISNULLGO查询某一范围的信息使用BETWEEN关键字,BETWEEN和AND结合使用去设定取值范围定价BETWEEN100AND200等价于定价=100AND定价=20016.查询定价大于2000元或小于5元的图书,要求查询结果按照定价降序排序USEbookGOSELECT*FROMbook1WHERE定价NOTBETWEEN5AND2000ORDERBY定价DESCGO使用COMPUTE字句使用COMPUTE字句USEbookGOSELECT编号,书名,定价,出版社FROMbook1ORDERBY出版社COMPUTEAVG(定价)BY出版社GO使用GROUPBY子句统计每个出版社出了多少书。USEbookGOSELECT出版社,count(出版社)AS'本数'FROMbook1GROUPBY出版社GOHAVING子句与WHERE子句同样都是限定查询条件,但有区别1.如果在分组之前设置查询条件,使用WHERE字句如果在分组之后设置查询条件,使用HAVING字句2.SELECT和HAVING子句中可以使用聚合函数WHERE子句中不能使用聚合函数。查询出版社为“中国长安”所有书的平均价格。方法一:USEbookGOSELECT出版社,AVG(定价)AS'平均价格'FROMbook1WHERE出版社='中国长安'GROUPBY出版社GO方法二:USEbookGOSELECT出版社,AVG(定价)AS'平均价格'FROMbook1GROUPBY出版社HAVING出版社='中国长安'GO嵌套查询(先执行内层,再执行外层)ODBERBY字句只能在外层。查询图书定价大于所有图书平均价格的图书的编号、书名和定价USEbookGOSELECT编号,书名,定价FROMbook1WHERE定价(SELECTAVG(定价)FROMbook1)GO从图书book1表中查询图书名,从图书book2表中查询图书编号,使用UNION运算符合并这两个查询结果。USEbookGOSELECT书名FROMbook1—所有查询的列数必须相同UNION--将两个表合并在一个表SELECT编号FROMbook2GO两个规则:1.所有查询的列数必须相同2.所有查询中对应列的数据类型必须兼容USEbookGOSELECT书名AS'book1表的书名和book2表的编号'FROMbook1UNION--将两个表合并在一个表SELECT编号FROMbook2GOUSEbookGOSELECT书名AS'按降序排列后book1表的书名和book2表的编号'FROMbook1UNION--将两个表合并在一个表SELECT编号FROMbook2ORDERBY按降序排列后book1表的书名和book2表的编号DESCGO多表查询笛卡儿积(避免使用笛卡儿积)USEbookGOSELECT*FROMbook1,teacherGO连接条件查询编号为“XH5468”的书名、定价、作者姓名和作者职称。USEbookGOSELECTbook1.编号,书名,定价,作者姓名,职称FROMbook1,teacherWHEREbook1.编号=teacher.编号ANDbook1.编号='XH5468'GO相等连接(会造成数据冗余)查询所有图书和所有图书和作者的信息USEbookGOSELECT*FROMbook1,teacherWHEREbook1.编号=teacher.编号GO自然连接查询所有图书和所有图书和作者的信息。要求连接的列只显示一次。USEbookGOSELECTbook1.*,作者姓名,职称FROMbook1,teacherWHEREbook1.编号=teacher.编号GO带有选择条件的连接查询图书的定价在50元以上相关的书名、定价、作者姓名和出版社USEbookGOSELECTbook1.书名,book1.定价,teacher.作者姓名,book1.出版社FROMbook1,teacherWHEREbook1.编号=teacher.编号ANDbook1.定价=50GO不等值连接USEbookGOSELECTbook1.书名,book1.编号,book2.书名,book2.编号FROMbook1,book2WHEREbook1.编号book2.编号GO自连接左外连接FROM左表名RIGHTJOIN右表名和左表记录数相同,不满足连接条件用空值来填充。使用左外连接查询book1表中凡是有作者信息的所有图书的信息。USEbookGOSELECTbook1.*,teacher.作者姓名FROMteacherLEFTJOINbook1ONbook1.编号=teacher.编号GO右外连接FROM左表名RIGHTJOIN右表名和右表记录数相同,不满足连接条件用空值来填充。全外连接FROM左表名FULLJOIN右表名ON连接条件自然连接+匹配左表+匹配右表交叉连接(笛卡儿积)使用表别名(在FROM字句中将要定义别名的表用空格间隔,然后紧随所定义的别名)USEbookGOSELECTb.*,t.作者姓名FROMteachert,book1bWHEREt.编号=b.编号GO使用EXISTS关键字WHEREEXISTS(查询语句)检测是否有查询记录。