2020-08-26

达梦数据库部分查询语句(单表查询、连接查询、子查询)实例练习

  • 单表查询

select语句仅从一个表/视图中检索数据,称单表查询。即<FROM 子句>中<普通表> 使用的是[<模式名>.]<基表名|视图名>。

1、简单查询

SELECT DISTINCT <表的列名>或<*>(*表示所查表的所有列) FROM  PRODUCTION .PRODUCT;

例如:

1)、查询表中所有列内容

2)、查询表中某几列(图中文所查询的是goods_id,price ,discount ,specification这四列)

注:DISTINCT 保证重复的行将从结果中去除。若允许有重复的元组,改用 all 来替换distion,或直接去掉DISTINCT即可

 

当用户需要查出所有列的数据,且各列的显示顺序与基表中列的顺序也完全相同时,为了方便用户提高工作效率,SQL语言允许用户将SELECT后的<值表达式>省略为*(及为表的所有列)。SELECT  *  FROM  <表名>;

 

2、带条件查询

带条件查询是指在指定表中查询出满足条件的元组(列)。该功能是在查询语句中使用 where 子句实现的。where子句常用的查询条件由谓词和逻辑运算符组成。谓词指明了一个条件,该条件求解后,结果为一个布尔值:真、假或未知。

逻辑算符有:and,or,not。

比较查询有(=、>、<、>=、<=、<>)

between、in、like、null、exists

例如:

查询表i_goods中商品价格在20~50之间的商品id、商品标题、商品折扣、类别id和当前价格

1)、使用比较查询

select goods_id,goods_title, discount ,category_id,price from vspace_1.i_goods

where price>=20 and price<=50;

2)、between查询

select goods_id,goods_title, discount ,category_id,price from vspace_1.i_goods

where price between 20 and 50;

3)、in查询

查询表i_goods中折扣为0.6和0.8的商品id、商品标题、商品折扣、类别id、价格

select goods_id,goods_title, discount,category_id,price from vspace_1.i_goods

where discount in ('0.6','0.8');

4)、like查询

  • 查询以“蛋”结尾的商品id、商品标题、商品折扣、价格

select goods_id,goods_title, discount ,price from vspace_1.i_goods

where goods_title like '__蛋';

  • 查询有“蛋”字的商品id、商品标题、商品折扣、价格

select goods_id,goods_title, discount ,price from vspace_1.i_goods

where goods_title like '%蛋%';

注:百分号“%”和下划线“_”,“%”和“_”称通配符。“%”代表任意字符串(也可以是空串);“_”代表任何一个字符。

5)、组合逻辑

可以用逻辑算符(AND,OR,NOT)与各种谓词相组合生成较复杂的条件查询。

例如:

  查询表i_goods里的商品标题中以肉结尾或者折扣小于等于0.8价格小于等于25的商品标题、商品折扣、价格

select goods_title, discount ,price from vspace_1.i_goods

where goods_title='%肉' or discount<=0.8 and price<=25;

 

  • 连接查询

一个查询包含多个表(>=2),则称这种方式的查询为连接查询。即<FROM子句>中使用的是<连接表>。

DM的连接查询方式包括:

1交叉连接(cross join)

2自然连接(natural join)

3内连接(inner)

4外连接(outer)

  1. 交叉连接

1)、无过滤条件

题:I_basic和i_user通过交叉连接查询name和password

select n.name, p.password

from i_basic n cross join i_user p;

2)有过滤条件

通过两表中的phone连接表i_basic和i_user查询姓名、电话、密码

select n.name, n.phone,a.password

from vspace_1.i_basic n , vspace_1.i_user a

where n.phone= a.phone;

说明:

1. 连接谓词中的列类型必须是可比较的,但不一定要相同,只要可以隐式转换即可;

2. 不要求连接谓词中的列同名;

3. 连接谓词中的比较操作符可以是>、>=、<、<=、=、< >;

4. WHERE子句中可同时包含连接条件和其它非连接条件。

2、自然连接(natural join)

把两张连接表中的同名列作为连接条件,进行等值连接

具有以下特点:

1. 连接表中存在同名列;

2. 如果有多个同名列,则会产生多个等值连接条件;

3. 如果连接表中的同名列类型不匹配,则报错处理。

题:(Phone为两表同名列)

select n.name, a.password

from vspace_1.i_basic n natural join vspace_1.i_user a;

3、Join  using

这是自然连接的另一种写法,JOIN关键字指定连接的两张表,USING指明连接列。要 求USING中的列存在于两张连接表中。

select name, password

from vspace_1.i_basic join vspace_1.i_user using(phone) ;

4、join…on

这是一种连接查询的常用写法,说明是一个连接查询。JOIN关键字指定连接的两张表, ON 子句指定连接条件表达式

select n.name, n.in_card,a.password

from vspace_1.i_basic n join vspace_1.i_user a

on n.phone= a.phone;

5、内连接(inner join)

根据连接条件,结果集仅包含满足全部连接条件的记录,我们称这样的连接为内连接

6、外连接(outer join)

外连接对结果集进行了扩展,会返回一张表的所有记录,对于另一张表无法匹配的字段 用NULL填充返回。DM数据库支持三种方式的外连接:左外连接、右外连接、全外连接。

外连接中常用到的术语:左表、右表

根据表所在外连接中的位置来确定,位于左侧的 表,称为左表;位于右侧的表,称为右表。

1. 左外连接:返回左表所有记录

2. 右外连接:返回右表所有记录

3. 全外连接:返回两张表所有记录

处理过程为分别对两张表进行左外连接和右外连 接,然后合并结果集。 在左外连接和右外连接中,如果需要对未能匹配的缺失数据进行填充,可以使用分区外 连接(PARTITION OUTER JOIN),分区外连接通常用于处理稀疏数据以得到分析报表。

  • 子查询

在DM_SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块,如果在一个查 询块中嵌套一个或多个查询块,我们称这种查询为子查询。

它通常采用(SELECT…)的形式嵌套在表达式中

子查询语法如下:

<子查询> ::= (<查询表达式>),即子查询是嵌入括弧的<查询表达式>,而这个<查询表达式>通常是一个SELECT语句。

它有下列限制:

1. 在子查询中不得有ORDER BY子句;

2. 子查询允许TEXT类型与CHAR类型值比较。比较时,取出TEXT类型字段的最多 8188 字节与 CHAR 类型字段进行比较;如果比较的两字段都是 TEXT 类型,则最多取 300*1024字节进行比较;

3. 子查询不能包含在集函数中;

4. 在子查询中允许嵌套子查询。

  •  按子查询返回结果的形式,DM子查询可分为两大类:

1. 标量子查询:只返回一行一列;

2. 表子查询:可返回多行多列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值