SQL SELECT语句完整的执行顺序:
1、FROM子句组装来自不同数据源的数据;
2、WHERE子句基于指定的条件对记录进行筛选;
3、GROUP BY子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用HAVING子句筛选分组;
6、计算所有表达式;
7、使用ORDER BY对结果进行排序。
(一)增
(二)删
(三)改
(四)查
简单来说,今天导师让做,一个TICKET表里把三个相同字段SEAT、SHIFT、STATE,并且TIME>'2015-08-27 00:00:00' 的记录列出来。我尝试了很多最后解决如下:
1.select * from TICKET a join (
select SEAT,SHIFT,STATE from TICKET where TIME>'2015-08-27 00:00:00' group by SEAT,SHIFT,STATE having count(*)>1) b on a.SEAT = b.SEAT and a.SHIFT = b.SHIFT and a.STATE = b.STATE
order by a.SEAT,a.SHIFT(排序)
还可以这样写:
select p1.* from persons p1,persons p2 where p1.id<>p2.id
and p1.cardid = p2.cardid and p1.pname = p2.pname
and p1.address = p2.address
2.TICKET表中只出现SEAT,SHIFT两个字段重复的部分
select SEAT,SHIFT from TICKET group by SEAT,SHIFT having(count(*))>1
select SEAT,SHIFT from TICKET group by SEAT,SHIFT having count(SEAT)>=2 and SHIFT in (select SHIFT from TICKET group by SHIFT having count(SHIFT)>=2)
3.TICKET表中SEAT重复出现记录列出:
select * from TICKET where SEAT in (select SEAT from TICKET group by SEAT
having(count(*))>1)
order by SEAT
TICKET表中SEAT、SHIFT重复出现记录列出
select * from TICKET where SEAT、SHIFT in (select SEAT、SHIFT from TICKET group by SEAT、SHIFT having(count(*))>1)
4.今天导师让我以一个字段为单位,统计它出现的次数并展示出其他的字段信息
SELECT t.id,count(t.id)
FROM table t
GROUP BY t.id
order by t.id asc
提示:用group by函数
5.关于SQL server中字段值为null的查询
select * from 表名 where 字段=null 应该可以的。但结果是没有报错,但什么也没有显示出来。
后来又试: selt * from 表名 where len(字段)=0 结果仍是什么也没有显示。
无意中,用 select * from 表名 where 字段 is null 却对了
sql server 查询不为空的字段:select * from 表名 where 字段 is not null
6.sql语句:怎么根据一个字段在一段时间内把另一个字段累加?
select [SHIFTNUMBER],SUM([IN_MONEY]) AS [IN_MONEY]
from TBL_SP_TICKET where STARTTIME between '2015-08-27 00:00:00.0000000' and '2015-08-28 00:00:00.0000000' and SHIFTNUMBER is not null
group by [SHIFTNUMBER]
order by [SHIFTNUMBER]
7.SQL语句如何使用一个表的某个字段的条件查询另外一个表符合这个条件的记录
用IN select * from b where id in (select id from a where 条件) 用JOIN select b.* from b inner join a on b.ID=a.ID where 条件 (如:where a.字段1=1)
8.BUG:消息8120,级别16,状态1,第2 行 选择列表中的列 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
当使用聚集函数的时候,必须配合group by使用。select 子句中的列,除了 聚合函数 ,都要在 group by中出现: select a,b, count(*) from tab group by a,b9.不同的 SQL JOIN除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。 JOIN(内联接): 如果表中有至少一个匹配,则返回行(注释:INNER JOIN 与 JOIN 是相同的。) LEFT JOIN(左外联接:): 即使右表中没有匹配,也从左表返回所有的行(注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。) RIGHT JOIN(右外联接): 即使左表中没有匹配,也从右表返回所有的行(注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。) FULL JOIN(全外联接): 只要其中一个表中存在匹配,就返回行(注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。)
写着写着自己也混乱了,基础不够好啊!要好好学SQL语句