sql基础语句
简单查询语句
查询就是检索操作,是对已经存在的基本表及视图进行数据检索,不改变数据本身。
查询格式
select
列名[列名…]+from
表名[表名…]+where
条件+group by
基于分组的列名+having
分组条件+order by
基于排序的列名[ASC|DESC]
Select执行过程
from
→where
→group by
→having
→select
→order by
select from 查询语句
select [Distinct]{*,列名[[as]别名],...}
from 表名;
其中,distinct
表示选择唯一的结果集,即去除重复记录。*
表示选择所有结果集。as
后面一般带有别名,可以清晰的告诉我们这个列表示的是什么。
注意
SELECT标识出所需的数据列。
FRO M来自哪个表。
查询列的先后顺序可以与表中的顺序不一致。
目标列形式可以为列名, * ,算术表达式,聚集函数。
定义列的别名
要求:列名和别名之间用空格间隔,或者在列名和别名之间加入可选关键字as
。
注意:注:列的别名可以用于select
和order by
子句中,但是不能用在where
子句中。
如果别名包含空格,或特殊关键字符,或区分大小写,如何显示? 使用双引号来表示。
连接操作符
格式:列名||列名
用于连接列与列、列与算术表达式或列与常量之间创建一个字符表达式。
连接符两边的列将组合成一个列作为结果输出。
select from where 查询语句
select [Distinct]{*,列名[[as]别名],...}
from 表名
where[条件...];
使用where
子句限定返回的数据行。where
子句紧跟在from
后面。
where
语句格式:
where 表达式 操作符 值
字符串和日期
注意:字符串是区分大小写的
。
字符串和日期型数值都要用单引号引起来。
字符型数值是区分大小写,日期型数值是区分日期表达形式的。
默认的日期形式是DD-MON-YY
比较操作符
其他比较操作符
between...and...
通常用于显示一定范文内的数据行。
常用格式:
select a,b
from A
where b between 100 and 200 ;
in
运算符来测试表中是否包含列表中的一系列值。
常用格式:
select a,b
from A
where b in (1,2);
Like
来执行字符串通配符查找。
查找条件可以包含原义字符串和数字
%
:表示零或任意更多字符。
_
:代表一个字符。
常用格式:
select a
from A
where a like 'a%';
使用like
运算符部分匹配查找功能
常用格式:
select a
from A
where a like '_a%';
可以用escape
标识符实现对"%"和’’_"的查找。
常用格式:
select a
from A
where a like '%b\_a%'escape '\';
IS NULL
空值运算符是用来判定值是否为空。
空值意味着这个值是不可用的、未分配值的、未知的和不可应用的。
因为空值不能等于或不等任何值,因此不能用"="来测试。
逻辑运算符
优先规则
使用()
可以改变运算符的优先原则。
分组查询
分组查询的语句格式如下:
select select_value_list
from table _name
where where_condition
group by group_value_list
having group_condition
其中
select_value_list
表示需要查询的数据列表
table _name
表示数据来源的表名
where _condition
数据过滤的条件表达式
group_value_list
用于指定分组的依据,主要是列名
group_condition
定义分组后数据应当满足的条件
Group By子句
使用Group By
子句将查询结果按group by
后面的列进行分组,列值相同的为一组。
目的:为了细化集函数的作用对象。
如果未对查询结果分组,集函数将作用于整个查询结果。
分组后集函数将作用于每一个组,即每一个组都有一个函数值。
常用格式:
select a,b
from A
group by a;
Having子句
如果分组后还要求按一定条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用Having子句指定筛选条件。
作用:去掉不满足条件的组。
常用格式:
select a,count(*)
from A
group by a
having count(*)>5;
注意:
Having子句跟在group by子句后面,有group by才有having。
若用到了分组group by
,那么投影的列要么是为分组依据的列,要么为聚集函数,不能有其他情况。
group by
后面的列名不可以在select列表中。
group by
后面的列名不能使用别名。
where子句与having短语的根本区别在于作用对象不同。
where子句作用表(是分组前的整张表),从中选择满足条件的元组(即记录)。where子句不能用于限制分组函数。
having短语作用于组(是分组后的每个小组),从中选择满足条件的组。
Order By子句
使用order by
子句对行进行排序
其中ASC
表示升序,默认值,DESC
表示降序。
order by
子句出现在select语句的最后。
ASC:
select a,b
from A
order by hiredate ASC;
其中ASC
可加可不加。
DESC:
select a,b
from A
order by hiredate DESC;
多列参与排序
order by
列表的顺序就是数据排列的顺序
可以用没有在select列表中出现的列进行排序
例如:
select a,b,c
from A
order by b,c DESC;
注意:
在升序排列时,NULL值排在最后。
在降序排列时,NULL值排在最前。
在排序order by子句的末尾可以使用NULLS FIRST
或者NULLS LAST
指定空值显示在查询结果的开始或者结尾处。