SQL必知必会 知识点1(前十章)-子句、操作符、通配符、计算、文本/时间/数值处理、聚集函数

参考书籍:《SQL必知必会(第3版)》

#NULL 无值(no value)

#order by
#按照多个列排序(order by 可以用列名指出排序顺序;也可以支持按相对列位置进行排序)
select prod_id,pron_price,prod_name
from Products
order by pron_price DESC,prod_name;

select prod_id,pron_price,prod_name
from Products
order by 2 DESC,3;
——首先 按照价格进行降序排序,再按照名称排序。

#where
#一些where子句操作符

<>   不等于
!=  不等于(microsoft access 支持<> 而不支持!=)
!<  不小于
!>  不大于
between 在指定的两个值之间
is null     为null值

#组合where子句(善于使用圆括号来明确分组操作符)
#and
#or(SQL在处理OR操作符之前,优先处理AND操作符)
#in (in操作符一般比or操作符清单执行更快、可以包含其他select语句)
#not (mysql 中,not只用来否定exists,如 not exists)
select prod_name,pron_price
from Products
where vend_id='DLL01' or vend_id='BRS01' and pron_price >=10
——理解为 由供应商BRS01制造的任何价格为10美元以上的产品,或者由供应商DLL01制造的任何产品,而不管其价格如何。

#通配符(wildcard)(通配符搜索的处理一般要比其他操作符搜索所花的时间更长)
#like操作符后
# 百分号%(表示任何字符出现任意次数)
#下划线_(用途和%一样,但下划线只匹配单个字符;microsoft access需要使用?而不是_)
#方括号[] (用来指定一个字符集,必须匹配指定位置的一个字符;此通配符可以用前缀字符^来否定,但在microsoft access中否定需要用!)  
select cust_contact
from Customers
where cust_contact like '[^JM]%'
order by cust_contact;
——选择出不以J或M起头的任意联系人名。

#计算字段
#加号+(表示把两个列拼接起来,或两个竖杠||;mysql中不支持使用+或||,需要用concat()函数)
select rtrim(vend_name)+'('+rtrim(vend_country)+')'
from Vendors
order by vend_name
——rtrim()函数表示去掉右边的所有空格、ltrim()函数表示去掉左边的空格、trim()去掉串左右两边的空格
——在mysql中第一行为:select contat(vend_name, '(',vend_country,')')

#使用别名
#as

select rtrim(vend_name)||'('||rtrim(vend_country)||')' as vend_title
from Vendors
order by vend_name
——表示创建一个列名为vend_title的计算字段

#执行算术计算
+ 加
- 减
* 乘
/ 除

#文本处理函数
left()  返回串左边的字符
length()  返回串的长度
lower() 将串转换为小写
ltrim() 去掉串左边的空格
soundex() 返回串的soundex值
upper() 将串转换为大写
select cust_name,cust_contact
from Customers
where soundex(cust_contact) = soundex('Michael Green')
——匹配出所有发音类似与Michael Green的联系名

#日期和时间处理函数
datepart() (sql server和sybase版本以及access版本可用)
to_char()  (用来提取日期的成分,oracle可用)
to_number() (用来将提取出的成分转换为数值,oracle可用)
to_date() (用来将两个串转换为日期,oracle可用)
select order_num
from Orders
where datepart('yyyy',order_date)=2004;
——过滤出2004年的订单
select order_num
from Orders
where order_date between to_date('01-JAN-2004') and to_date('31-DEC-2004');
——Oracle的to_date() 函数用来将两个串转换为日期。一个包含2004年1月1日,另一个包含2004年12月31日。between操作符用来找出两个日期之间的所有订单。

#数值处理函数
abs()  返回一个数的绝对值
cos() 返回一个角度的余弦
exp() 返回一个数的指数值
pi()  返回圆周率
sin() 返回一个角度的正弦
sqrt() 返回一个数的平方根
tan() 返回一个角度的正切

#汇总数据
#聚集函数

avg() 返回某列的平均值 (只用于单个列、忽略列值为null的行)
count() 返回某列的行数 (使用count(*)计数,不忽略null值;使用count(column)对特定的列进行计数时,忽略null值)
max() 返回某列的最大值(忽略列值为null的行)
min() 返回某列的最小值(忽略列值为null的行)
sum() 返回某列之和

distinct() 函数 (必须使用列名,不能用于计算或表达式,比如说不能用于count(*),只能用于count() 

#分组数据
#group by 
having子句(过滤分组,在数据分组后过滤,where再数据分组前过滤)
select vend_id,count(*) as num_prods
from Products
where pron_price>4
group by vend_id
having count(*) >=2;
——列出两个以上,价格为4以上的产品的供应商
select order_num,count(*) as items
from OrderItems
group by order_num
having count(*) >=3
order by items,order_num;
——检索包括三个或三个以上物品的订单号和订购物品的数目,并且按照订购物品的数据排序输出

猜你喜欢

转载自blog.csdn.net/c_pumpkin/article/details/81566382