`

sql

阅读更多

 

用户信息表customerinfo

字段

字段含义

Gcustomerid

用户ID

customername

用户名

state

用户状态(4,正常,7删除)

 

计费名表cn

字段

字段含义

customerid

用户ID

Gcnid

计费名ID

cnname

计费名

state

状态(1,正常,2封禁)

 

每日搜索收入表daysearch

字段

字段含义

Gcnid

计费名ID

income

收入

date

日期

 

每日主题收入表daycpro

字段

字段含义

Gcnid

计费名ID

income

收入

date

日期

 

每日合作推广收入表daycpa

字段

字段含义

Gcnid

计费名ID

income

收入

date

日期

 

注:

1G代表主键
2)每个用户有多个计费名
3)如果某个计费名没有某项收入,则不计入相应的收入表中



1、查出所有以union为前缀的非删除用户,并且以其正常计费名个数多少降序排列。(计费名相同不重复计算)

     、今天是20100910,查出前30天之内,总收入小于100元的用户之中,收入最多的前100个用户。

 

 

 

   

3、查询同时具有网站搜索收入、主题推广收入、合作推广收入的正常状态用户名,以及每项收入的金额。

     

 

 

 

 

 

 

 

 

 

 




-------------------------------------------------------------------------------------------------------------------
练习2:请写出下面的sql语句

 

1、 查询出tb_order表中所有内容。

 

2、 查询出cust_id42206的客户的名字(tb_customer表)

 

3、 查询出帐户开户信息表(tb_account_info)里,开户金额(open_account_sum)大于5600的记录

 

4、 从订单信息表(tb_order)中查询出提单时间(submit_date)在20091210提交的订单编号(code

 

5、 从订单信息表(tb_order)中查询出提单时间(submit_date)在2009-11-012009-12-09之间提交的订单,按时间逆序排序后,取最近的10

 

6、 计算出订单备注表(tb_order_comment)中订单idorder_id)为105的记录条数

 

7、 已知一个订单可能会有多条备注。需要查询出订单备注表(tb_order_comment)中,备注数目最多的前10个订单id

 

8、 更新id范围是100110的订单(tb_order)提单时间(submit_date)为当前时间

 

9、 查找出以“北京”开头的客户(tb_customer)资料

 

10、 已知订单表(tb_order)和订单备注表(tb_order_comment)以订单idtb_order_comment.order_id)关联,查询出订单编号(tb_order.code)为“XSBJ200910251452”的订单,所有的备注内容(tb_order_comment.content

 

11、已知订单表(tb_order)和订单备注表(tb_order_comment)以订单idtb_order_comment.order_id)关联,统计出订单备注条数最多的前10条订单,展现订单编号(tb_order.code)和备注条数

 

12、已知procedurelog表结构如下:

Field

Type

------

------------

id

int(10)

name

varchar(100)

date

datetime

status

smallint(3)


1
)删除procedurelog表里,操作时间(date)为2009-11-12日的记录

2)将如下值插入到表中   Id123nametestdate为当前时间,status1




----------------------------------------------------------------------------------------------------------
补充知识:UNION
UNION指令的使用
UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。 union只是将两个结果联结起来一起显示,并不是联结两个表…………

假设我们有以下的两个表格,
Store_Information 表格 store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999

Internet Sales 表格 Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750

而我们要找出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 SQL 语句: SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales 结果: Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999
有一点值得注意的是,如果我们在任何一个 SQL 语句 (或是两句都一起) 用 "SELECT DISTINCT Date" 的话,那我们会得到完全一样的结果。

SQL Union All
UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。 UNION ALL 的语法如下: [SQL 语句 1]
UNION ALL
[SQL 语句 2] 我们用和上一页同样的例子来显示出 UNION ALL 和 UNION 的不同。同样假设我们有以下两个表格, Store_Information 表格 store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999

Internet Sales 表格 Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750

而我们要找出有店面营业额以及网络营业额的日子。要达到这个目的,我们用以下的 SQL 语句: SELECT Date FROM Store_Information
UNION ALL
SELECT Date FROM Internet_Sales 结果: Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-08-1999
Jan-07-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999

 

练习1:
我有三个用户表
普通用户、VIP用户、商业用户,这三个表之间没有关联。

比如我想查询名为张三是在哪张表中,这个联合语句怎么写? 高手帮帮忙

补充:这三个表字段都是普通的ID,USERNAME,PWD那些。没有关联是指没搞视图,索引的那些高级东西。

我现在想了个折中的办法,就是先把三个用户表名写进数组中,在遍历数组的同时判断表中是否含有名叫张三的用户,找到了就直接退出遍历。不知道这个方法对执行效率有没有影响?

网友参考答案:

假定3张表分别是normal_cus,vip_cus,ent_cus,
这3张表都包含字段:username,
可以这么写SQL:
select username,'normal_cus' as tab_name from normal_cus where username='张三'
union
select username,'vip_cus' as tab_name from vip_cus where username='张三'
union
select username,'ent_cus' as tab_name from ent_cus where username='张三'
 这样出来的结果中,就包含这个人所在的表名了。 当然,这里还有一个问题:姓名是唯一的吗?如果不唯一,那么可能多个表中都会出现这个人名。



练习2:
总共6个表Card,CardFillDate ,CardFill ,CardReplace,CardRecycle,Mainsavetable
每个表:
Card          表中有addtime,cardmoney字段
CardFillDate  表中有filldate,fillmoney字段
CardFill      表中有filldate,fillmoney字段
CardReplace   表中有replacedate,replacemoney字段
CardRecycle   表中有recycledate,returnmoney字段
Mainsavetable 表中有outdate,chargemoney字段
我想要的查询结果:
月份 发行收费 延期收费 充值收费 更换收费 回收退费 出场收费 小计
01   100      50       200      150      500      500      150

select a.yd,cardmoney,c.fillmoney,d.fillmoney as fillmoney1,replacemoney,returnmoney,chargemoney from (
select '1' as yd union select '2' union select '3' union
select '5' union select '6' union select '7' union
select '8' union select '9' union select '10' union
select '11' union select '12') a 
left join
(select month(addtime)as yd,sum(cardmoney)as cardmoney from Card where year(addtime) = '2009' group by month(addtime)) b
on a.yd=b.yd
left join 
(select month(filldate)as yd,sum(fillmoney)as fillmoney from CardFillDate where year(filldate) = '2009' group by month(filldate)) c
on a.yd=c.yd
left join 
(select month(filldate)as yd,sum(fillmoney)as fillmoney from CardFill where year(filldate) = '2009' group by month(filldate)) d
on a.yd=d.yd
left join 
(select month(replacedate)as yd,sum(replacemoney)as replacemoney from CardReplace where year(replacedate) = '2009' group by month(replacedate)) e
on a.yd=e.yd
left join 
(select month(recycledate)as yd,sum(returnmoney)as returnmoney from CardRecycle where year(recycledate) = '2009' group by month(recycledate)) f
on a.yd=f.yd
left join 
(select month(outdate)as yd,sum(chargemoney)as chargemoney from Mainsavetable where year(outdate) = '2009' group by month(outdate)) g
on a.yd=g.yd order by  cast(a.yd as int) 
 

或者:
   
select month(a.addtime) as '月份', sum(a.CardMoney) 发行收费,sum(b.FillMoney) 延期收费, sum(c.FillMoney) 充值收费, 
sum(d.ReplaceMoney) 更换收费, sum(e.ReturnMoney) 回收退费,sum(f.ChargeMoney) 出场收费 
from Card a,CardFillDate b,CardFill c,CardReplace d,CardRecycle e,Mainsavetable f
where year(a.addtime) = '2009' and month(a.addtime) in (1,2,3,4,5,6,7,8,9,10,)
and YEAR_MONTH(a.addtime)=YEAR_MONTH(b.filldate)
and YEAR_MONTH(a.addtime)=YEAR_MONTH(c.filldate)
and YEAR_MONTH(a.addtime)=YEAR_MONTH(d.replacedate)
and YEAR_MONTH(a.addtime)=YEAR_MONTH(e.recycledate)
and YEAR_MONTH(a.addtime)=YEAR_MONTH(f.outdate)
group by month(a.addtime) order by '月份' 
 

 

 

 

参考:

http://hi.baidu.com/%B5%BE%CB%EB%C9%CF%B5%C4%D1%CC/blog/item/e13fbc00a0ef17dc277fb5f7.html

 

http://www.ixpub.net/viewthread.php?tid=950791

 

http://www.ixpub.net/viewthread.php?tid=935801

 

 

access:
select top (10) * from table1

db2:
select 列名 from table1 where 1=1 fetch first 10 rows only

mysql:
select * from table1 limit 10 或 select * from table1 limit 0,10

sql server:
读取前10条:select top (10) * from table1 where 1=1

在sqlserver里面,若每页显示perpage条记录,按照id的排序,取第pageno页的记录:
select top perpage*pageno   * from table where id not in(select top (pageno-1)*perpage id from table1)

oracle取前10条:
select * from table1 where rownum<=10

oracle取第11-20条:

select * from (select *,rownum num from table1 where rownum<=20) where num>=10;

oracle按id排序后取11-20条

select * from (select *,rownum num from (select * from table1 tt order by id desc) where rownum<=20) where num>=10;

关于mysql 的limit 子句的使用方法:

SELECT * FROM table   LIMIT [offset,] rows | rows OFFSET offset


LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初 始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

mysql> SELECT * FROM table LIMIT 5,10;  // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1
mysql
> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

//如果只给定一个参数,它表示返回最大的记录行数目:
mysql
> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行

//换句话说,LIMIT n 等价于 LIMIT 0,n。
分享到:
评论

相关推荐

    通过SqlCmd执行超大SQL文件

    ##通过sqlcmd执行sql文件 由于sql文件过大,超过了100M,再数据库的窗口执行,结果超出内存了,对于特别大的sql文件可以使用sqlcmd进行执行 ###1.打开cmd窗口 运行–cmd–进入到sql文件所在的文件夹。 如果是win7可...

    java sql操作工具类 java sql操作工具类

    java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作...

    SQLServer_2000-2008_R2查询智能分析器RedGate_SQL_Prompt_V5.3.4.1_Crack_Keygen破解教程注册机免费

    在我个人编写SQL脚本时,至少会把SQL的格式排列成易于阅读的,因为其他人会阅读到你的SQL,无论是在程序中或是脚本文件中,良好的排版不仅让人看起来赏心悦目,在和他人之间做交流时也省时省力,不会因为揉成一团的...

    SQL优化 SQL优化软件 SQL优化工具

    SQL优化是数据库管理中的关键环节,它涉及到提升查询性能、减少资源消耗以及改善系统整体效率。SQL优化软件和工具能够帮助数据库管理员(DBA)和开发人员找出性能瓶颈,优化查询逻辑,从而提高数据库系统的响应速度...

    SQLPrompt5.3破解

    本人在Windows7 64位+SQL Server 2012环境下测试通过(系统是全新安装) 使用方法: 1,安装SQLPrompt v5.3,这个不多说。 2,安装完毕后,断开网络连接。 3,打开Visual Studio或者SQL Server Management Studio(版本...

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示 SQLPrompt最新版本 绿色版 SQL Prompt 是一款拥有SQL智能提示功能的SQL Server和VS插件。SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动...

    sqlserver自动生成sql语句工具sqlserver转oracle

    在IT行业中,数据库管理系统是核心组成部分,SQL Server和Oracle分别是微软和甲骨文公司推出的两款广泛应用的关系型数据库系统。在企业级应用中,有时需要在不同的数据库系统间进行数据迁移或兼容性处理,这就涉及到...

    sql server 导入超大SQL脚本文件

    SQL Server 导入超大 SQL 脚本文件 SQL Server 是一种关系型数据库管理系统,广泛应用于各种行业。然而,在实际应用中,我们经常会遇到导入超大 SQL 脚本文件的问题。本文将介绍如何使用 osql 工具来导入超大 SQL ...

    Android通过webservice连接Sqlserver实例

    在Android开发中,有时我们需要与远程数据库进行交互,例如SQLServer。这个场景通常是通过Web服务,如WebService来实现。本文将详细介绍如何在Android应用中利用WebService接口连接到SQLServer数据库,实现数据的增...

    SQL SQLPrompt 9 SQL 2016/2017可用

    SQL Prompt是Redgate Software开发的一款高效SQL代码编辑工具,它为SQL Server的开发人员提供了智能提示、格式化、重构和代码分析等功能,极大地提升了编写和维护SQL代码的效率。SQL Prompt 9是该系列的最新版本,...

    SQL 语法 SQL 总结 SQL教程

    SQL 基础 SQL 首页 SQL 简介 SQL 语法 SQL select SQL distinct SQL where SQL AND & OR SQL Order By SQL insert SQL update SQL delete SQL 高级 SQL Top SQL Like SQL 通配符 SQL In SQL Between ...

    SQLMonitor oracle跟踪SQL工具

    《SQLMonitor:Oracle数据库SQL跟踪与分析利器》 在IT行业中,数据库的高效管理与优化是至关重要的。针对Oracle数据库,有一款名为SQLMonitor的工具,它专为跟踪和监控SQL语句而设计,帮助开发者和DBA们找出程序...

    AI自动生成SQL语句的开源代码 sqlcoder-main.zip

    开源的AI自动生成SQL语句源代码,这款SQLCoder-70B-Alpha在文本到SQL的转换能力上超越了包括GPT-4在内的所有通用模型,它能更准确地理解你的需求,并生成相应的SQL查询。SQLCoder2和SQLCoder-7B模型已经向公众开放,...

    sqlserver驱动包 jdbc驱动 sqljdbc.jar和sqljdbc4.jar

    SQL Server驱动包是用于Java应用程序通过JDBC(Java Database Connectivity)接口与Microsoft SQL Server数据库进行交互的必备组件。本文将详细介绍这两个重要的驱动文件——sqljdbc.jar和sqljdbc4.jar,以及如何...

    sqlserver驱动包:sqljdbc4.jar

    SQL Server驱动包`sqljdbc4.jar`是微软官方提供的Java数据库连接器(JDBC),用于在Java应用程序中与Microsoft SQL Server进行通信。JDBC是Java编程语言中的一个标准API,它使得开发人员能够以标准化的方式访问各种...

    sqlservr32和sqlservr64.zip

    标题中的"sqlservr32和sqlservr64.zip"指的是SQL Server 2005服务中的两个关键组件,`sqlservr32.exe`和`sqlservr64.exe`。这两个文件是SQL Server服务的核心执行文件,分别对应于32位和64位操作系统。在Windows 8和...

    SQLTracker,抓取sql语句的工具

    SQLTracker是一款专为数据库操作监控设计的工具,它在IT领域中主要用于跟踪和记录SQL语句的执行情况。SQL(Structured Query Language)是用于管理关系数据库的编程语言,包括查询、更新、插入和删除数据等操作。SQL...

    oracle sqldeveloper连接mysql、SQLServer第三方dll

    解决oracle sqldeveloper无法连接mysql、SQLServer问题,sqlDeveloper是ORACLE数据库开发工具,自带的是无法连接MS SQL Server以及mysql的,想连接的话需要第三方工具。 使用方法: 解压出来后将2个jar放入jlib...

    Oracle Sql语句转换成Mysql Sql语句

    在数据库管理领域,Oracle SQL和MySQL SQL是两种广泛使用的SQL方言,它们在语法和功能上存在一定的差异。当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个...

    sql server2019安装包

    SQL Server 2019是Microsoft推出的一款关系型数据库管理系统,是SQL Server系列中的一个重要版本。它提供了强大的数据存储、处理和分析能力,广泛应用于企业级数据库应用开发和数据分析。在本安装包中,主要包含的是...

Global site tag (gtag.js) - Google Analytics