标签:城市 distinct nan discount 数值 通过 语句 ast app
select *(列名) from table_name(表名) where column_name operator value 。
select * from stock_information where stockid = str(nid)
sql中的通配符:
通配符 | 描述 |
---|---|
% | 匹配零个及多个任意字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何单一字符 |
只能在使用 like 关键字的中使用通配符
例子:
Persons 表:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
从上面的 "Persons" 表中选取居住在以 "Ne" 开始的城市里的人:
SELECT * FROM Persons WHERE City LIKE ‘Ne%‘
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
2 | Bush | George | Fifth Avenue | New York |
SELECT * FROM Persons WHERE City LIKE ‘%lond%‘
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
使用 _ 通配符
SELECT * FROM Persons WHERE FirstName LIKE ‘_eorge‘
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
2 | Bush | George | Fifth Avenue | New York |
例子 2 ,我们希望从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":
SELECT * FROM Persons WHERE LastName LIKE ‘C_r_er‘
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
3 | Carter | Thomas | Changan Street | Beijing |
使用 [charlist] 通配符
我们希望从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons WHERE City LIKE ‘[ALN]%‘
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
例子 2 我们希望从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%‘ 或者 [^ALN]
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
3 | Carter | Thomas | Changan Street | Beijing |
order by stockid desc(asc) --------- 排序, desc-降序, asc-升序
order by 1,2 --------- by 列号
stockname = (select stockname from stock_information where stockid = 4) 子查询:除非能确保内层 select 只返回一个行的值, 否则应在外层 where 子句中用一个 in 限定符
select distinct column_name form table_name --------- distinct 指定检索独有的列值, 不重复查询
select stockname , count(*) as "number" from table_name group by stockname --------- group by 将表按行分组,指定列中有相同的值
,Group By + [分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。
having count(*) = 2 --------- having 选定指定的组
例子: 比如有如下数据集,其中水果名称(FruitName)和出产国家(ProductPlace)为联合主键:
FruitName | ProductPlace | Price |
apple | China | 5 |
apple | Japan | 8 |
apple | USA | 4 |
Orange | China | 6 |
Banana | China | 12 |
Orange | USA | 8 |
如果我们想知道每个国家有多少种水果,那么我们可以通过如下SQL语句来完成:
SELECT COUNT(*) AS "水果种类" , ProductPlace AS "出产国" FROM table GROUP BY ProductPlace
这个SQL语句就是使用了Group By + 分组字段的方式,那么这句SQL语句就可以解释成“我按照出产国家(ProductPlace)将数据集进行分组,然后分别按照各个组来统计各自的记录数量。”
值得注意的是结果集中有两个返回字段,一个是ProductPlace(出产国), 一个是水果种类。
如果我们这里水果种类不是用Count(*),而是类似如下写法的话:
SELECT FruitName,ProductPlace FROM table GROUP BY ProductPlace
那么SQL在执行此语句的时候会报如下的类似错误: 选择列表中的列‘T_TEST_FRUITINFO.FruitName‘无效,因为该列没有包含在聚合函数或GROUPBY子句中。
这就是我们需要注意的一点,如果在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。 将Group By操作想象成如下的一个过程,首先系统根据SELECT 语句得到一个结果集,如最开始的那个水果、出产国家、单价的一个详细表。然后根据分组字段,将具有相同分组字段的记录归并成了一条记录。这个时候剩下的那些不存在于Group By语句后面作为分组依据的字段就有可能出现多个值,但是目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的,所以这里就需要通过一定的处理将这些多值的列转化成单值,然后将其放在对应的数据格中,那么完成这个步骤的就是聚合函数。这就是为什么这些函数叫聚合函数(aggregate functions)了。
常见的聚合函数如下表:
函数 | 作用 | 支持性 |
---|---|---|
sum(列名) | 求和 | |
max(列名) | 最大值 | |
min(列名) | 最小值 | |
avg(列名) | 平均值 | |
first(列名) | 第一条记录 | 仅Access支持 |
last(列名) | 最后一条记录 | 仅Access支持 |
count(列名) | 统计记录数 | 注意和count(*)的区别 |
Group By All [expressions] :
Group By All + 分组字段, 这个和前面提到的Group By [Expressions]的形式多了一个关键字ALL。这个关键字只有在使用了where语句的,且where条件筛选掉了一些组的情况才可以看出效果。
如果使用ALL关键字,那么查询结果将包括由GROUP BY子句产生的所有组,即使某些组没有符合搜索条件的行。没有ALL关键字,包含GROUPBY子句的SELECT语句将不显示没有符合条件的行的组。
首先我们不使用带ALL关键字的Group By语句:
SELECT COUNT(*) AS 水果种类, ProductPlace AS 出产国 FROM t WHERE(ProductPlace<>‘Japan‘) GROUP BY ProductPlace
那么在最后结果中由于Japan不符合where语句,所以分组结果中将不会出现Japan。
现在我们加入ALL关键字:
SELECT COUNT(*) AS 水果种类, ProductPlace AS 出产国 FROM t WHERE(ProductPlace<>‘Japan‘) GROUP BY ALL ProductPlace
重新运行后,我们可以看到Japan的分组,但是对应的“水果种类”不会进行真正的统计,聚合函数会根据返回值的类型用默认值0或者NULL来代替聚合函数的返回值。
GROUP BY [Expressions] WITH CUBE | ROLLUP:
这个暂时没看,不过想看的话 可以看看这两个,两位都做了总结: http://www.cnblogs.com/glaivelee/archive/2010/11/19/1881381.html http://blog.csdn.net/dreamwbt/article/details/53437118
Group By 和 Having, Where ,Order by语句的执行顺序:
当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:
--执行where子句查找符合条件的数据;
--使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。
--having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle.
--having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。
--having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。
--然后按照Order By语句对视图进行排序,这样最终的结果就产生了。只有在Order By语句中才可以使用最终视图的列名
SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount FROM table WHERE(ProductPlace=‘china‘) ORDER BY IDE
这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。
select 类别, sum(数量) as 数量之和 from A group by 类别 having sum(数量) > 18
select 类别, SUM(数量)from A where 数量 gt;8 group by 类别 having SUM(数量) gt; 10
标签:城市 distinct nan discount 数值 通过 语句 ast app
原文地址:http://www.cnblogs.com/a-lonely-wolf/p/6442146.html