SQL语法之高级查询
2009-04-13 15:02
489 查看
SQL语法之高级查询
2009-04-12 10:13
2009-04-12 10:13
表的别名: SELECT {table_alias.column}[,...n] FROM table_name [AS] table_alias [,...n] 内连接 SELECT select_list FROM table1,table2 WHERE table1.column1=table.column2 或 SELECT select_list FROM table1 [INNER] JOIN table2 ON table1.column1=table2.column2 外连接 (1)左连接,用“*=”或“LEFT JOIN”,返回左边的表的全部数据 (2)右连接,用“=*”或“RIGHT JOIN”,返回右边的表的全部数据 (3)完全连接,用“FULL OUTER JOIN” 联合查询,用于合并所有查询结果集中的全部行数据,命令格式如下: select_statement UNION [ALL] select_statement [UNION [ALL] select_statement][...n] 统计函数有:SUM(), AVG(), COUNT(), MAX(), MIN(),命令格式如下: function_name([ALL|DISTINCT] expression) 嵌套 (1)使用比较运算符的子查询,如: SELECT * FROM Score WHERE score>(SELECT AVG(score) FROM Score) (2)使用IN的子查询,如: SELECT * FROM Score WHERE [student id] IN (SELECT [student id] FROM Student WHERE sex=1) (3)使用EXISTS的子查询,如: SELECT * FROM Student WHERE EXISTS (SELECT * FROM Score WHERE score<70) (4)用于替代表达式的子查询,如: SELECT s.[student id],[name],'student score'=(SELECT SUM(score) FROM Score WHERE s.[student id]=score.[student id]) FROM Student AS s ---------------------------------------------------- 1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1 法二:select top 0 * into b from a 2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用) insert into b(a, b, c) select d,e,f from b; 3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件 例子:..from b in '"&Server.MapPath(".")&"/data.mdb" &"' where.. 4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、说明:显示文章、提交人和最后回复时间 select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b 6、说明:外连接查询(表名1:a 表名2:b) select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c 7、说明:在线视图查询(表名1:a ) select * from (SELECT a,b,c FROM a) T where t.a > 1; 8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括 select * from table1 where time between time1 and time2 select a,b,c, from table1 where a not between 数值1 and 数值2 9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 11、说明:四表联查问题: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 12、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5 13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 14、说明:前10条记录 select top 10 * form table1 where 范围 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b) 16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表 (select a from tableA ) except (select a from tableB) except (select a from tableC) 17、说明:随机取出10条数据 select top 10 * from tablename order by newid() 18、说明:随机选择记录 select newid() 19、说明:删除重复记录 Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) 20、说明:列出数据库里所有的表名 select name from sysobjects where type='U' 21、说明:列出表里的所有的 select name from syscolumns where id=object_id('TableName') 22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。 select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type 显示结果: type vender pcs 电脑 A 1 电脑 A 1 光盘 B 2 光盘 A 2 手机 B 3 手机 C 3 23、说明:初始化表table1 TRUNCATE TABLE table1 24、说明:选择从10到15的记录 select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc -------------------------------------------------------------------------------- 动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: declare @fname varchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fname varchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 3. 输出参数 declare @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将exec执行结果放入变量中? declare @num int, @sqls nvarchar(4000) set @sqls='select @a=count(*) from tableName ' exec sp_executesql @sqls,N'@a int output',@num output select @num select * from sysobjects where xtype='tr' --返回库中触发器 select * from sysobjects where xtype='U' --返回库中用户表 1.日期算當月天數: select Day(dateadd(day,-1,convert(datetime,convert(char(07),dateadd(m,1,getdate()),120)+'-01'))) select 32-Day(getdate()+(32-Day(getdate()))) 2.簡單的分割字串: 用' union all select 'replace'分割符' Order By可以指定列序而不用指定列名,在下面的例子里说明它的用处(注意,第三列未指定别名) Select a.ID,a.Name,(Select Count(*) From TableB b Where a.ID=b.PID) From TableA a Order By 3 --修改用户数据库的排序规则 ater database dbname collate SQL_Latin1_General_CP1_CI_AS --修改字段的排序规则 alter table a alter column c2 varchar(50) collate SQL_Latin1_General_CP1_CI_AS --按姓氏笔画排序 select * from 表名 order by 列名 Collate Chinese_PRC_Stroke_ci_as --按拼音首字母排序 select * from 表名 order by 列名 Collate Chinese_PRC_CS_AS_KS_WS --查找一个Server下含有某个表名的数据库名字 EXEC sp_msforeachdb ' USE [?] IF OBJECT_ID(N''表名'') IS NOT NULL PRINT N''?''' --查询所有表名、字段名及字段描述 select 表名=object_name(id), 列名=col_name(object_id(object_name(id)),smallid), 描述=value from sysproperties --查询所有表的记录数明细 --方法(1) select a.name,b.rows from sysobjects a, sysindexes b where a.name=b.name and a.type='u' --方法(2) sp_msforeachtable 'select ''?'' as ''表名'',(select sum(1) from ?) as ''记录数''' --复制表(表结构) --方法(1) select * into Employee_bak from Employee where 1<>1 --方法(2) select top 0 * into Employee_bak from Employee --方法(3) --企业管理器中的右键表-->复制,然后在查询分析器中粘贴查看SQL语句 --判断两字符是否完全(区分大小写)相等(如何判断字符的大小写) declare @v nvarchar(10) declare @p nvarchar(10) set @v='NIPSAN' if cast(@v as varbinary)= cast(@p as varbinary) print N'相等' else print N'不等' --得到数据库中所有表的空间/记录情况 exec sp_MSForEachTable @precommand=N' create table ##( id int identity, 表名 sysname, 字段数 int, 记录数 int, 保留空间 Nvarchar(10), 使用空间 varchar(10), 索引使用空间 varchar(10), 未用空间 varchar(10))', @command1=N'insert ##(表名,记录数,保留空间,使用空间,索引使用空间,未用空间) exec sp_spaceused ''?'' update ## set 字段数=(select count(*) from syscolumns where id=object_id(''?'')) where id=scope_identity()', @postcommand=N'select * from ## order by id drop table ##' --查看硬盘分区: EXEC master..xp_fixeddrives --Order By的一个小技巧 /* Order By可以指定列序而不用指定列名,在下面的例子里说明它的用处(注意,第三列未指定别名) Select a.ID,a.Name,(Select Count(*) From TableB b Where a.ID=b.PID) From TableA a Order By 3 */ 表结构新 SELECT 表名=case when a.colorder=1 then d.name else '' end, 表说明=case when a.colorder=1 then isnull(f.value,'') else '' end, 字段序号=a.colorder, 字段名=a.name, 标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end, 主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid ))) then '√' else '' end, 类型=b.name, 占用字节数=a.length, 长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'), 小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0), 允许空=case when a.isnullable=1 then '√'else '' end, 默认值=isnull(e.text,''), 字段说明=isnull(g.[value],''), 索引名称=isnull(h.索引名称,''), 索引顺序=isnull(h.排序,'') FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype='U' and d.status>=0 left join syscomments e on a.cdefault=e.id left join sysproperties g on a.id=g.id and a.colid=g.smallid left join sysproperties f on d.id=f.id and f.smallid=0 left join(--这部分是索引信息,如果要显示索引与表及字段的对应关系,可以只要此部分 select 索引名称=a.name,c.id,d.colid ,排序=case indexkey_property(c.id,b.indid,b.keyno,'isdescending') when 1 then '降序' when 0 then '升序' end from sysindexes a join sysindexkeys b on a.id=b.id and a.indid=b.indid join (--这里的作用是有多个索引时,取索引号最小的那个 select id,colid,indid=min(indid) from sysindexkeys group by id,colid) b1 on b.id=b1.id and b.colid=b1.colid and b.indid=b1.indid join sysobjects c on b.id=c.id and c.xtype='U' and c.status>=0 join syscolumns d on b.id=d.id and b.colid=d.colid where a.indid not in(0,255) ) h on a.id=h.id and a.colid=h.colid --where d.name='要查询的表' --如果只查询指定表,加上此条件 order by a.id,a.colorder --索引信息 --索引信息 select 索引名称=case when b.keyno=1 then a.name else '' end ,表名=case when b.keyno=1 then c.name else '' end ,列名=d.name ,排序=case indexkey_property(c.id,b.indid,b.keyno,'isdescending') when 1 then '降序' when 0 then '升序' end ,聚集=INDEXPROPERTY(c.id,a.name,'IsClustered') ,唯一=case INDEXPROPERTY(c.id,a.name,'IsUnique') when 0 then '非唯一' when 1 then case when e.id is null then '唯一索引' else '唯一约束' end end ,e.name ,填充因子=a.OrigFillFactor from sysindexes a join sysindexkeys b on a.id=b.id and a.indid=b.indid --join (--这里的作用是有多个索引时,取索引号最小的那个 --select id,colid,indid=min(indid) from sysindexkeys --group by id,colid) b1 on b.id=b1.id and b.colid=b1.colid and b.indid=b1.indid join sysobjects c on b.id=c.id and c.xtype='U' and c.status>=0 join syscolumns d on b.id=d.id and b.colid=d.colid left join sysobjects e on b.indid=e.id and e.xtype='UQ' where a.indid not in(0,255) order by c.name,a.name 找出表中某一列相同的数据行 select *from table where (column in(select column from table group by column having count(*)>1) --1、查找员工的编号、姓名、部门和出生日期,如果出生日期为空值, --显示日期不详,并按部门排序输出,日期格式为yyyy-mm-dd。 select emp_no ,emp_name ,dept , isnull(convert(char(10),birthday,120),'日期不详') birthday from employee order by dept --2、查找与喻自强在同一个单位的员工姓名、性别、部门和职称 select emp_no,emp_name,dept,title from employee where emp_name<>'喻自强' and dept in (select dept from employee where emp_name='喻自强') --3、按部门进行汇总,统计每个部门的总工资 select dept,sum(salary) from employee group by dept --4、查找商品名称为14寸显示器商品的销售情况, --显示该商品的编号、销售数量、单价和金额 select a.prod_id,qty,unit_price,unit_price*qty totprice from sale_item a,product b where a.prod_id=b.prod_id and prod_name='14寸显示器' --5、在销售明细表中按产品编号进行汇总,统计每种产品的销售数量和金额 select prod_id,sum(qty) totqty,sum(qty*unit_price) totprice from sale_item group by prod_id --6、使用convert函数按客户编号统计每个客户1996年的订单总金额 select cust_id,sum(tot_amt) totprice from sales where convert(char(4),order_date,120)='1996' group by cust_id --7、查找有销售记录的客户编号、名称和订单总额 select a.cust_id,cust_name,sum(tot_amt) totprice from customer a,sales b where a.cust_id=b.cust_id group by a.cust_id,cust_name --8、查找在1997年中有销售记录的客户编号、名称和订单总额 select a.cust_id,cust_name,sum(tot_amt) totprice from customer a,sales b where a.cust_id=b.cust_id and convert(char(4),order_date,120)='1997' group by a.cust_id,cust_name --9、查找一次销售最大的销售记录 select order_no,cust_id,sale_id,tot_amt from sales where tot_amt= (select max(tot_amt) from sales) --10、查找至少有3次销售的业务员名单和销售日期 select emp_name,order_date from employee a,sales b where emp_no=sale_id and a.emp_no in (select sale_id from sales group by sale_id having count(*)>=3) order by emp_name --11、用存在量词查找没有订货记录的客户名称 select cust_name from customer a where not exists (select * from sales b where a.cust_id=b.cust_id) --12、使用左外连接查找每个客户的客户编号、名称、订货日期、订单金额 --订货日期不要显示时间,日期格式为yyyy-mm-dd --按客户编号排序,同一客户再按订单降序排序输出 select a.cust_id,cust_name,convert(char(10),order_date,120),tot_amt from customer a left outer join sales b on a.cust_id=b.cust_id order by a.cust_id,tot_amt desc --13、查找16M DRAM的销售情况,要求显示相应的销售员的姓名、 --性别,销售日期、销售数量和金额,其中性别用男、女表示 select emp_name 姓名, 性别= case a.sex when 'm' then '男' when 'f' then '女' else '未' end, 销售日期= isnull(convert(char(10),c.order_date,120),'日期不详'), qty 数量, qty*unit_price as 金额 from employee a, sales b, sale_item c,product d where d.prod_name='16M DRAM' and d.pro_id=c.prod_id and a.emp_no=b.sale_id and b.order_no=c.order_no --14、查找每个人的销售记录,要求显示销售员的编号、姓名、性别、 --产品名称、数量、单价、金额和销售日期 select emp_no 编号,emp_name 姓名, 性别= case a.sex when 'm' then '男' when 'f' then '女' else '未' end, prod_name 产品名称,销售日期= isnull(convert(char(10),c.order_date,120),'日期不详'), qty 数量, qty*unit_price as 金额 from employee a left outer join sales b on a.emp_no=b.sale_id , sale_item c,product d where d.pro_id=c.prod_id and b.order_no=c.order_no --15、查找销售金额最大的客户名称和总货款 select cust_name,d.cust_sum from customer a, (select cust_id,cust_sum from (select cust_id, sum(tot_amt) as cust_sum from sales group by cust_id ) b where b.cust_sum = ( select max(cust_sum) from (select cust_id, sum(tot_amt) as cust_sum from sales group by cust_id ) c ) ) d where a.cust_id=d.cust_id --16、查找销售总额少于1000元的销售员编号、姓名和销售额 select emp_no,emp_name,d.sale_sum from employee a, (select sale_id,sale_sum from (select sale_id, sum(tot_amt) as sale_sum from sales group by sale_id ) b where b.sale_sum <1000 ) d where a.emp_no=d.sale_id --17、查找至少销售了3种商品的客户编号、客户名称、商品编号、商品名称、数量和金额 select a.cust_id,cust_name,b.prod_id,prod_name,d.qty,d.qty*d.unit_price from customer a, product b, sales c, sale_item d where a.cust_id=c.cust_id and d.prod_id=b.prod_id and c.order_no=d.order_no and a.cust_id in ( select cust_id from (select cust_id,count(distinct prod_id) prodid from (select cust_id,prod_id from sales e,sale_item f where e.order_no=f.order_no) g group by cust_id having count(distinct prod_id)>=3) h ) --18、查找至少与世界技术开发公司销售相同的客户编号、名称和商品编号、商品名称、数量和金额 select a.cust_id,cust_name,d.prod_id,prod_name,qty,qty*unit_price from customer a, product b, sales c, sale_item d where a.cust_id=c.cust_id and d.prod_id=b.prod_id and c.order_no=d.order_no and not exists (select f.* from customer x ,sales e, sale_item f where cust_name='世界技术开发公司' and x.cust_id=e.cust_id and e.order_no=f.order_no and not exists ( select g.* from sale_item g, sales h where g.prod_id = f.prod_id and g.order_no=h.order_no and h.cust_id=a.cust_id) ) 19、查找表中所有姓刘的职工的工号,部门,薪水 select emp_no,emp_name,dept,salary from employee where emp_name like '刘%' 20、查找所有定单金额高于20000的所有客户编号 select cust_id from sales where tot_amt>20000 21、统计表中员工的薪水在40000-60000之间的人数 select count(*)as 人数 from employee where salary between 40000 and 60000 22、查询表中的同一部门的职工的平均工资,但只查询"住址"是"上海市"的员工 select avg(salary) avg_sal,dept from employee where addr like '上海市%' group by dept 23、将表中住址为"上海市"的员工住址改为"北京市" update employee set addr like '北京市' where addr like '上海市' 24、查找业务部或会计部的女员工的基本信息。 select emp_no,emp_name,dept from employee where sex='F'and dept in ('业务','会计') 25、显示每种产品的销售金额总和,并依销售金额由大到小输出。 select prod_id ,sum(qty*unit_price) from sale_item group by prod_id order by sum(qty*unit_price) desc 26、选取编号界于‘C0001’和‘C0004’的客户编号、客户名称、客户地址。 select CUST_ID,cust_name,addr from customer where cust_id between 'C0001' AND 'C0004' 27、计算出一共销售了几种产品。 select count(distinct prod_id) as '共销售产品数' from sale_item 28、将业务部员工的薪水上调3%。 update employee set salary=salary*1.03 where dept='业务' 29、由employee表中查找出薪水最低的员工信息。 select * from employee where salary= (select min(salary ) from employee ) 30、使用join查询客户姓名为"客户丙"所购货物的"客户名称","定单金额","定货日期","电话号码" select a.cust_id,b.tot_amt,b.order_date,a.tel_no from customer a join sales b on a.cust_id=b.cust_id and cust_name like '客户丙' 31、由sales表中查找出订单金额大于“E0013业务员在1996/10/15这天所接每一张订单的金额”的所有订单。 select * from sales where tot_amt>all (select tot_amt from sales where sale_id='E0013'and order_date='1996/10/15') order by tot_amt 32、计算'P0001'产品的平均销售单价 select avg(unit_price) from sale_item where prod_id='P0001' 33、找出公司女员工所接的定单 select sale_id,tot_amt from sales where sale_id in (select sale_id from employee where sex='F') 34、找出同一天进入公司服务的员工 select a.emp_no,a.emp_name,a.date_hired from employee a join employee b on (a.emp_no!=b.emp_no and a.date_hired=b.date_hired) order by a.date_hired 35、找出目前业绩超过232000元的员工编号和姓名。 select emp_no,emp_name from employee where emp_no in (select sale_id from sales group by sale_id having sum(tot_amt)<232000) 36、查询出employee表中所有女职工的平均工资和住址在"上海市"的所有女职工的平均工资 select avg(salary) from employee where sex like 'f' union select avg(salary) from employee where sex like 'f' and addr like '上海市%' 37、在employee表中查询薪水超过员工平均薪水的员工信息。 Select * from employee where salary>(select avg(salary) from employee) 38、找出目前销售业绩超过40000元的业务员编号及销售业绩,并按销售业绩从大到小排序。 Select sale_id ,sum(tot_amt) from sales group by sale_id having sum(tot_amt)>40000 order by sum(tot_amt) desc 39、找出公司男业务员所接且订单金额超过2000元的订单号及订单金额。 Select order_no,tot_amt From sales ,employee Where sale_id=emp_no and sex='M' and tot_amt>2000 40、查询sales表中订单金额最高的订单号及订单金额。 Select order_no,tot_amt from sales where tot_amt=(select max(tot_amt) from sales) 41、查询在每张订单中订购金额超过24000元的客户名及其地址。 Select cust_name,addr from customer a,sales b where a.cust_id=b.cust_id and tot_amt>24000 42、求出每位客户的总订购金额,显示出客户号及总订购金额,并按总订购金额降序排列。 Select cust_id,sum(tot_amt) from sales Group by cust_id Order by sum(tot_amt) desc 43、求每位客户订购的每种产品的总数量及平均单价,并按客户号,产品号从小到大排列。 Select cust_id,prod_id,sum(qty),sum(qty*unit_price)/sum(qty) From sales a, sale_item b Where a.order_no=b.order_no Group by cust_id,prod_id Order by cust_id,prod_id 44、查询订购了三种以上产品的订单号。 Select order_no from sale_item Group by order_no Having count(*)>3 45、查询订购的产品至少包含了订单10003中所订购产品的订单。 Select distinct order_no From sale_item a Where order_no<>'10003'and not exists ( Select * from sale_item b where order_no ='10003' and not exists (select * from sale_item c where c.order_no=a.order_no and c.prod_id=b.prod_id)) 46、在sales表中查找出订单金额大于“E0013业务员在1996/11/10这天所接每一张订单的金额”的所有订单,并显示承接这些订单的业务员和该订单的金额。 Select sale_id,tot_amt from sales where tot_amt>all(select tot_amt from sales where sale_id='E0013' and order_date='1996/11/10') 47、查询末承接业务的员工的信息。 Select * From employee a Where not exists (select * from sales b where a.emp_no=b.sale_id) 48、查询来自上海市的客户的姓名,电话、订单号及订单金额。 Select cust_name,tel_no,order_no,tot_amt From customer a ,sales b Where a.cust_id=b.cust_id and addr='上海市' 49、查询每位业务员各个月的业绩,并按业务员编号、月份降序排序。 Select sale_id,month(order_date), sum(tot_amt) from sales group by sale_id,month(order_date) order by sale_id,month(order_date) desc 50、求每种产品的总销售数量及总销售金额,要求显示出产品编号、产品名称,总数量及总金额,并按产品号从小到大排列。 Select a.prod_id,prod_name,sum(qty),sum(qty*unit_price) From sale_item a,product b Where a.prod_id=b.prod_id Group by a.prod_id,prod_name Order by a.prod_id 51、查询总订购金额超过’C0002’客户的总订购金额的客户号,客户名及其住址。 Select cust_id, cust_name,addr From customer Where cust_id in (select cust_id from sales Group by cust_id Having sum(tot_amt)> (Select sum(tot_amt) from sales where cust_id='C0002')) 52、查询业绩最好的的业务员号、业务员名及其总销售金额。 select emp_no,emp_name,sum(tot_amt) from employee a,sales b where a.emp_no=b.sale_id group by emp_no,emp_name having sum(tot_amt)= (select max(totamt) from (select sale_id,sum(tot_amt) totamt from sales group by sale_id) c) 53、查询每位客户所订购的每种产品的详细清单,要求显示出客户号,客户名,产品号,产品名,数量及单价。 select a.cust_id, cust_name,c.prod_id,prod_name,qty, unit_price from customer a,sales b, sale_item c ,product d where a.cust_id=b.cust_id and b.order_no=c.order_no and c.prod_id=d.prod_id 54、求各部门的平均薪水,要求按平均薪水从小到大排序。 select dept,avg(salary) from employee group by dept order by avg(salary) |
相关文章推荐
- SQL高级查询等语法
- SQL语法之高级查询
- SQL Server T-SQL高级查询
- 62.Oracle数据库SQL开发之 高级查询——使用分析函数之窗口函数
- 70.Oracle数据库SQL开发之 高级查询——用BWTWEEN和AND返回特定范围
- SQL查询前十条的语法
- SQL高级查询
- SQL Server T-SQL高级查询
- SQL高级查询
- oracle 高级SQL查询笔记12-01
- SQL高级语法-RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
- 高级嵌套的查询sql语句
- SQL查询的高级应用
- SQLlite(WebSQL)如何排序并分页查询(SQLlite语法)
- sql 高级查询探索
- SQL Server T-SQL高级查询,sql 查询集合
- 常见sql查询语句(二)---高级查询
- SQL Server T-SQL高级查询
- sql高级--模糊查询like和通配符
- SQL高级查询--集合操作符