1.单表查询
SQL 数据查询主要由 SELECT 语句完成,SELECT 语句是SQL 的核心。单表查询就是利用 SELECT语句仅从一个表/视图中查询数据。其语法如下:
SELECT [DISTINCT]*{ 字段名 1,字段名 2, 字段名 3,…
FROM 表名
[WHERE 条件表达式 1]
[GROUP BY 字段名 [HAVING 条件表达式 2]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET,] 记录数];
1.1基础查询
SELECT * FROM 表名
1.2条件查询
SELECT *
FROM 表名
[WHERE 条件表达式 1];
比较条件组合使用
BETWEEN关键字
IN关键字
1.3高级查询
SELECT [DISTINCT]*{ 字段名 1,字段名 2, 字段名 3,…
FROM 表名
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET,] 记录数];
1.4分组查询
SELECT *
FROM 表名
[GROUP BY 字段名 [HAVING 条件表达式 2]];
2.连接查询
数据库中的各个表中存储着不同的数据,用户往往需要用多个表中的数据来组合、提取所需的信息。如果一个查询需要对多个表进行操作,就称为连接查询。连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征。
连接查询方式有交叉连接查询、内连接查询、外连接查询等。
连接查询中的通配符
2.1内连接查询
SELECT 输出项
FROM 表1 INNER JOIN 表2 ON 表2.公共列=表1.公共列;
2.2外连接查询
左外连接
SELECT 输出项
FROM 表1 LEFT JOIN 表2 ON 表2.公共列=表1.公共列;
右外连接
SELECT 输出项
FROM 表1 RIGHT JOIN 表2 ON 表2.公共列=表1.公共列;
2.3交叉连接查询
SELECT 输出项
FROM 表1 CROSS JOIN 表2;
3.子查询
当一个查询的结果是另一个查询的条件时,称为子查询。子查询就是将一个SELECT语句嵌入另一个 SELECT 语句的子句中,通常被称为嵌套 SELECT 语句、子 SELECT 语句或内部 SELECT 语句。在许多 SQL 子句中可以使用子查询,其中包括 FROM 子句、 WHERE 子句、HAVING子句。通常先执行子查询,然后使用其输出结果来完善主查询(外部查询)。
FROM子句中使用子查询,其一般语法格式为:
SELECT 列名称 FROM (SELECT语句)
WHERE 子句、HAVING子句中使用子查询,其一般语法格式为:
SELECT 列名称 FROM 表名称 WHERE [HAVING]<列名称><运算符>(SELECT语句)
说明:
(1)上述仅给出了一个不太严格的示意性格式,使用的子查询需要用圆括号()括起来;(2)子查询中既可以使用其他的表,也可以使用与主查询相同的表;(3)语法格式中的(SELECT语句)里还可以嵌套子查询;
(4)子查询在主查询之前一次执行完成,子查询的结果被主查询使用;(5)子查询在参与比较条件运算时,只能放在比较条件的右侧;
(6)<运算符>是比较条件运算符,根据(SELECT 语句)结果的类型,又可将子查询分为单行子查询与多行子查询,单行子查询里(SELECT 语句)被当作一个表达式参与运算,多行子查询里(SELECT语句)被当作一个集合参与运算。
在子查询中通常可以使用IN、ANY、SOME、ALL、EXISTS 关键字。
3.1使用IN关键字的子查询
IN关键字可以测试表达式的值是否与子查询返回集中的某个值相等。
3.2使用ANY,SOME, ALL关键字的子查询
子查询在返回单值时可以用比较运算符,而使用ANY、SOME、ALL 关键字时则必须同时使用比较运算符。
3.3使用EXISTS关键字的子查询
带有EXISTS关键字的子查询不返回任何数据,只产生逻辑真值“true”(子查询结果非空,至少有一行),或者逻辑假值“false”(子查询结果为空,一行也没有)。
4.数据操作
数据操作是数据库管理系统的基本功能,包括数据的插入、修改和删除等。在实际应用中,多个应用程序会并发操作数据库,导致出现数据库数据的不一致性和并发操作问题,达梦数据库利用事务和封锁机制实现数据并发存取, 保障数据的完整性。
4.1插入数据
insert (into) 表名[(字段名1,字段名2,...)]
values(值1,值2...)[(值1,值2...),...];
4.2修改数据
update 表名
set 字段名1=值1[,字段2=值2,...]
[where 条件表达式];
4.3删除数据
delete from 表名[where 条件表达式];
5.查询子句
为了丰富对查询结果的处理方式,增强查查询能力,不同的数据库会提供多种查询子句。本节主要介绍常用的查询子句,包括排序子句、分组子句、HAVING 子句、TOP子句等。
5.1排序子句
排序子句使用ORDER BY子句对查询结果:进行排序。如果没有指定查询结果的显示顺序,数据库管理系统将按其最方便的顺序(通常是数据记录在表中的先后顺序)输出查询结果。用户也可以用 ORDER BY子句指定按照一个或多个属性列的升序(ASC)或降序(DESC)重新排列查询结果,其中升序(ASO C)为默认值。其一般语法格式为:
SELECT 列名称 FROM 表名称 ORDERBY 列名称 [ASC|DESC] [NULLS FIRSTLAST],{列名称 [ASCDESC] [NULLS FIRST|LAST]}
5.2分组子句
分组子句使用GROUP BY子句对查询结果进行分组。GROUPBY子句是SELECT语句的可选项部分,它定义了分组表。GROUP BY子句定义了分组表:行组的集合,其中每个组由其中所有分组列的值都相等的行构成。
GROUP BY子句将查询结果表按某一列值或多列值分组,值相等的为一组。其一般语法格式为:
SELECT 列名称 FROM 表名称 GROUPBY 列名称
5.3HAVING子句
HAVING子句是SELECT语句的可选项部分,它也定义了一个分组表,用于选择满足条件的组。其基本语法如下:
SELECT <选择列表>
FROM [<模式名>.<基表名>|<视图名>[<相关名>] HAVING子句
<HAVING子句>::=HAVING<搜索条件><搜索条件>::= <表达式>
其中只含有搜索条件为 TRUE 的那些分组,且通常跟随一个 GROUP BY 子句。 HAVING子句与分组的关系正如 WHERE 子句与表中行的关系。
WHERE子句用于选择表中满足条件的行,而HAVING子句用于选择满足条件的分组。
5.4TOP子句
TOP 子句用于规定查询返回记录的数目。对于计记录数目较大的表来说,TOP 子句是非常有用的。其基本语法如下:
SELECT TOP number/perc cent<列名> FROM 表名;