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,bfrom Awhere b between 100 and 200 ;
in
运算符来测试表中是否包含列表中的一系列值。
常用格式:
select a,bfrom Awhere b in (1,2);
Like
来执行字符串通配符查找。
查找条件可以包含原义字符串和数字
%
:表示零或任意更多字符。
_
:代表一个字符。
常用格式:
select afrom Awhere a like \'a%\';
使用
like
运算符部分匹配查找功能
常用格式:
select afrom Awhere a like \'_a%\';
可以用
escape
标识符实现对\”%\”和’’_\”的查找。
常用格式:
select afrom Awhere a like \'%b\\_a%\'escape \'\\\';
IS NULL
空值运算符是用来判定值是否为空。
空值意味着这个值是不可用的、未分配值的、未知的和不可应用的。
因为空值不能等于或不等任何值,因此不能用\”=\”来测试。
逻辑运算符
优先规则
使用
()
可以改变运算符的优先原则。
分组查询
分组查询的语句格式如下:
select select_value_listfrom table _namewhere where_conditiongroup by group_value_listhaving group_condition
其中
select_value_list
表示需要查询的数据列表
table _name
表示数据来源的表名
where _condition
数据过滤的条件表达式
group_value_list
用于指定分组的依据,主要是列名
group_condition
定义分组后数据应当满足的条件
Group By子句
使用
Group By
子句将查询结果按
group by
后面的列进行分组,列值相同的为一组。
目的:为了细化集函数的作用对象。
如果未对查询结果分组,集函数将作用于整个查询结果。
分组后集函数将作用于每一个组,即每一个组都有一个函数值。
常用格式:
select a,bfrom Agroup by a;
Having子句
如果分组后还要求按一定条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用Having子句指定筛选条件。
作用:去掉不满足条件的组。
常用格式:
select a,count(*)from Agroup by ahaving 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,bfrom Aorder by hiredate ASC;
其中
ASC
可加可不加。
DESC:
select a,bfrom Aorder by hiredate DESC;
多列参与排序
order by
列表的顺序就是数据排列的顺序
可以用没有在select列表中出现的列进行排序
例如:
select a,b,cfrom Aorder by b,c DESC;
注意:
在升序排列时,NULL值排在最后。
在降序排列时,NULL值排在最前。
在排序order by子句的末尾可以使用
NULLS FIRST
或者
NULLS LAST
指定空值显示在查询结果的开始或者结尾处。