易语言SQL数据库查询语句

易语言SQL数据库查询语句

2023年7月13日发(作者:)

易语⾔SQL数据库查询语句⼀、Select语句:select语句除了可以查看数据库中的表格和视图的信息外,还可以查看SQL Server的系统信息、复制、创建数据表。其查询功能强⼤,是SQL语⾔的灵魂语句,也是SQL中使⽤频率最⾼的语句。基本select语句:⼀个基本的select语句可以分解成三个部分:查找什么数据(select)、从哪⾥查找(from)、查找的条件是什么(where)。select 语句的⼀般格式如下: select <⽬标列表达式列表> [into 新表名] from 表名或视图名 [where <条件>] [group by <分组表达式>] [having <条件>] [order by <排序表达式>[ASC|DESC]]⼆、单表查询:指仅涉及⼀个表的查询(⼀)查询指定的列1.查询表中所有列:在select语句指定列的位置上使⽤*号时,表⽰查询表的所有列。格式:select * from 表名例1.在xs表中查询全体学⽣的信息。use xsbookselect * from xs2.查询表中指定的列。查询多列时,列名之间要⽤逗号隔开。格式: select 表名.列名1,列名2,...from 表名例2.在xsbook数据库的xs表中查询学⽣的姓名、专业名、借书数信息。select 姓名,专业名,借书数from xs3.指定查询结果中的列标题通过指定列标题(也叫列别名)可使输出结果更容易被⼈理解。指定列标题时,可在列名之后使⽤AS⼦句;也可以使⽤:列别名=<表达式>的形式指定列标题。AS⼦句的格式为:列名或计算表达式 [AS] 列标题其中:AS可省略。例3:给列加显⽰标题⽰例:select 借书证号 as cardno,姓名 as name, 借书数 as cntfrom xs或采⽤列别名=<表达式>的形式指定列标题,如上例可改为:select cardno=借书证号,name=姓名,cnt=借书数from xs4.查询经过计算的列(即表达式的值):使⽤select对列进⾏查询时,不仅可以直接以列的原始值作为结果,⽽且还可以将列值进⾏计算后所得值作为查询结果,即select⼦句可以查询表达式的值,表达式可由列名、常量及算术运算符组成。查询结果计算列显⽰“⽆列名”,⼀般要给计算列加列标题。其中:表达式中可以使⽤的运算符有:加+、减-、乘*、除/、取余%例4:查询所有书名、单价及8折之后的图书价格select 书名,单价,⼋折=单价*0.8from book(⼆)、选择⾏:选择表中的部分⾏或全部⾏作为查询的结果:格式: select [all|distinct] [top n[percent]]<⽬标列表达式列表>from 表名1. 消除查询结果中的重复⾏对于关系数据库来说,表中的每⼀⾏都必须是不同的(即⽆重复⾏)。但当对表进⾏查询时若只选择其中的某些列,查询结果中就可能会出现重复⾏。在select语句中使⽤distinct关键字可以消除结果集中的重复⾏,其格式为:select distinct 列名1[,列名2,...] from 表名其中:select语句中使⽤distinct的含义是对结果集中的重复⾏只选择⼀个,以保证⾏的唯⼀性(注意:强调的是“⾏”,⽽不是某⼀列)。例5:查询所有专业名select distinct 专业名from xs注意:与使⽤Distinct关键字相反,当使⽤关键字All时,将保留结果集中的所有⾏(默认值为All)例如:select all 姓名,性别from xs2. 限制查询结果中的返回⾏数使⽤top选项可限制查询结果的返回⾏数,即返回指定个数的记录数。其中:n是⼀个正整数,表⽰返回查询结果集的前n⾏;若带percent关键字,则表⽰返回结果集的前n%⾏。例6:查询xs表的前5个记录信息select top 5 * from xs再如:select top 50 percent * from xs --查询前50%的学⽣信息(三)查询满⾜条件的⾏: ⽤where⼦句实现条件查询:通过where⼦句实现,该⼦句必须紧跟在From⼦句之后。格式为:select [all|distinct] [top n[percent]]<⽬标列表达式列表>from 表名where <条件>说明:在查询条件中可使⽤以下运算符或表达式:P134运算符 运算符标识⽐较运算符 <=,<,=,>,>=,!=,<>,!>,!< 范围运算符 and, and 列举运算符 in,not in 模糊匹配运算符 like,not like空值运算符 is null,is not null 逻辑运算符 and,or,not 1.使⽤⽐较运算符: 例7:查询xsbook数据库xs表中借书数在2本以上的学⽣情况(含2本)。 select * from xs where 借书数>=2 --或为:where 借书数!<2 2.指定范围: ⽤于指定范围的关键字有两个:and和 and。⽤于查找字段值在(或不在)指定范围的⾏。 格式为:表达式 [not] between <表达式1> and <表达式2>其中:between关键字之后的是范围的下限(即低值),and关键字之后的是范围的上限(即⾼值)例8:查询xs表中1980 ⾄1985年出⽣的学⽣情况。select *from xswhere 出⽣时间 between '1980-01-01' and '1985-12-31'再如:查询xs 表中⾮1980年出⽣的学⽣信息。select *from xswhere 出⽣时间 not between '1980-01-01' and '1980-12-31'3.使⽤列举:使⽤in关键字可以指定⼀个值的集合,集合中列出所有可能的值,当表达式的值与集合中的任⼀元素个匹配时,即返回true,否则返回false。格式为:<表达式> [not] in(值1,值2,...,值n)例9:查询xs表中专业名为'计算机'、'信息⼯程'、'英语'或'⾃动化'的学⽣的借书证号,姓名,借书数,专业名。select 借书证号,姓名,借书数,专业名from xswhere 专业名 in('计算机','信息⼯程','英语','⾃动化')注意:与in相对的是 not in,⽤于查找表达式的值不属于指定集合的⾏。例如:查询xs表中⾮'计算机'、'信息⼯程'、'英语'专业的学⽣情况:select *from xswhere 专业名 not in('计算机','信息⼯程','英语')4.使⽤通配符进⾏模糊查询:可⽤like ⼦句进⾏字符串的模糊匹配查询,like⼦句将返回逻辑值(true或False)。like⼦句的格式为: <字符型字段> [not] like <匹配串>其含义是:查找指定字段值与匹配串相匹配的记录。匹配串中通常含有通配符%和_(下划线)。其中:%:代表任意长度(包括0)的字符串例:a%c:表⽰以a开头,以c结尾的任意长度的字符串,如:asc、abccccccccc、aabbc、ac_:代表任意⼀个字符例:a_c表⽰以a开头,以c结尾,长度为3的字符串,如:abc、ascLike⼦句中使⽤通配符的查询也称模糊查询。例10:查询xs表中姓“王”且姓名为两个字的学⽣情况select *from xswhere 姓名 like '王_'再如:查询book表中书名含有“数据”字样的图书情况:select *from bookwhere 书名 like '%数据%'注意:所有通配符都必须在like ⼦句中才有意义,否则将被当作普通字符处理;且like⼦句中的匹配串也可以是⼀个不含通配符的完整的字符串(如下例)。例11:查询xs表中计算机专业的学⽣情况select *from xswhere 专业名 like '计算机'查询相反的情况:则使⽤以下语句:select *from xswhere 专业名 not like '计算机' --查询xs表中⾮计算机专业的学⽣情况即:如果like后⾯的匹配串中不含通配符,那么可以⽤“=”(等号)运算符来替代like。即上例中的where⼦句等价于:where 专业名='计算机'。5.使⽤null的查询当需要判定⼀个表达式的值是否为空值时,使⽤ is null关键字。格式为:<表达式> is [not] null当不使⽤not时,若表达式的值为空值,则返回true,否则返回false;当使⽤not时,结果刚好相反。例12:查询xs表中专业名尚不确定的学⽣情况。select *from xswhere 专业名 is null再如:查询xs表中专业名已确定的学⽣的姓名,专业名。select 姓名,专业名from xswhere 专业名 is not null6.多重条件查询:使⽤逻辑运算符逻辑运算符and(与:两个条件都要满⾜)和or(或:满⾜其中⼀个条件即可)可⽤来联接多个查询条件。and的优先级⾼于or,但若使⽤括号可以改变优先级。例13:查询xs表中借书数在3本以下的计算机专业学⽣的姓名和借书证号。select 借书证号,姓名from xswhere 专业名='计算机' and 借书数<3 再如:查询计算机和英语专业学⽣的基本情况: select * from xs where 专业名='计算机' or 专业名='英语' (四)对查询结果排序: order by⼦句可⽤于对查询结果按照⼀个或多个字段的值(或表达式的值)进⾏升序(ASC)或降序(DESC)排列,默认为升序。 格式:order by {排序表达式[ASC|DESC]}[,...n] 其中:排序表达式既可以是单个的⼀个字段(如例14),也可以是由字段、函数、常量等组成的表达式(如例15),或⼀个正整数。 例14:查询xs表中的全体学⽣信息并按出⽣时间排序,要求晚出⽣的学⽣排在前⾯。 select * from xs order by 出⽣时间 desc 思考:若本例改为以下格式的语句,其功能是什么? selecttop 5 * from xs order by 出⽣时间 desc 例15:请查询图书的书名、六折后的书价,并将结果按六折后的书价的降序排列。 select 书名,单价*0.6 as 书价六折 from book order by 单价*0.6 desc 说明:本例中,order by⼦句也可写为: order by 2,这⾥2代表排序字段或表达式(即:单价*0.6)在select⼦句中出现的顺序号。 注意:排序表达式可有多个,例如:将xs表的学⽣按性别的降序排序,同性别的按出⽣时间的升序排序: select * from xs order by 性别 desc,出⽣时间 asc 注意:对于null值,若为升序则排在最前⾯,若为降序则排在最后。 (五)使⽤统计函数:⼜称集函数,聚合函数 在对表进⾏检索时,经常需要对结果进⾏计算或统计,T-SQL提供了⼀些统计函数(也称集函数或聚合函数),⽤来增强检索功能。统计函数⽤于计算表中的数据,即利⽤这些函数对⼀组数据进⾏计算,并返回单⼀的值。 常⽤统计函数表 函数名 功能 AVG 求平均值 count 求记录个数,返回int类型整数 max 求最⼤值 min 求最⼩值 sum 求和 1. SUM和AVG功能:求指定的数值型表达式的和或平均值。 例16:查询计算机专业学⽣所借图书的平均数、借书总数。 select avg(借书数) as 平均借书数,sum(借书数) as 借书总数 from xs where 专业名='计算机' 2. Max和Min 功能:求指定表达式的最⼤值或最⼩值。 例17:在xs表中查询学⽣最多和最少的借书数 select max(借书数) as 最多借书数,min(借书数) as 最少借书数 from xs 3. count: 该函数有两种格式:count(*)和count([all]|[distinct] 字段名),为避免出错,查询记录个数⼀般使⽤count(*),⽽查询某字段有⼏种取值⽤count(distinct 字段名)。 (1).count(*): 功能:统计记录总数。 例18:查询学⽣总数 select count(*) as 学⽣总数 from xs 再如:查询已借阅了图书的学⽣⼈数。 select count(*) as 借阅了图书的学⽣数 from xs where 借书数<>0思考:查询计算机专业的学⽣总数。(2).count([all]|[distinct] 字段名)功能:统计指定字段值不为空的记录个数,字段的数据类型可以是text、image、ntext、uniqueidentifier之外的任何类型。例19:查询学⽣总数select count(借书证号) as 总⼈数from xs说明:A.本例中由于“借书证号”字段值所有记录都不为空,故这⼀统计结果即为总记录个数,即和count(*)的统计结果⼀样;ct表⽰:先消除指定字段取值重复的记录,然后再统计指定字段值不为空的记录个数;⽽all 则表⽰所有指定字段值不为空的全部记录都参加统计计数。默认为all。例20:查询出版社数。select count(distinct 出版社) as 出版社数from book注意:若select 列表中使⽤了统计函数,则列表中不允许再指定任何字段名,⽤group by⼦句指定的字段除外。如:以下操作将会产⽣错误:select 借书证号,count(*)from xs(六):对查询结果分组:group by⼦句⽤于将查询结果表按某⼀列或多列值进⾏分组,列值相等的为⼀组,每组统计出⼀个结果。该⼦句常与统计函数⼀起使⽤进⾏分组统计。格式为:group by 分组字段[,...n][having <条件表达式>]例21:统计男、⼥⽣各多少⼈。select 性别,count(*) as ⼈数from xsgroup by 性别再如:查询各专业⼈数及各专业的总借书数。select 专业名,count(*) as 各专业⼈数,sum(借书数) as 各专业的借书总数from xsgroup by 专业名说明:在使⽤group by⼦句时应注意以下⼏点:1.在使⽤group by⼦句后,select列表中只能包含:group by⼦句中所指定的分组字段及统计函数。⼦句的⽤法:having⼦句必须与group by ⼦句配合使⽤,⽤于对分组后的结果进⾏筛选(筛选条件中常含有统计函数)。例22:查询学⽣⼈数在2⼈以上(含2⼈)的专业的专业名以及其学⽣⼈数select 专业名,count(*) as ⼈数from xsgroup by 专业名having count(*)>=23. 分组查询时:不含统计函数的条件,通常使⽤where⼦句;含有统计函数的条件,则只能⽤having⼦句。例如:查询“体育”专业男、⼥⽣各有多少⼈。select 性别,count(*) as ⼈数from xswhere 专业名='体育'group by 性别再如:查询平均借书数在2本以上(含)的专业及其学⽣⼈数。select 专业名,count(*) as ⼈数from xsgroup by 专业名having avg(借书数)>=2(七)compute⼦句:格式:{compute 统计函数名}[,...n][by 分组表达式[,...n]功能:compute⼦句将产⽣⼀个单独的汇总⾏,⽤以显⽰统计信息。相当于在select 语句的结果后⾯加了⼀个汇总⾏,这样既查询出了源表中⼀个⼀个的详细记录(即具体的字段值),⼜查询出了统计某些列数据所产⽣的统计信息(即:细节+统计)。例23:查询计算机专业学⽣的借书证号,姓名,出⽣时间及学⽣⼈数。select 借书证号,姓名,出⽣时间from xswhere 专业名='计算机'compute count(借书证号)其中:汇总⾏的列标题:cnt表⽰:count函数汇总avg表⽰:avg函数汇总sum表⽰:sum函数汇总再如:查询所有图书的书名,单价,出版社及均价。select 书名,单价,出版社from bookcompute avg(单价)说明:使⽤compute⼦句时应注意以下⼏点:e <统计函数名> ⼦句中所涉及到的字段是select 字段名列表中已列出的字段名。如:以下操作将产⽣错误,思考⼀下为什么?select 书名,单价,出版社from bookcompute sum(库存量)2.同时使⽤by⼦句和order by⼦句也可实现分组统计查询,但by⼦句必须紧跟在order by ⼦句之后;by⼦句中的分组字段必须是order by⼦句中的第⼀个排序字段。例24:查询各专业学⽣的姓名,性别,专业名及各专业的学⽣⼈数。select 姓名,性别,专业名from xsorder by 专业名compute count(姓名) by 专业名再如:查询各专业学⽣的姓名,性别,专业名,借书数及其总借书数。select 姓名,性别,专业名,借书数from xsorder by 专业名compute sum(借书数) by 专业名总结:group by:可⽤于解决分组统计的问题。即只能显⽰分组字段值及统计函数值,且每组只有⼀⾏统计数据。compute:可⽤于解决既要显⽰具体的记录数据⼜要显⽰统计信息的问题,并且不分组。即不需分组,既显⽰字段值⼜要显⽰统计函数值。by:可⽤于解决既要显⽰具体的记录数据⼜要分组显⽰统计信息的问题。即分组统计,既要显⽰除分组字段以外的其它字段值⼜要显⽰统计函数值。(⼋)、select语句的其它功能:1、复制或创建表(into⼦句):into⼦句功能:将select语句查询所得的结果保存到⼀个新建的表中。注意:into ⼦句应放在select 字段名列表之后。into⼦句不能与compute⼦句⼀起使⽤。例25:由xs表创建'计算机专业学⽣借书证'表,包括借书证号和姓名。select 借书证号,姓名 into 计算机专业学⽣借书证from xswhere 专业名='计算机'再如:将xs表数据全部复制到表xs4中。select * into xs4from xs⼜例: 只复制xs表的结构,不复制记录,即新表为空表。select * into xs7from xswhere 1=2 /*这⾥指定⼀个永远为假的条件*,以使⽆记录被复制/2、合并结果集(Union⼦句):可以将两个或多个select查询的结果合并成⼀个结果集,即合并两个或多个查询结果的记录。格式为: select 语句1 {union [all] select 语句2}[...n]说明:(1).⽤来合并的各select 语句字段列表中的列数、各对应列的数据类型、列的顺序必须⼀致。(2).all表⽰:合并的结果中保留两个查询结果的所有⾏,不去除重复⾏。若省略all则在合并的结果中将去除重复⾏。(3).合并后结果集中的列名来⾃第⼀个seleect 语句。例26:合并xsbook库中表xs1、xs2、xs3的全部记录(假设这三个表的结构相同)。select *from xs1unionselect *from xs2unionselect *from xs33、显⽰变量或表达式的值(⽆数据源查询):select语句还可显⽰常量、变量或表达式的值,也就是说⽤select语句可查询输出不在数据表中的数据,故⼜称为⽆数据源查询。如: select 'we are friends'⼜如:select 123.56,'中国','沈阳'select 45*23-1注意:这⾥也可以为要输出的值指定列显⽰标题,如: select '中国' as 国家,'沈阳' as 城市4.⽤select 语句向表中插⼊多⾏记录。格式:insert into 表名[(字段列表)]select 语句注意:insert into表名[(字段列表)]和select查询结果集的列数、列序和对应列的数据类型必须⼀致。例27:将表xs2中全体学⽣的记录数据追加到表xs1中。insert into xs1select * from xs2再如:将表xs3中⼥⽣的记录追加到表xs1中,要求只追加借书证号,姓名,性别,出⽣时间字段值。insert into xs1(借书证号,姓名,性别,出⽣时间)select 借书证号,姓名,性别,出⽣时间from xs3where 性别=0注意:⼀个select 语句中各⼦句的顺序如下:select---[记录范围]---字段名列表---[into]---[from]---[where]---[group by]---[having]---[order by]---[compute---[by]]---------------------原⽂:

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689247774a225673.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信