数据库进阶:循序渐进讲解SQL查询语句的高级应用技巧[1]

数据库进阶:循序渐进讲解SQL查询语句的高级应用技巧[1],第1张

一 简单查询

简单的Transact SQL查询只包括选择列表 FROM子句和WHERE子句 它们分别说明所查询列 查询的

表或视图 以及搜索条件等

例如 下面的语句查询testtable表中姓名为 张三 的nickname字段和email字段

SELECT nickname emailFROM testtable

WHERE name= 张三

(一) 选择列表

选择列表(select_list)指出所查询列 它可以是一组列名列表 星号 表达式 变量(包括局部变

量和全局变量)等构成

选择所有列

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

SELECT *FROM testtable

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

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

例如

SELECT nickname emailFROM testtable

更改列标题

在选择列表中 可重新指定列标题 定义格式为

列标题=列名

列名 列标题

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

标题

SELECT 昵称=nickname 电子邮件=email

FROM testtable

删除重复行

SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行 默认

为ALL 使用DISTINCT选项时 对于所有重复的数据行在SELECT返回的结果集合中只保留一行

限制返回的行数

使用TOP n [PERCENT]选项限制返回的数据行数 TOP n说明返回n行 而TOP n PERCENT时 说明n是

表示一百分数 指定返回的行数等于总行数的百分之几

例如

SELECT TOP *FROM testtableSELECT TOP PERCENT *FROM testtable

(二) FROM子句

FROM子句指定SELECT语句查询及与查询相关的表或视图 在FROM子句中最多可指定 个表或视图

它们之间用逗号分隔

在FROM子句同时指定多个表或视图时 如果选择列表中存在同名列 这时应使用对象名限定这些列

所属的表或视图 例如在usertable和citytable表中同时存在cityid列 在查询两个表中的cityid时应

使用下面语句格式加以限定

SELECT username citytable cityidFROM usertable citytableWHERE usertable cityid=citytable cityid

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

表名 as 别名

表名 别名

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

SELECT username b cityidFROM usertable a citytable bWHERE a cityid=b cityid

SELECT不仅能从表或视图中检索数据 它还能够从其它查询语句所返回的结果集合中查询数据

例如

SELECT a au_fname+a au_lnameFROM authors a titleauthor ta(SELECT title_id titleFROM titlesWHERE ytd_sales>) AS tWHERE a au_id=ta au_idAND ta title_id=t title_id

此例中 将SELECT返回的结果集合给予一别名t 然后再从中检索数据

(三) 使用WHERE子句设置查询条件

WHERE子句设置查询条件 过滤掉不需要的数据行 例如下面语句查询年龄大于 的数据

SELECT *FROM usertableWHERE age>

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

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

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

NOT BEEEN…AND…

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

NOT IN (项 项 ……)

lishixinzhi/Article/program/SQL/201311/16245

select

userid,

totaljifen=sum(totaljifen)

from

usercodelist

inner

join

usercodeexcel

--

这里有点奇怪

--

2表关联条件,

时间条件,

还是相等的比较

--

你确定

usercodelist

里面的每一行数据,

usercodeexcel

里面,都有一行是

时间完全一样的么?

--

会不会是要修改为

on

usercodeexcel.LastTime

<

usercodelist.etime

on

usercodeexcel.LastTime

=

usercodelist.etime

where

--

看这里,

筛选的条件是

UserCodeExcel.lasttime

要是

最近

1个月内的数据.

--

应该没有问题.

datediff(month,UserCodeExcel.lasttime,getdate())=1

group

by

userid

order

by

totaljifen

desc

SUBSTRING(str,pos):

由<str>中,选出所有从第<pos>位置开始的字元。请注意,这个语法不适用于SQL

Server上。

SUBSTRING(str,pos,len):

由<str>中的第<pos>位置开始,选出接下去的<len>个字元。

就是从你要查的字段中,从第5位开始,截取1位,比如说单词asdfVgg,这样就取出一个V来,作为一个条件就可以查询了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10068346.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存