资料来自《SQL必知必会》
一.检索数据
SELECT
l 检索单个列
Select列from 表;
l 检索多个列
Select 列,列 from 表;
l 检索所有列
Select * from 表;
二.排序检索数据
l 排序
Select 列 from 表 order by 列;
l 按多个列排序
Select 列,列,… from 表 order by 条件A,条件B;
先按条件A排序,再按B排
l 按列位置排序
Select 列 from 表 order by 2,3;
按第二列和第三列排序
l 按指定位置排序
DESC降序,ASC升序
Select 列 from 表 order by 列 DESC,列,…
三.过滤数据
l 使用where字句
Select 列 from 表 where 条件
操作符 |
描述 |
= |
等于 |
<> |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
BETWEEN |
在某个范围内 |
LIKE |
搜索某种模式 |
!= |
不等于 |
!< |
不小于 |
!> |
不大于 |
IS NULL |
为NULL值 |
l 检查单个值
Select 列 from 表 where 列 运算符 值
l 不匹配检查
Select 列 from 表 where 列 不等于 条件
l 范围值检查
Select 列 from 表 where 列 BETWEEN 值 AND 值
l 空值检查
Select 列 from 表 where 列 IS NULL;
四.高级数据过滤
l 组合WHERE字句
l 操作符
l AND
Select 列 from 表 where 列 条件 and 列 条件
l OR
Select 列 from 表 where 列 条件 or 列 条件
l AND和OR组合
SQL在处理OR操作符前,优先处理AND操作符,如果要优先处理OR,则要用圆括号括起来。
l IN
IN操作符用来指定条件范围,范围中每个条件都可以进行匹配。
Select 列 from 表 where 列 in (条件,条件,…)
字符串记得用单引号包含起来
l NOT
否定NOT之后所跟的任何条件。
Select 列 from 表 where not 列 条件
五.用通配符进行过滤
通配符:用来匹配值的一部分的特殊数字符
通配符搜索只能用于文本字段。
注意:根据DBMS的不同及其配置,搜索可以是区分大小写的。
l LIKE操作符
l 百分号(%)通配符
%表示任何字符出现任意次数
Select 列 from 表 where 列 like ‘%文本%’;
l 下划线(_)通配符
用途与%一样,但是下划线只匹配单个字符
l 方括号([])通配符
指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符
例如为了找出所有名字以J或M起头的联系人
Select 列 from 表 where 列 like ‘[JM]%’
此通配符可以用^来否定
六.创建计算字段
l 拼接字段
在SQL中的SELECT语句中,可以使用一个特殊的操作符来拼接两个列:加号或者两个竖杠。
p.s.我在oracle中只能用||,不知是不是自己打错了
去掉空格可以使用SQL的RTRIM()函数完成
p.s 为啥我上边没加RTRIM也没有空格,和书上不太一样~
l 使用别名
列别名是一个字段或值的替换名
l 执行算数计算
Select 计算公式 as 别名 from 表 where 条件
七.使用函数
l 文本处理函数
UPPER() 将文本转换为大写
Select 列,upper(列) as 别名 from 表 order by 列
常用文本处理函数
LEFT() |
返回串左边的字符 |
LENGTH() |
返回串的长度 |
LOWER() |
将串转换为小写 |
LTRIM() |
去掉串左边的空格 |
RIGHT() |
返回串右边的字符 |
RTRIM() |
去掉串右边的空格 |
SOUNDEX |
返回串的SOUNDEX值 |
UPPER() |
将串转换为大写 |
SOUNDEX是一个将任何文本串转换为描述其语音标识的字母数字模式的算法
EXAMPLE:
Select 列 from 表 where soundex(列)=SOUNDEX(‘Michael Green’)
它匹配所有发音类似于Michael Green的联系名。
l 日期和时间处理函数
DATEPART():返回日期的某一部分
检索2004年所有订单
Select 列 from 表 where datepart(yy,列) = 2004;年所有订单
注意:ORACLE没有DATEPART()函数
DD-MMM-YYYY格式的日期一般能被ORACLE正确处理
Select 列 from 表 where to_number(to_char(order_date,’YY’)) = 2004;
to_number() 用来将提取出来的成分转换为数值
to_char()函数用来提取日期的成分
select 列 from 表 where order_date BETWEEN to_date(’01-JAN-2004’) AND to_date(’31-DEC-2004’);
l 数值处理函数
ABS() |
绝对值 |
COS() |
余弦 |
EXP() |
指数值 |
PI() |
圆周率 |
SIN() |
正弦 |
SQRT |
平方根 |
TAN |
正切 |
八.汇总数据
l SQL聚集函数
AVG() |
平均值 |
COUNT() |
行数 |
MAX() |
最大值 |
MIN() |
最小值 |
SUM() |
某列之和 |
AVG()
select AVG(列) as 别名 from 表;
COUNT
select COUNT(列) as 别名 from 表;
其他几个类似,不赘述了。
l 聚集不同值
select AVG(DISTINCT 列) as 别名 from 表 where 条件
l 组合聚集函数
select count(*) as 别名
min(列名) as 别名
max(列名) as 别名
avg(列名) as 别名 from 表;
九.分组数据
l 数据分组
select 列,count(*) as 别名 from 表 group by 要按着分组的列;
l 过滤分组
select 列,count(*) as 别名 from 表 group by 要按着分组的列 having count(*) 条件
HAVING和WHERE的区别:WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
l 分组和排序
select 列,count(*) as 别名 from 表 group by 要按着分组的列 having count(*) 条件 ORDER BY 列;
l select字句顺序
select
from
where
group by
having
order by
十.使用子查询
l 利用子查询进行过滤
假如信息存储在很多个表中
select 列 from 表 where 列 in (select 列 from 表 where 条件)
在SELECT语句中,子查询总是从内向外处理。
l 作为计算字段使用子查询
select 列,列,(select count(*) from 列 where 条件) as 别名 from 表 order by 列;
十一.联结表
SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。
如果数据存储在多个表中,怎样用单条select语句检索出数据?答案是使用联结。
- 创建联结
select 列,列,列 from 表 INNER JOIN 表 ON 条件;
联结条件用特定的ON字句而不是WHERE字句给出。