sql语句查询统计

2024-07-02

sql语句查询统计(共10篇)

sql语句查询统计 篇1

第一次:查询(显示)、条件、排序、空记录

第二次:通配符、生成表、文件(记事本)、数组、临时表,数学函数、分组、嵌套查询

第三次:插入记录、删除记录、更新记录 第四次:超连接、新建(打开)数据库、表的建立、表的删除、第五次 表结构的修改,添加记录 显示同张芳同一天出生的学生的信息 格式:

1、查询(显示)记录

显示所有男学生的学号,姓名,性别 区分:字段、条件、表名

Select 字段名列表(*)from 表名; where 条件表达式;

into table(dbf)文件名;

into cursor 临时表名;

into array 数组名;

to file 文件名;

order by 字段名列表(asc desc);

group by 字段名 having 条件;

显示所有大于平均分的学生的学号、姓名 显示同E4挣同样工资的职工信息

Select * from 职工 where 工资=(select 工资 from 职工 where 职工号=”E4”)职工(仓库号C(10),职工号 C(10),工资 N(10,2))

显示所有工资大于1500的员工的仓库号、职工号及所在的城市

2、插入记录

Insert into 表名(字段名列表)values(记录值)

3、删除记录

Delete from 表名 where 条件

4、更新记录

Update 表名 set 字段名=记录值; Where 条件

5、表的删除

drop table 表名

6、表的建立

create table 表名(字段名 数据类型(宽度))

7、表结构的修改select * from 职工where 职工号!=“E4” AND 工资=(select 工资 from 职工 where 职工号=“E4”)

alter table 表名

1)增加字段

alter table student add 身份证号 c(10)

2)删除字段

alter table student drop colum 身份证号

3)修改字段名

alter table student rename colum 出生日期 to 出生年月

4)增加字段有效性规则

alter table student alter 成绩 set check 成绩>=0 and 成绩<=100;

error “成绩输入错误,成绩应该在0-100之间”

5)删除字段有效性规则

alter table student alter 成绩 drop check 注意:

以上题目中用到的 SQL语句粘贴到计事本文件XY.TXT中(每行一条语句)。对两个表操作的方法:

1)同时打开两个表

select 仓库.仓库号,城市,职工号,工资 from 仓库,职工;

where 职工.仓库号=仓库.仓库号 and 工资=1250

2)超连接(内连接、左连接、右连接、全连

接)

内连接:只显示符合条件的记录

左连接:显示符合条件的记录及第一个表中不符合条件的记录

右连接:显示符合条件的记录及第二个表中不符合条件的记录

全连接:显示符合条件的记录及第一、二个表中不符合条件的记录

成绩表(score)

学号姓名课程名成绩 2001张三计算机10 2003张四英语20 2001张三语言30 2005张三数据40 2003张四计算机50

Select sum(成绩)from score group by 学号

Select sum(成绩)from score group by 课程名

select 字段名列表(*)from 表名;where 条件;

order by 字段名列表 asc|desc;

into table(dbf)表名;

into array 数组名;

to file 文件名;

into cursor 临时表名

题目练习

实现以下功能:在考生文件夹下,打开“陶的数据库”的数据库,并利用SQL语句在该数据库中新建一个表:gongzi(职工号 c(4),实发工资 n(7,0)),将zhigong表中基本工资大于1330(含1330)的记录存储在gongzi表中,其中实发工资为:基本工资+加班费(白天20,晚上30),最后将所有的SQL语句保存到考生目录下的sqlanswer.txt文件中(自行建立,一行一条语句)

open database 陶的数据库

create table gongzi(职工号 c(4),基本工资 n(7,2))

select 职工号,基本工资+白班*20+晚班*30 from zhigong;where 基本工资>1350 into array xy

sql语句查询统计 篇2

SELECT[列名]

FROM[表名]

[WHERE<查询条件表达式>]

[ORDER BY<排序的列名>[ASC或DESC]]

其中:[]代表可选的;<>代表必须的。如果有多个列名, 需要用逗号隔开。

ORDER BY是用于排序的, 可以将查询出的数据按照ORDER BY所指定的字段进行排序, 排序时还可以通过ASC或DESC指定升序或降序排列。

简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。

例如, 下面的语句查询work表中姓名为“许剑锋”的stname字段和score字段。

SELECT stname, score

FROM work

WHERE name=&apos;许剑锋&apos;

1 选择列表

选择列表 (select_list) 指出所查询列, 它可以是一组列名列表、星号、表达式、变量 (包括局部变量和全局变量) 等构成。

1.1 选择所有列

例如, 下面语句显示work表中所有列的数据:

SELECT*

FROM work

1.2 选择部分列并指定它们的显示次序

查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。

例如:

SELECT stname, score

FROM work

1.3 更改列标题

在选择列表中, 可重新指定列标题。

定义格式为:

title=列名

列名title

如果指定的title不是标准的标识符格式时, 应使用引号定界符, 例如, 下列语句使用汉字显示列标题:

SELECT昵称=stname, 分数=score

FROM work

1.4 使用DISTINCT关键字屏蔽重复数据

数据表中难免会出现重复数据, DISTINCT的作用是屏蔽结果集中的重复数据行。

SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行, 默认为ALL。使用DISTINCT选项时, 对于所有重复的数据行在SELECT返回的结果集合中只保留一行。

1.5 使用TOP关键字查询表中限定行数

使用TOP n[PERCENT]选项限制返回的数据行数, TOP n说明返回n行, 而TOP n PERCENT时, 说明n是表示一个百分数, 指定返回的行数等于总行数的百分之几。

例如:

SELECT TOP 5*

FROM work

SELECT TOP 10 PERCENT*

FROM work

2 FROM子句

FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, 它们之间用逗号分隔。

在FROM子句同时指定多个表或视图时, 如果选择列表中存在同名列, 这时应使用对象名限定这些列所属的表或视图。例如在student和teaching表中同时存在name列, 在查询两个表中的name时应使用下面语句格式加以限定:

SELECT stname, teaching.name

FROM student, teaching

WHERE student.name=teaching.name

在FROM子句中可用以下两种格式为表或视图指定别名:

表名as别名

表名别名

例如, 上面语句可用表的别名格式表示为:

SELECT stname, b.name

FROM student a, teaching b

WHERE a.name=b.name

3 使用WHERE子句过滤部分行数据

在数据库中查询数据时, 有时用户只希望可以得到一部分数据而不是全部, 如果还使用SELECT…FROM结构, 就会因为大量不需要的数据而使应用实现起来很麻烦, 这时就需要在SELECT语句中加入条件语句, 即WHERE子句。

例如, 下面语句查询体重大于60的数据:

SELECT*

FROM student

WHERE weight>60

WHERE子句可包括各种条件运算符:

比较运算符 (大小比较) :>、>=、=、<、<=、<>、!>、!<

范围运算符 (表达式值是否在指定的范围) :BETWEEN…AND…

NOT BETWEEN…AND…

列表运算符 (判断表达式是否为列表中的指定项) :IN (项1, 项2……)

NOT IN (项1, 项2……)

模式匹配符 (判断值是否与指定的字符通配格式相符) :LIKE、NOTLIKE

空值判断符 (判断表达式是否为空) :IS NULL、NOT IS NULL

逻辑运算符 (用于多条件的逻辑连接) :NOT、AND、OR

3.1 范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30

3.2 列表运算符例:city IN (&apos;Beijin&apos;, &apos;Shanghai&apos;)

3.3 模式匹配符例:常用于模糊查找, 它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。

可使用以下通配字符:

百分号%:可匹配任意类型和长度的字符, 如果是中文, 请使用两个百分号即%%。

下划线_:匹配单个任意字符, 它常用来限制表达式的字符长度。

方括号[]:指定一个字符、字符串或范围, 要求所匹配对象为它们中的任一个。[^]:其取值也[]相同, 但它要求所匹配对象为指定字符以外的任一个字符。

例如:

限制以Publishinshanghai结尾, 使用LIKE&apos;%Publishinshanghai&apos;

限制以G开头:LIKE&apos;[G]%&apos;

限制以G开头外:LIKE&apos;[^G]%&apos;

3.4 逻辑运算符:优先级为NOT、AND、OR

4 查询结果排序

使用SELECT语句进行数据查询后, 为了方便阅读, 可以使用ORDER BY子句对生成的结果集进行排序。在SELECT语法中ORDER BY后面的排序列名可以是字段名, 也可以是表达式, 有多个排序列时, 需要用逗号隔开。拍序列名后面还可以指定排序方式, ASC表示升序, DESC表示降序, 如果不指定默认为升序。

ORDER BY子句的语法格式为:

ORDER BY{column_name[ASC|DESC]}[, …n]

例如:

SELECT*

FROM student

ORDER BY score desc, address ASC

以上是一些关于数据库查询的介绍, 用户可以根据需要应用这些查询技巧从数据库中检索数据, 并将查询结果以表格的形式输出。

sql语句查询统计 篇3

关键词:SELECT语句查询连接

在关系数据库管理系统中,SQL查询语句——SELECT的使用是非常重要的一部分内容,是任何SQL语言中使用频率最高的语句,它是SQL语言的灵魂。SELECT语句可以使数据库服务器根据客户的要求搜索所需要的信息,并按规定的格式返回给客户。使用T—SQL的SELECT语句,不仅可以查询普通数据库中的表格和视图信息,还可以查询SQL Server的系统信息。在Transact-SQL中绝大多数的语句都是由SELECT构成的。

然而笔者在近几年对关系数据库管理软件(如Access、SQL Server、Oracle等)的教学中,发现对于这部分的内容学生掌握得并不是很好。为此,笔者根据多年的教学经验,将SQL查询语句的一些使用技巧列出来,供学生参考和同行借鉴。

由于SELECT语句的完整语句比较复杂,故在这里只列举出它的主要子句。SELECE语句的主要子句格式如下:

SELECT [ALL|DISTINCT][TOP n] select_list

[INTO new_table]

[FROM table_condition]

[WHERE search_condition]

[GROUP BY group_by_expression]

[HAVING search_condition]

[ORDER BY order_by_expression [ASC|DESC]]

[COMPUTE expression]

下面笔者就结合简单查询、联合查询和连接查询三方面通过举例的形式来谈谈有关Transact-SQL语句的用法。(注:以下所有例子的数据表来自示例数据库“图书管理系统”或“northwind”,在进行查询前,先用USE关键字将相关数据库打开。)

1 简单查询

Transact-SQL的簡单查询包括选择列表、FROM子句和WHERE子句三部分内容。由此说明要查询的列、所查询的表或视图以及检索条件等。

例如,从数据库“图书管理系统”的“图书明细表”中查询定价大于50的“图书编号”、“图书名称”、“出版日期”和“定价”字段的信息。

SELECT图书编号,图书名称,出版日期,定价

FROM 图书明细表

WHERE 定价>50

1.1 选择列表

简单查询中的选择列表(select_list)指出要查询的字段列,可以由一组字段名列表、星号、表达式或变量(包括局部变量和全局变量)等构成。

1.1.1 查询表中所有的字段列

星号(*)在选择列表中有特殊含义,它代表列表中的所有行。

例如,从数据库“图书管理系统”中查询“出版社信息表”的所有行。

SELECT *

FROM 出版社信息表

1.1.2 查询表中指定的列

可以从表中检索指定的列,只需将这些列放在选择列表中。

例如,从数据库“图书管理系统”的“作者表”中查询列为“作者姓名”、“性别”和“电话”的作者信息。

SELECT作者姓名,性别,电话

FROM作者表

1.1.3 改变列名

在选择列表中,通过使用AS关键字创建更具可读性的别名来取代默认的列名。

定义格式为:列标题AS列名或列名列标题

注意:如果指定的列名不是标准的标识符格式,应使用引号定界符。

例如,从数据库“图书管理系统”的“图书明细表”中,查询列“图书名称”和“定价”为八折后的“新价格”的图书信息。

SELECT图书名称,定价*0.8 AS新价格

FROM图书明细表

1.1.4 消除重复行

如果希望一个列表没有重复值,则可以使用DISTINCT子句来消除结果集中的重复行。

例如,从数据库“northwind”的“suppliers”表中检索所有的行,但每个国家只显示一次。

SELECT DISTINCT country

FROM suppliers

1.1.5 使用TOPn列出前n个记录

用TOPn[PERCENT]关键字列出结果集中前n个记录。其中TOPn表示返回结果集中前n行记录,而TOP n PERCENT中的n表示一百分数,指定返回的记录数等于总记录数的百分之几。

例如,从数据库“northwind”的“order details”表中查询出前5条记录,只显示orderid、productid、quantity三列内容。

SELECT TOP 5 orderid,roductid,quantity

FROM [order details]

1.2 FROM子句

1.2.1 FROM子句指定从中查询行和列所属的源表或视图。可以指定多个,最多达256个,其间用“,”分隔。当FROM子句同时指定多个表或视图时,如果在选择列表中有相同的列,则应使用对象名限定这些列所属的表或视图。

例如,在数据库“northwind”的“orders”和“customers”两个表中均有customerid(顾客id)列,在查询两个表中的顾客id时应使用下面语句格式来限定。

SELECT DISTINCT customerid,companyname,orderdate,

FROM orders,customers

WHERE orders. customerid = customers. customerid

1.2.2 在FROM子句中可以为表或视图指定别名。格式:<表名> as <别名>或<表名> <别名>

例如,上面例中的查询语句也可表示为如下形式:SELECT DISTINCT customerid,companyname,orderdate,

FROM orders a,customers b

WHERE a.customerid = b. customerid

1.3 WHERE子句

1.3.1 使用WHERE子句,可以根据给定的搜索条件检索特定的行。

例如,下面的查询将从数据库“northwind”中的“employees”表中检索所有居住在美国的职员的姓和居住的城市。

SELECT lastname,city

FROM employees

WHERE country=USA

1.3.2 在WHERE子句中可包括以下一些运算符:①比较运算符(用于比较大小):>(大于)、>=(大于或等于)、=(等于)、<(小于)、<=(小于或等于)、<>(不等于)。②范围运算符(检索在指定取值范围内的行):BETWEEN…AND…和NOT BETWEEN…AND…。例:unitprice BETWEEN 10 AND 30等价于unitprice>=10 AND unitprice<=30。③列表运算符(检索与指定值列表相匹配的行):IN (项1,项2,……)和NOT IN (项1,项2,……)。例:country IN ('Germany','China')。④字符串比较符(通过字符串比较来选择符合条件的行):LIKE和NOT LIKE,适用于char、nchar、varchar、nvarchar、binary、varbinary、datetime或smalldatetime等数据类型的查询,以及在特定条件下对text、ntext和image数据类型进行的查询。

采用以下四种通配符来形成字符串搜索条件:a百分号%:包含零个或更多字符的任意字符串。b下划线_:匹配任何单个字符。c方括号[]:指定的范围或集合内的任何单个字符。d[^]:不在指定的范围或集合内的任何单个字符。

例如,用LIKE ‘N%来表示以N开头的任意字符串;

用LIKE ‘N[xy]%表示以N开头,第二个字符是x或y的字符串;

用LIKE ‘N[^xy]%表示以N开头,第二个字符不是x或y的字符串;

用LIKE ‘N_M%表示以N开头,第三个字符是M,第二个为任意一个字符的字符串。

⑤空值判断符(检索那些指定列中遗漏信息的行):IS NULL和NOT IS NULL。

例如,从数据库“northwind”的“suppliers”表中检索fax列为空的公司列表。

SELECT companyname,fax

FROM suppliers

WHERE fax IS NULL

⑥逻辑运算符(用于组合多个条件,简化查询处理):NOT、AND和OR,优先级从左到右依次降低。

1.4 ORDER BY子句

用ORDER BY子句对结果集中的行进行升序(ASC)或降序(DESC)排列。

格式:ORDER BY {order_by_expression [ASC|DESC]} [,…n]

注意:不可以在ORDER BY子句中使用ntext、text或image类型的列。

例如,下面从数据库“northwind”的 “products”表中检索每个产品的产品标识、产品名、类别和单价。先将结果集按照类别进行升序排列,对于同一类别,再按照单价进行降序排列。

SELECT productid,productname,categoryid,unitprice

FROM products

ORDER BY categoryid,unitprice DESC

2 联合查询

使用UNION子句的查询称为联合查询。它可以将两个或更多个SELECT语句的返回结果组合到一个单个结果集中,该结果集包含了联合查询中所有查询结果集中的全部行数据。

联合查询的语法格式如下:

select_statement

UNION [ALL] select_statement

[UNION [ALL] select_statement][…n]

其中,select_statement为待联合的SELECT查询语句。ALL选项表示将所有行都合并到结果集中,若缺省,则被联合查询结果集合中的重复行将只保留一行。

注意:①在用UNION子句查询时,查询结果的列标题为第一个查询语句的列标题。因此,必须在第一个SELECT语句中指定列标题;②SQL Server要求所引用的表必须具有相似的数据类型、相同的列数,且每个查询中的选择列表也必须具有相同的列顺序;③如果希望结果集中的行按一定顺序排列,则必须在最后一个有UNION操作符的语句中包含ORDER BY子句,以指定排序方式。

例如:从数据库“经销商”的“顾客信息表”中,查询姓王的顾客的姓名和家庭住址,并为其增加一个类型列TYPE,列的内容为“顾客”;从“销售人员表”中,查询姓王的销售人员的姓名和家庭住址,并增加一个列,列的内容为“营业员”;然后,将两个查询结果合并在一起。

SELECT姓名,家庭住址,顾客AS TYPE

FROM顾客信息表

WHERE姓名LIKE‘王%

UNION

SELECT姓名,家庭住址,营业员

FROM销售人员表

WHERE姓名LIKE ‘王%

3 连接查询

连接操作可以同时查询两个或多个表中的数据,所生成的结果集将多个表中的行和列合并在一起。

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,建议在FROM子句中指定连接,这样有助于将指定的连接条件与WHERE子句中的搜索条件区分开来。

SQL-92标准所定义的FROM子句的连接语法格式为:

FROM table_source1 join_type table_source 2

[ON (join_condition)]

其中,table_source1和table_source 2指定要查询的表;join_type 指定所执行的连接类型,可分为三类:内连接(Inner Join)、外连接(Outer Join)、交叉连接(Cross Join);join_condition指定连接条件。

3.1 内连接

内连接通过比较两个表共同拥有的列的值,把两个表连接起来。SQL Server将只返回满足连接条件的行。它是SQL Server默认的连接方式。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

3.1.1 等值连接即在连接条件中使用“=”运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括重复列。

例如,列出数据库“图书管理系统”的“作者表”和“出版社信息表”中位于同一城市的作者和出版社信息。

SELECT *

FROM 作者表AS a INNER JOIN 出版社信息表AS b

ON a.籍贯=b.出版社所在城市

3.1.2 不等连接即在连接条件中使用除等于运算符外的其它比较运算符来比较被连接的列的列值。

3.1.3 自然连接即在连接条件中使用等于运算符比较被连接列的列值,但它使用选择列表指出查询。

例:列出数据库“图书管理系统”的“作者表”和“出版社信息表”中位于同一城市的作者和出版社,并删除重复列“籍贯”。

SELECT a.*,b.出版社编号,b.出版社名称,b.出版社电话

FROM 作者表AS a INNER JOIN 出版社信息表AS b

ON a.籍贯=b.出版社所在城市

3.2 外连接

若要创建一个查询,以返回一个或多个表中的所有行(无论在另外的表中是否含有相匹配的行),则需要使用外连接。外连接有三种类型:左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和完全外连接(FULL OUTER JOIN或FULL JOIN)。

例如,在数据库“图书管理系统”中,以在同一个城市的出版社和作者为条件,对“出版社信息表”和“作者表”进行左外连接查询。

SELECT a.姓名,a.性别,a.籍贯as 所在城市,b.出版社名称

FROM 作者表as a LEFTJOIN 出版社信息表as b

ON a. 籍贯=b. 出版社所在城市

ORDER BY 姓名

在查询结果窗口中,显示左表中指定列的所有行和对应连接列的所有行,在左表中没有找到相匹配的右表的对应位置填上NULL。

例如,在数据库“图书管理系统”中,以在同一个城市的出版社和作者为条件,对“出版社信息表”和“作者表”进行完全外连接查询。

SELECT a.姓名,a.性别,a.籍贯as 所在城市,b.出版社名称

FROM 作者表as a FULLJOIN 出版社信息表as b

ON a.籍贯=b.出版社所在城市

ORDER BY 姓名

在查询结果窗口中显示相连接的两个表的所有记录,在没有找到相匹配的位置上填上NULL。

3.3 交叉连接

交叉连接(CROSS JOIN)不带WHERE子句,返回的是被连接的两个表所有数据行的笛卡尔积,即返回到结果集中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

例如,下面将显示数据库“northwind”中“shippers”和“suppliers”表交叉连接后的结果集,以列出供应商运输其产品的所有可能方式。

SELECT suppliers.companyname,shippers.companyname

FROM suppliers CROSS JOIN shippers

3.4 自连接

在连接查询时,當table_source1和table_source 2是同一个表时,即对同一个表进行连接操作,则称此连接为自连接。

例如,使用自连接在数据库“图书管理系统”的“作者表”中查找籍贯是“河北石家庄”的作者。

SELECT a.姓名,a.性别,b. 姓名,b.性别

FROM 作者表as a INNER JOIN作者表as b

ON a.籍贯=b.籍贯

WHERE a.籍贯=河北石家庄

ORDER BY 姓名

sql语句查询统计 篇4

外连接:

全连接(full join)、左连接(left join)、右连接(right join)。

交叉联接(cross join)。

外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)或者两个连接表(全外连接)中的所有不符合条件的数据行。

1.左连接 (left [outer] join)

左外连接就是将左表的所有数据分别于右表的每条数据进行连接组合,返回的结果除内连接的数据外,还有左表中不符合条件的数据,并在右表的相应列中填上null值。

SQL语句如下:

select * from mt_pb_org o left join mt_pb_orgframe f on o.PB_ORGFRAMEID = f.PB_ORGFRAMEID;

等价语句:

select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid = f.pb_orgframeid(+);

2.右连接 (right [outer] join)

右外连接就是将右表中的所有数据分别与左表的每条数据进行连接组合,返回的结果除了内连接的数据外,还有右表中不符合条件的数据,并在左表相应的列中填上null值。

SQL语句如下:

select * from mt_pb_org o right join mt_pb_orgframe on o.pb_orgframeid = f.pb_orgframeid;

等价语句:

select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid(+) = f.pb_orgframeid;

3.全外连接 (full [outer] join)

全外连接就是将左表的所有数据分别与右表的每条数据进行连接组合,返回的结果除了内连接的数据外,还有两个表中不符合条件的数据,并在左表或者右表的相应列中填上null值。

SQL语句如下:

select * from mt_pb_org o full join mt_pb_orgframe o.pb_orgframeid = f.pb_orgframeid;

4.交叉连接(cross join)

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

SQL语句如下:

sql语句查询统计 篇5

estimate_id title

一张销售表

sell_id estimate_id no sprice snum

一张采购表

buy_id estimate_id no bprice bnum

一个订单对应多个销售和采购(estimate_id),一个销售对应多个采购(no)

查询的结果:

titlescountbcount

XX10.005.00

BB(注:这种情况可能是只有订单,还没有销售和采购)

AA100.0045.00

...........

SQL语句:

[sql]

SELECT e. * , s.scount, b.bcount

FROM tb_estimate AS e

LEFT JOIN (

SELECT SUM( sprice * snum ) AS scount, estimate_id

FROM tb_sell

WHERE deleted =0

GROUP BY estimate_id

) AS s ON e.estimate_id = s.estimate_id

LEFT JOIN (

SELECT SUM( bprice * bnum ) AS bcount, estimate_id

FROM tb_buy

WHERE deleted =0

GROUP BY estimate_id

) AS b ON b.estimate_id = e.estimate_id

WHERE e.deleted =0

ORDER BY updated DESC

sql语句查询统计 篇6

在一个结果组中搜索

子选择的理念很简单:一个选择查询安置在另一个查询内部,创建一个在单一声明搜索中不可用的资源。子选择允许查询的合并,结果组比较的责任落到了数据库中而不是应用软件代码中。

使用这个功能的一个途径是对两个表格中的可比数据专栏中的值进行定位。例如,我的一个数据库有两个表格,Album和Lyric。我可以很容易地通过下面的子查询声明来找到每一个Metallica的歌曲中包含“justice”的歌名:

SELECTsong_nameFROMAlbum

WHEREband_name=‘Metallica’

ANDsong_nameIN

(SELECTsong_nameFROMLyric

WHEREsong_lyricLIKE‘%justice%’);

这个例子是很简单的,我从Album表格中选择了所有Metallica的歌曲,接着,我在lyric表格中选择所有包含“justice”的歌曲,最后,我使用IN关键字来从Lyric表格结果组中显示的Album表格中返回歌曲名称。

我使用Lyric表格结果组来给Album表格中的结果做限定。WHERE子句中的子选择部分是完全自包含的,因此我不需要使用例如Album.song_name和Lyric.song_name等完整的专栏名称。我没有从最终结果组的Lyric表格中返回任何值,如果我需要歌曲的Lyric,我会使用一个JOIN声明。

使用NOTIN排除结果

你可以使用NOTIN关键字来获得明确地不被包含在另一个结果组中的结果。例如,我想要通过下面的代码来返回Metallica在“AndJusticeforAll”专辑中不包含单词“justice”的歌曲:

SELECTsong_nameFROMAlbum

WHEREalbum_name=‘AndJusticeforAll’

ANDband_name=‘Metallica’

ANDsong_nameNOTIN

(SELECTsong_nameFROMLyric

WHEREsong_lyricLIKE‘%justice%’);

在前面的SQL代码中,我选择了Metallica的“AndJusticeforAll,”专辑中的所有歌曲,接着是带有歌词中带有“justice”所有歌曲,最后从在Lyric结果组中没有出现的Album结果组返回了所有歌曲。较之于返回两个查询并使用代码来比较数组,你通过一个单独的声明就可以得到确切的结果。

使用EXISTS来相关结果

有时你可以通过多种途径来访问相同的数据,而且你需要对你的结果进行匹配(或相关)来得到值的交叉区。例如,我可以通过搜索Album表格来得到Metallica的歌曲列表,可是,我也可以从我的Cover表格中得到由Damage,Inc表演的Metallica的歌曲的列表,我可以在两个表格中直接比较查询结果来对值作相关。

SELECTAlbum.song_nameFROMAlbum

WHEREAlbum.band_name=‘Metallica’

ANDEXISTS

(SELECTCover.song_nameFROMCover

WHERECover.band_name=‘Damage,Inc.’

ANDCover.song_name=Album.song_name);

在SQL代码中,我使用完整的专栏名称,这是因为我直接对两个表格作比较,而不仅仅是将结果组作为一个被动资源来使用,

我并不从Cover表格中返回结果。一些数据库支持NOTEXISTS关键字来确保你并没有匹配。

使用合计函数来比较

除了使用子选择在相关的表格中检查数据,你还可以在一个WHERE子选择中使用合计函数来确定主结果组。例如,我想要核实每一个Metallica歌曲在Album表格中的条目。而且,我还想返回缺少歌曲的专辑的名称。很方便地,AlbumInfo表格包含的一个专栏(album_tracks)给出了应该有多少首歌曲方面的信息。

SELECTAlbumInfo.album_nameFROMAlbumInfo

WHEREAlbumInfo.band_name=‘Metallica’

ANDalbum_tracks

(SELECTCOUNT(*)FROMAlbum

WHEREAlbum.album_name=AlbumInfo.album_name);

现在我已经成功地返回了所有Metallica的专辑中,应有的曲目数量与Album表格中实际的歌曲条目数量不符的专辑名称。

返回子选择结果

如果我还是关心每一张专辑的曲目数量并需要得到一个比较报告怎么办?你可以将一个子选择的结果作为最终结果组的一部分来返回。这个功能经常被合计函数所使用。通常地,对其他表格的访问可以作为你的查询的一部分。下一个例子将返回每一张Metallica的专辑,应该包括的曲目数量和在Album表格中包括的条目数量:

SELECTAlbumInfo.album_name,album_tracks,

(SELECTCOUNT(*)FROMAlbum

WHEREAlbum.album_name=AlbumInfo.album_name)

FROMAlbumInfo

WHEREAlbumInfo.band_name=‘Metallica’;

另一个强有力的例子涉及了在AlbumInfo表格中将album_tracks值改变为在Album表格中实际的条目数量:

UPDATEAlbumInfoSETalbum_tracks=

SELECTCOUNT(*)FROMAlbum

WHEREAlbumInfo.album_name=Album.album_name)

WHEREAlbumInfo.band_name=‘Metallica’;

在上两个例子中的子选择声明被看作一个自包含单位来执行。

子选择比较关键字(ALL,SOME,ANY)

除了使用标准查询功能,还有三个关键字可以使你将一个表达式值和一个单栏子选择声明结果组作比较,这些关键字返回TRUE或FALSE的Boolean值。ALL关键字要求子选择中所有值都遵守比较运算符。SOME和ANY关键字则要求至少一对。这里是ALL关键字的一个简单实例。

SELECT*FROMAlbumSales

WHEREalbum_gross>

ALL(SELECTalbum_costsFROMAlbumProduction);

上面的例子将从AlbumSales表格返回在AlbumProduction表格里面付出总额大于成本而生产最昂贵的专辑的所有记录。如果用ANY替代ALL,声明将返回所有付出总额大于最低专辑成本的专辑记录。声明=ANY与IN关键字意义是相同的。声明ALL与NOTIN关键字是对等的。关键字ANY和SOME也是等同的。数据库生产商中对这些关键字的支持情况是不同的,因此在出现问题时要相信查阅生产商方面的资料。

谁对标准化数据结构有疑问?

关系代数与SQL查询优化的研究 篇7

详细分析关系代数表达式等价变换前后的查询代价.针对DBMS查询优化器如何生成成本最小的查询计划问题,给出关系代数表达式的优化规则.提出基于关系代数运算等价变换规则的`SQL查询优化策略.该策略提供了查询优化器生成成本最小的查询计划的设计依据.

作 者:王峥 王亚平WANG Zheng WANG Ya-ping 作者单位:王峥,WANG Zheng(郑州铁路职业技术学院,河南郑州,450052)

王亚平,WANG Ya-ping(西安外事学院,陕西西安,710077)

用SQL进行函数查询数据库教程 篇8

用SQL进行函数查询数据库教程

。接下来我们介绍常用的函数功能及使用方法。

4.5.1 【ceil】函数

在【命令编辑区】输入“select mgr, mgr/100,ceil(mgr/100) from scott.emp;”,然后单击【执行】按钮,出现如图4.29所示的结果。

【参见光盘文件】:第4章4.5451.sql。

【ceil】函数用法:ceil(n),取大于扔谑值n的最小整数。

4.5.2 【floor】函数

在【命令编辑区】输入“select mgr, mgr/100,floor(mgr/100) from scott.emp;”,然后单击【执行】按钮,出现如图4.30所示的结果。

【参见光盘文件】:第4章4.5452.sql。

【floor】函数用法:floor(n),取小于等于数值n的最大整数。

4.5.3 【mod】函数

在【命令编辑区】输入“select mgr, mod(mgr,1000), mod(mgr,100), mod(mgr,10) from scott.emp;”,然后单击【执行】按钮,出现如图4.31所示的结果。

【参见光盘文件】:第4章4.5453.sql。

【mod】函数用法:mod(m,n),取m整除n后的余数。

4.5.4 【power】函数

在【命令编辑区】输入“select mgr, power(mgr,2),power(mgr,3) from scott.emp;”,然后单击【执行】按钮,出现如图4.32所示的结果。

【参见光盘文件】:第4章4.5454.sql。

【power】函数用法:power(m,n),取m的n次方。

4.5.5 【round】函数

在【命令编辑区】输入“select mgr, round(mgr/100,2),round(mgr/1000,2) from scott.emp;”,然后单击【执行】按钮,出现如图4.33所示的结果。

【参见光盘文件】:第4章4.5455.sql。

【round】函数用法:round(m,n),四舍五入,保留n位。

4.5.6 【sign】函数

在【命令编辑区】输入“select mgr, mgr-7800,sign(mgr-7800) from scott.emp;”,然后单击【执行】按钮,出现如图4.34所示的结果,

【参见光盘文件】:第4章4.5456.sql。

【sign】函数用法:sign(n)。n>0,取1;n=0,取0;n<0,取-1。

4.5.7 【avg】函数

在【命令编辑区】输入“select avg(mgr)平均薪水 from scott.emp;”,然后单击【执行】按钮,出现如图4.35所示的结果。

【参见光盘文件】:第4章4.5457.sql。

【avg】函数用法:avg(字段名),求平均值。要求字段为数值型。

4.5.8 【count】函数

(1)在【命令编辑区】输入“select count(*) 记录总数 from scott.emp;”,然后单击【执行】按钮,出现如图4.36所示的结果。

【参见光盘文件】:第4章4.5458-1.sql。

(2)在【命令编辑区】输入“select count(distinct job ) 工作类别总数 from scott.emp;”,然后单击【执行】按钮,出现如图4.37所示的结果。

【参见光盘文件】:第4章4.5458-2.sql。

【count】函数用法:count(字段名)或count(*),统计总数。

4.5.9 【min】函数

在【命令编辑区】输入“select min(sal) 最少薪水 from scott.emp;”,然后单击【执行】按钮,出现如图4.38所示的结果。

【参见光盘文件】:第4章4.5459.sql。

【min】函数用法:min(字段名),计算数值型字段最小数。

4.5.10 【max】函数

在【命令编辑区】输入“select max(sal) 最高薪水 from scott.emp;”,然后单击【执行】按钮,出现如图4.39所示的结果。

【参见光盘文件】:第4章4.54510.sql。

【max】函数用法:max(字段名),计算数值型字段最大数。

4.5.11 【sum】函数

在【命令编辑区】输入“select sum(sal) 薪水总和 from scott.emp;”,然后单击【执行】按钮,出现如图4.40所示的结果。

【参见光盘文件】:第4章4.54511.sql。

【sum】函数用法:sum(字段名),计算数值型字段总和。

sql语句查询统计 篇9

[sql]

--@PageNo 是页码(要查询第几页),@pageSize是页容量(即每页显示多少条数据)

[sql]

select * from (

select row_number over(order by id) rn,* from Test)

tb where rn >(@PageNo-1)*@pageSize and rn <=@PageNo*@pageSize

以上只是简单的分页,如果还有其他逻辑,比如排序 可以在over中加入排序的方法 test表 也可以换成子查询等其他逻辑

在oracle中,可以使用如下语句

[sql]

select t2.*

from (select rownum r,t1.* from test t1 where rownum<=:PageNo*:pageSize) t2

where t2.r>(:PageNo-1)*:pageSize

参数由@变成了‘:’意义都是相同的! 只需在查询时传入需要的参数即可.

精心SQL常用操作语句篇 篇10

这篇文章主要介绍了MySql常用操作SQL语句汇总,本文讲解了增加、删除、查询、修改等常用SQL语句实例,需要的朋友可以参考下

MySQL的常见操作在这里先做一下总结,已经整合到代码里面,经过检验无误,

代码如下:

/*创建一个数据库*/

create database xuning_test;

/*说明当时使用数据库对象*/

use xuning_test;

/*向数据库中添加表并且定义表的结构*/

create table person(

id int not null,

name varchar(16) not null,

sex varchar(16) not null,

age int not null,

address varchar(128) not null,

remark varchar(512) not null

);

/*向数据库的表中插入数据*/

insert into person value

(1,‘name_1‘,‘men‘,99,‘beijing‘,‘This is a frindsheep boy‘),

(2,‘name_2‘,‘men‘,88,‘shanghai‘,‘ok great‘),

(1,‘name_3‘,‘man‘,77,‘guangzhou‘,‘This is lickly‘),

(1,‘name_4‘,‘men‘,66,‘beijing‘,‘This is a frindsheep boy‘),

(1,‘name_5‘,‘men‘,55,‘beijing‘,‘you dont going to shool‘),

(1,‘name_6‘,‘man‘,44,‘beijing‘,‘This is a frindsheep boy‘),

(1,‘name_7‘,‘men‘,33,‘beijing‘,‘This is a frindsheep boy‘),

(1,‘name_8‘,‘man‘,22,‘beijing‘,‘‘),

(1,‘name_9‘,‘men‘,11,‘beijing‘,‘This is a frindsheep boy‘)

;

/*查询时否成功插入*/

select * from person;

/*下面是多种查询方式*/

/*根据列的名称属性值*/

select name from person;

/*添加条件-根据性别*/

select name from person where sex = ‘men‘;

/*也可以用比较符作为条件--一定逗号隔开*/

select name,address from person where age > 50;

/*看做对象去使用数据库和表的关系=---双表关联--对象关系一定要明确*/

select xuning_test.person.name, xuning_test.person.id, xuning_test.person.age, xuning_test.person.address

from xuning_test.person, test1.test_xuning

where xuning_test.person.id = test1.test_xuning.id

;

/*使用表的别名进行查询*/

use xuning_test;

select c.name,sex from person as c where c.age > 40 and c.address=‘beijing‘;

上一篇:英语英标趣味教学下一篇:我家的新成员作文450字