达梦数据库单表查询与多表查询

一、单表查询

1.1基础查询

基础查询就是查询方式中最简单的查询方式,根据SELECT语句的语法就可以完成操作。

SELECT语句的基本语法如下:

SELECT<选择列表>

FROM[<模式名><基表名><视图名><相关名>]

列子:从TBL_Bookinfo表查询所有图书的记录内容

select*from TBL_Bookinf;

说明:

(1)select*from表示查什么,TBL_Bookinfo为从哪里查

(2)星号(*)是选取所有列的快捷方式,此时列的显示顺序和数据库表设计时的顺序保持一致。

1.2条件查询

条件查询就是查询满足条件的数据。这种查询方式是通过在查询语句中使用WHERE子句实现的,其基本语法如下。

SELECT<选择列表>

FROM[<模式名><基表名><视图名><相关名>]

WHERE<条件表达式>

WHERE子句常用的查询条件包括列名、运算符、值。

列子:在TBL_Bookinfo 表中查询95年及95年以后出版的书

select*from TBL_Bookinfo where PublishDate>='1995-1-1';

WHERE 子句运算符
条件类型运算符描述
比较=等于
<>不等于
>大于
<小于
>=大于等于
<=小于等于
确定范围BETWEEN AND在某个范围内
NOT BETWEEN AND不在某个范围内
确定集合IN在某个集合内
NOT IN不在某个集合内
字符匹配LIKE与某字符匹配
NOT LIKE与某字符不匹配
空值IS NULL是空值
IS NOT NULL不是空值
逻辑运算符AND两个条件都成立
OR只要一个条件成立
NOT条件不成立

1.3列表查询

对于数值型的列,SQl标准提供了几种基本的算术运算符来查询数据。常用的有+(加)、-(减)、*(乘)、/(除)。

列子:单位计划给每名员工涨500元工资,请查询工资涨后的员工信息,查询语句如下:

SELECT employee_name,email,phone_num,hire_date,salart+500

FROM employee;

1.5分组查询

分组查询是在基础查询语句上添加GROUP BY(分组子句)进行分组统计查询

分组查询语法格式如下:

GROUP BY 字段名 [HAVING 条件表达式]

说明:

1.字段名:是按照该字段的值进行分组(分组是所依据的列名称)

2.HAVING条件表达式:用来限制分组后的显示,符合条件表达式的结果将被显示,不符合的结果将不显示

列子:显示各出版社在1990年以后出版的图书册数

select Publisher,count(*)  from tbl_bookinfo

where PublisDate>='1990-1-1' group by publisher;

二、多表查询

2.1连接查询

链接查询分为内连接查询、外连接查询两种

内连接查询就是返回结果集仅包含满足全部连接条件记录的多连接查询。其一般语法格式为

SLECT 列名称 FROM 表名 INNER JOIN 连接表名 ON [连接条件]

在连接查询中用来连接两个表的条件称为连接条件或连接谓词,连接条件一般格式为

表1.列名1=表2.列名2

列子:查询出页数大于200页的图书索取号,书名,出版社,类别名

select a.bookid,a.bookname,a.publisher,b.classname

from tbl_bookinfo as a inner join tbl_bookclass as b

on a.classid=b.classid

where a.pagecount>200

外连接查询就是除返回满足连接条件的数据以外,还返回左,右或两个表中不满足条件的数据的一种多表连接查询。因此,外连接查询又分为左外连接查询,右外连接查询和全连接查询3种。其一般语法格式为

SELECT 列名称 FROM 表名[LEFT|RIGHT|FULL] OUTER JOIN 连接表名 ON[连接条件]

说明:

(1)LEFT OUTER JOIN:左外连接,是指除了符合条件的行,还要从ON语句的左侧表里选出不匹配的行;

(2)RIGHT OUTER JOIN:右外连接, 是指除了符合条件的行,还要从ON语句的右侧表里选出不匹配的行;

(3)FULL OUTER JOIN:全外连接,是指除了符合条件的行,还要从ON语句的两侧表里选出不匹配的行;

一个外连接的例子可以是:

假设我们有两个表,一个是顾客表(customer),另一个是订单表(order)。顾客表包含顾客的姓名、地址和电话等信息,订单表包含订单编号、订单日期和顾客ID等信息。我们可以使用外连接来找出所有的顾客以及他们的订单信息(如果有的话)。

具体而言,我们可以使用左外连接(left outer join)来找出所有的顾客及其订单信息。左外连接会保留左边表的所有记录,如果右表中没有与之匹配的记录,则右表中的所有列都会赋予 NULL 值。

SQL 查询语句如下:
SELECT *
FROM customer
LEFT OUTER JOIN order
ON customer.customer_id = order.customer_id;

这个查询语句会返回一个包含所有顾客及其订单信息的数据集,其中如果一个顾客没有任何订单,那么其订单信息中的所有列都会是 NULL。

2.2子查询

子查询是一个 SELECT 语句嵌套在另一个 SELECT、UPDATE、INSERT 或 DELETE 语句中的查询,用于检索数据并将结果返回给主查询。子查询通常用于限制结果集或生成与主查询无关的数据。子查询可以在 WHERE、HAVING、FROM 和 SELECT 子句中使用。

子查询基本语法格式如下:
SELECT column1, column2, ...
FROM table1
WHERE column1 OPERATOR (SELECT column3 FROM table2 WHERE condition);

其中,OPERATOR是用于比较的运算符(例如=、<、>等)。在子查询中,指定一个表格,列名和条件以过滤数据。子查询将返回一个值或一组值,这些值将用于主查询中的条件过滤。

例如,以下查询使用子查询在“orders”表中查找 2019 年订单数量大于 100 的客户列表:
SELECT customer_name 
FROM customers 
WHERE customer_id IN 
(SELECT customer_id 
 FROM orders 
 WHERE YEAR(order_date) = 2019 
 GROUP BY customer_id 
 HAVING COUNT(*) > 100);
 

在上面的查询中,子查询返回了 2019 年订单数量大于 100 的客户 ID,然后将这些客户 ID 传递给主查询以查找客户名称。

2.3联合查询

联合查询(Union Query)是一种SQL查询技术,它能够将两个或多个SELECT语句的查询结果组合成一个结果集,再将其呈现给用户。联合查询类似于集合操作中的联合运算,因此它也被称为“集合查询”。

在联合查询中,需要注意以下几点:

1. 联合查询的语法:使用UNION关键字将两个SELECT语句连接起来,形成一个查询语句。例如:
   SELECT column1, column2 FROM table1
   UNION
   SELECT column1, column2 FROM table2;

2. 联合查询的查询结果需要满足以下条件:

   - 结果集中的列数和数据类型必须相同;
   - 结果集中的数据行需要去重;
   - 联合查询的语句中,只有第一个SELECT语句中的ORDER BY子句有效,其它SELECT语句中的ORDER BY子句无效。

3. 可以使用UNION ALL关键字来保留所有重复的数据行。这意味着,使用UNION ALL会返回两个结果集的完整集合,包括重复的数据行。

4. 联合查询可以用于多表查询、子查询等场景,可以为用户提供更完整、准确的查询结果。

假设我们有两个表:students(学生)和 scores(成绩)。

students 表如下:

| id   | name     | age  |
| ---- | -------- | ---- |
| 1    | Alice    | 18   |
| 2    | Bob      | 20   |
| 3    | Charlie  | 19   |
| 4    | David    | 21   |

scores 表如下:

| id   | student_id | subject | score |
| ---- | ----------| ------- | ----- |
| 1    | 1         | Math    | 80    |
| 2    | 1         | English | 90    |
| 3    | 2         | Math    | 75    |
| 4    | 2         | English | 85    |
| 5    | 3         | Math    | 90    |
| 6    | 3         | English | 80    |

我们想要进行联合查询,得到每个学生的姓名、年龄和数学成绩。我们可以使用以下 SQL 语句:
SELECT students.name, students.age, scores.score
FROM students
JOIN scores
ON students.id = scores.student_id
WHERE scores.subject = 'Math'

这个查询使用了 JOIN 操作符,连接了 students 和 scores 表。我们用 ON 指定了连接条件,即 students.id 等于 scores.student_id。然后我们使用 WHERE 子句筛选出 subject 是 'Math' 的记录。最终得到以下结果:

| name     | age  | score |
| -------- | ---- | ----- |
| Alice    | 18   | 80    |
| Bob      | 20   | 75    |
| Charlie  | 19   | 90    |

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
达梦数据库在处理单表千万级数据查询时,其查询效率会受到多个因素的影响。以下是一些可能影响查询效率的因素: 1. 索引:在达梦数据库中,为查询频繁的字段创建索引是提高查询效率的重要手段。确保中的关键字段上有合适的索引,可以加快查询速度。 2. 查询条件:优化查询条件是提高查询效率的关键。合理使用索引和编写高效的查询语句可以减少数据扫描和过滤的开销。 3. 硬件资源:数据库服务器的硬件配置也会影响查询效率。增加内存、CPU和磁盘等硬件资源可以提高并发处理和IO操作的性能。 4. 数据库设计:合理的数据库设计可以减少查询时的数据冗余和复杂性,从而提高查询效率。例如,使用合适的数据类型、避免过多的关联查询等。 5. 数据库参数调优:根据实际情况,对达梦数据库的参数进行调优也是提高查询效率的一种方式。例如,调整缓冲区大小、并发连接数等参数。 6. SQL语句优化:编写高效的SQL语句也是提高查询效率的重要因素。避免使用不必要的子查询、减少数据返回量、避免使用通配符查询等,都可以优化查询性能。 总体而言,要提高达梦数据库单表千万级数据查询时的效率,需要综合考虑索引、查询条件、硬件资源、数据库设计、参数调优和SQL语句优化等方面的因素,并根据具体情况进行优化。此外,定期进行数据库性能监控和调优也是确保查询效率的有效手段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值