`

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可...

    sql大全sql大全sql大全sql大全sql大全

    sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql大全sql...

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

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

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

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

    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 ...

    Sql经典练习题库(附答案)

    SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同...

    sqlservr64.rar

    解决 win10系统安装sql2005时报了服务无法启动问题 1、正常安装任一版本的SQL Server 2005(最好安装企业版)。 2、安装到SqlServer服务的时候提示启动服务失败(提示重试的时候),这里就是关键啦,下载本文的两个...

    SQL_SERVER_2008升级SQL_SERVER_2008_R2两种办法

    今天将由于需要就将我的SQL 2008升级到SQL 2008 R2. 说到为什么要升级是因为,从另一台机器上备份了一个数据库,到我的机器上还原的时候提示“System.Data.SqlClient.Sqlerror:该数据库是在运行版本10.50.2500的...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。...

    sql sql sql sqlsql 语句学习 sql sql sql

    sql 语句学习 sql sql sqlsql 语句学习 sql sql sql

    Sybase SQL anywhere10全部学习资料

    非常详细. 00.sybase中文安装指南FOR WIN 01.SQL Anywhere 10简介 02SQL Anywhere 10更改和升级 03SQL Anywhere 服务器数据库管理 04SQL Anywhere 服务器SQL 用法 05SQL Anywhere 服务器SQL 参考...

    Toad for SQL Server 6.1,最新版绿色单文件(已注册)

    最近折腾SQL Server的localdb,微软自带的管理工具很庞大,安装复杂。发现Toad的很好用SQL Server数据库管理工具,特意制作成单文件,不用安装,直接管理。已经注册好了,可以直接使用。win7、8(64位)测试可行。 ...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

     除了为读者提供编写sql语句和开发pl/sql块的方法外,本书还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本书不仅适合sql和pl/sql...

    Microsoft SQL Server 2008 R2 SP1 Native Client

    Microsoft SQL Server 2008 Native Client (SQL Server Native Client) 是单一动态链接库 (DLL),其中包含 SQL OLE DB 提供者和 SQL ODBC 驱动程序。此链接库针对使用机器码 API (ODBC、OLE DB 和 ADO) 的应用程序...

    完美SQL Server绿色版

    SQL Server绿色版是SQL Server 2000绿色精简版,SQL Server绿色版只保留 GSQL.EXE 版权,其他附带文件版权归美国微软公司所有,本软件以技术研究为宗旨,请在下载本软件后24小时内删除附带的 SQL Server 文件或替换...

    Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解 (黄玮) 高清PDF扫描版

    oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是sql性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划...

    Sqlserver2000经典脚本

    介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...

    DBeaver sql格式化V1.4

    DBeaver工具很强大,但在sql格式化方面不尽人意,所以利用它的扩展功能开发出来的一个功能。说明文档: https://blog.csdn.net/wangjz2008/article/details/114082969 1、首选项中找到:sql编辑器-&gt;sql格式化 ,【格式...

    DBeaver sql格式化V1.5

    DBeaver工具很强大,但在sql格式化方面不尽人意,所以利用它的扩展功能开发出来的一个功能。说明文档: https://blog.csdn.net/wangjz2008/article/details/114082969 1、首选项中找到:sql编辑器-&gt;sql格式化 ,【格式...

    Microsoft SQL Server Native Client (SQL Native Client)

    Microsoft SQL Server Native Client (SQL Native Client) 是一个同时包含 SQL OLE DB 访问接口和 SQL ODBC 驱动程序的动态链接库 (DLL)。它对使用本机代码 API(ODBC、OLE DB 和 ADO)连接到 Microsoft SQL Server ...

Global site tag (gtag.js) - Google Analytics