`
hjw0571
  • 浏览: 48023 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

SQL 学习笔记

    博客分类:
  • SQL
阅读更多
1. 问题简单描述如下:

    有一个上传照片的表,字段有 用户名,上传时间,照片文件名
  
现在要得到最新上传照片的前10个用户名(不重复)。


select top 10 *
from (
        select 用户名
               ,max(上传时间) as '上传时间'
        from 表
        group by 用户名
     )t
order by 上传时间 desc


2. 在一个数据库中,有3万条数据,要查找注册电子邮箱一样的用户。

UserId     UserName      UserEmail
=================================================
1          ordw          odks@ole.com
2          ordw          odks@2le.com
3          ordw          odks@cddle.com
4          ordw          odks@ole.com


select * from table where UserEmail in(select UserEmail from table group by UserEmail having count(*)>1)

3. A表
id   cid   cname  ctype  cuse
1    a-1   a123    a       1
2    a-1   bcv     b       5
3    a-1   vbb     a       1
4    a-1   ccc     b       2
b表
cid    cname   total
a-1    a123     500
a-1    bcv      200

我要的查詢結果是
id cid  cname ctype cuse total
1  a-1   a123  a     1    500
2  a-1   bcv   b     5    200
3  a-1   vbb   a     1    0
4  a-1   ccc   b     2    0

select a.*,total=isnull((select total from b where b.cid=a.cid and b.cname=a.cname),0) as total from a



4.表结构如下
id    cost  date
1     12    2005.1.1
2     13    2005.2.1
3     13    2005.3.1

现要检索如下:
检索成两个字段 2005.2.1-2005.3.1 之间的金额合计 2005.2.1前的金额合计.


select sum(case when date < '2005.2.1' then cost end ) as q_cost,sum(case when date >'2005.2.1' and date < '2005.3.1'then cost end) as h_cost from 表


5.例如产品库一张表记录各个类别中每个产品的数量,如何提取出每个类别中产品数量最多的两种

--建立测试环境
Create Table TEST
(类别 Varchar(10),
产品 Varchar(10),
数量 Int)
--插入数据
Insert TEST Values('A','A01',10)
Insert TEST Values('A','A02',13)
Insert TEST Values('A','A03',12)
Insert TEST Values('A','A05',15)
Insert TEST Values('A','A06',11)
Insert TEST Values('B','B01',20)
Insert TEST Values('B','B02',10)
Insert TEST Values('B','B03',17)
--测试

Select * from TEST A
Where Not Exists(Select 1 from TEST Where 类别=A.类别 And 数量>A.数量 Having Count(1)>1)
Order By 类别,数量 Desc

--删除测试环境
Drop Table TEST
--结果
/*
类别产品数量
A A05 15
A A02 13
B B01 20
B B03 17
*/


6.表1
    ID      code       name      phone      address
    1       001         张       12345      中国
    2       002         李       12347      中国
    3       003         刘       42342      中国
    4       004         胡       76757      中国

表2
    ID      code       linkman      Tel    
    1        001         陈        4434232
    2        003         徐        4234234
    3        004         叶        6633234

表1和表2根据code 关联   输入电话查询时,查询表1和表2是否等于输入的电话,只要查询到表1或表2
中有记录更显示主表表1的记录
例如: 如果输入电话 76757 和 6633234
      查询出来的结果都是  4       004         胡       76757      中国

select a.* from 表1 a,表2,b where a.code=b.code and (a.phone='你想要的号码' or b.tel='你想要的号码')


7.我要实现以下Select语句,怎么办?

数据库:
姓名,语文,数学
1    50   80
2    70   80

要选出:
1   不及格 及络
2   及格   及格


--及格标准也不告诉下.(默认60分为标准)
select
    姓名,
    语文=case when 语文>=60 then '及格' else '不及格' end,
    数学=case when 数学>=60 then '及格' else '不及格' end
from
   表


8.表如下:
ID         Time
0          2005-10-01 09 :30
1          2005-10-01 09:31
2          2005-10-01 09 :32
3          2005-10-01 15:00:000
4          2005-10-01 18 :21:000
5          2005 10-01 18 :22:000
我想要的结果是找出一定时间范围内的Time,但是假如几条记录是3分钟之内的就只需要这几条记录的时间最早的哪一条
比如,我要找出2005-10-01 08:00 到2005-10-01 19:00:00 这段时间的 上表得出的结果是:
0          2005-10-01 09 :30
3          2005-10-01 15:00:000
4          2005-10-01 18 :21:000

declare @t table
(id int,time datetime)

insert @t
select 0,'2005-10-01 09:30' union all
select 1,'2005-10-01 09:31' union all
select 2,'2005-10-01 09:32' union all
select 3,'2005-10-01 15:00:000' union all
select 4,'2005-10-01 18:21:000' union all
select 5,'2005-10-01 18:22:000'


select * from @t a where not exists (select * from @t b where
convert(char(13),a.time,120)=convert(char(13),b.time,120) and datepart(minute,a.time)>datepart(minute,b.time))

或者
select * from @t a where
(select count(1) from @t b where
convert(char(13),a.time,120)=convert(char(13),b.time,120) and datepart(minute,a.time)>datepart(minute,b.time))<1



id          time                                                  
----------- ------------------------------------------------------
0           2005-10-01 09:30:00.000
3           2005-10-01 15:00:00.000
4           2005-10-01 18:21:00.000


9.
表名:table1

字段:stcd    char(30)
      tm     date
      r5     char(10)
     
当中数据如下:
105     2005-10-25 21:55:00687.5          
105     2005-10-25 21:50:00687.5          
105     2005-10-25 21:40:00687.5          
105     2005-10-25 21:35:00687.5          
105     2005-10-25 21:30:00687.5          
105     2005-10-25 21:25:00687.5          
105     2005-10-25 21:15:00687          
105     2005-10-25 20:55:00687          
105     2005-10-25 20:40:00687          
105     2005-10-25 20:35:00687          
想返回一张表:将r5字段中每个小时中的所有数据相加返回。

select sum(r5) from table  group by substring(tm,1,13)

select distinct stcd,sum(convert(float,r5)) as total
from table1
group by convert(varchar(4),DATEPART ( yy,tm))+convert(varchar(4),DATEPART ( mm,tm))+convert(varchar(4),DATEPART ( dd,tm))+convert(varchar(4),DATEPART ( hh,tm))


10.
比如 
一个字段如下:
A1
A11
A2
A2.1
A2.11
A2.2

怎么实现查询后
A1
A2
A2.1
A2.2
A2.11
A11

解答:
create table #t(a varchar(20))

insert into #t values('A1')
insert into #t values('A11')
insert into #t values('A2')
insert into #t values('A2.1')
insert into #t values('A2.11')
insert into #t values('A2.2')

SELECT *
FROM qq
ORDER BY LEFT(a, 1), floor(CONVERT(float, RIGHT(a, len(a) - 1))), CONVERT(float,
      isnull(RIGHT(a, len(a) - (CASE charindex('.', a) WHEN 0 THEN len(a)
      ELSE charindex('.', a) END)), '0'))

(2).再增加点难度,看看能否,增加A2.2.1,A2.2.2,A2.2.11,
希望结果如下:

A1
A2
A2.1

A2.2
A2.2.1
A2.2.2
A2.2.11

A2.11
A11


create table #t(a varchar(20))

insert into #t values('A1')
insert into #t values('A11')
insert into #t values('A2')
insert into #t values('A2.1')
insert into #t values('A2.11')
insert into #t values('A2.2')
insert into #t values('A2.2.11')
insert into #t values('A2.2.1')
insert into #t values('A2.2.2')

select *from #t
order by convert(int,replace (reverse(parsename(reverse(a),1)),'A','')),
convert(int,reverse(parsename(reverse(a),2))),
convert(int,reverse(parsename(reverse(a),3))),
convert(int,reverse(parsename(reverse(a),4)))
/*
left(a,1),
convert(int,reverse(parsename(reverse(SUBSTRING(a,2,len(a)-1)),1))),
convert(int,reverse(parsename(reverse(SUBSTRING(a,2,len(a)-1)),2))), 
convert(int,reverse(parsename(reverse(SUBSTRING(a,2,len(a)-1)),3))), 
convert(int,reverse(parsename(reverse(SUBSTRING(a,2,len(a)-1)),4))) 
*/
drop table #t

/*

A1
A2
A2.1
A2.2
A2.2.1
A2.2.2
A2.2.11
A2.11
A11


*/
查询花了多少时间
select getDate()
select * from tt
select getDate()


14.从db2 表2 里取数据,插到 db1 表1
insert db1..table1 select * from db2..table2



欢迎访问我的站点 : http://www.bt170.cn BT下载
1
0
分享到:
评论

相关推荐

    SQL学习笔记(pdf)

    这份"SQL学习笔记"涵盖了SQL的基础概念、语法以及高级特性,是学习数据库管理和数据分析的宝贵资料。 1. **SQL基础** - 数据库概念:了解什么是数据库,它的作用以及数据库管理系统(DBMS)如何工作。 - SQL简介...

    VC++ SQL 学习笔记

    SQL学习笔记可能会包含以下内容: 1. **基本SQL语法**:包括数据插入(INSERT INTO)、查询(SELECT)、更新(UPDATE)、删除(DELETE)等操作,以及如何使用WHERE子句进行条件筛选。 2. **SQL聚合函数**:如COUNT...

    sql学习笔记

    sql练习中易错笔记,order by ,group by,distinct,内连接,外连接等,一些mysql和oracle使用的区别:sql4种连接 两个表中有相同的列,根据共有的列值匹配行 left join左外连接,不管左表是否在右表中有匹配行,都...

    sql学习笔记 常见问题总结

    SQL(Structured Query ...以上只是SQL学习笔记中的部分要点,实际应用中还需要结合具体数据库系统(如MySQL、Oracle、SQL Server等)的特点和最佳实践。通过持续学习和实践,才能真正精通SQL,成为数据管理的高手。

    SQL学习笔记.docx

    "SQL学习笔记" 本文档是关于 SQL 学习笔记的总结,涵盖了 SQL 的基本概念、函数、语法、应用场景等方面。下面是对标题、描述、标签和部分内容的详细解释: SQL 基本概念 SQL(Structured Query Language)是一种...

    高效SQL学习笔记

    《高效SQL学习笔记》 SQL,全称Structured Query Language,即结构化查询语言,是用于管理关系数据库的标准语言。高效地掌握SQL对于任何IT从业者,尤其是数据分析师、数据库管理员和开发人员来说,都是至关重要的...

    JAVA 与 Sql学习笔记

    【JAVA与Sql学习笔记】 在Java编程中,与SQL数据库的交互是不可或缺的一部分。这篇学习笔记主要关注如何在Oracle数据库中使用PL/SQL的FORALL语句进行批量操作,以及如何利用批绑定(Bulk Binding)来提升性能。此外...

    Oracle 10g sql 学习笔记

    Oracle 10g SQL 学习笔记涵盖了Oracle数据库的基础知识,包括版本信息、数据库系统特点、关系型数据库结构、SQL语言、操作环境以及常见的数据库操作。以下是对这些知识点的详细说明: 1. **Oracle 9i基础知识**: ...

    SQL学习笔记+记录sql各种应用

    这份“SQL学习笔记+记录sql各种应用”涵盖了SQL的基础概念、语法以及在实际工作中的多种应用。 一、SQL基础 1. 数据库与表:SQL中的数据库是由一个或多个表组成的集合,表由行和列构成,每一行代表一条记录,每一列...

    Mastering_Oracle_SQL学习笔记

    在深入探讨《Mastering Oracle SQL学习笔记》的内容之前,我们先理解一下这门课程的核心目标:帮助初学者更好地掌握SQL语言中的关键概念和操作,尤其是针对Oracle数据库的特性。这包括了SQL语句的构建、数据筛选、...

    linq to sql 学习笔记

    《LINQ to SQL 学习笔记》 LINQ (Language Integrated Query) 是.NET框架中引入的一项强大技术,它允许开发者使用熟悉的C#或VB.NET语言语法进行数据查询,而无需学习新的查询语言。LINQ to SQL是LINQ的一个特定实现...

    Oracle_SQL学习笔记

    ### Oracle SQL 学习笔记关键知识点详解 #### 一、SQL 并行查询 并行查询是 Oracle 提供的一种提高查询性能的技术,特别是在处理大型数据集时尤其有效。通过利用多处理器或多核 CPU 的能力,并行查询能够显著加快...

    oracle 数据库 SQL学习笔记

    Oracle数据库是全球广泛使用的...总的来说,Oracle数据库SQL学习笔记应该涵盖这些核心领域,并深入探讨每个主题,包括实例、最佳实践和问题解决策略。通过持续学习和实践,你可以成为一名熟练的Oracle数据库专业人员。

    t-sql学习笔记

    t-sql学习笔记,总结的挺好

    SQL学习笔记一

    本篇“SQL学习笔记一”将围绕SQL的基础概念、基本操作以及其在实际工作中的应用展开讨论。 首先,我们要理解SQL的核心功能,包括数据查询、数据插入、数据更新和数据删除,这四大操作构成了SQL的基本语法结构。例如...

    sql学习笔记-轻松掌握sql

    这份“sql学习笔记”涵盖了SQL的基础概念、语法和实用技巧,帮助初学者轻松掌握SQL的核心知识。 一、SQL基础 1. 数据库与表:SQL中的数据库是一个组织数据的集合,由一个或多个表组成。表是由行和列构成的数据结构...

    Spark SQL学习笔记

    ### Spark SQL 学习笔记知识点总结 #### 一、Spark SQL 概述 - **定义**:Spark SQL 是 Apache Spark 的一个模块,用于处理结构化数据。它提供了 DataFrame 和 Dataset API,以及支持 SQL 查询的能力。这些特性...

    PL/SQL学习笔记4

    ### PL/SQL学习笔记4 —— 集合与成员函数 #### 一、PL/SQL 表(索引表) 在PL/SQL中,**索引表**(也称为**PL/SQL表**)是一种非常有用的结构,它类似于数组但具有更多的灵活性。这种表是非持久化的,即它们不会...

Global site tag (gtag.js) - Google Analytics