什么网站可以接单做高端网网站建设
news/
2025/9/23 22:50:55/
文章来源:
什么网站可以接单做,高端网网站建设,长春网络推广优化,网站后台管理系统下载复合类型
复合类型是一种由其他类型组成的类型。它可以是数组、结构体、联合体或指向这些类型的指针。复合类型允许将多个值组合成单个实体#xff0c;以便更方便地处理和使用。复合类型在C语言中非常常见#xff0c;用于表示复杂的数据结构和组织数据的方式。
数组是一种由…复合类型
复合类型是一种由其他类型组成的类型。它可以是数组、结构体、联合体或指向这些类型的指针。复合类型允许将多个值组合成单个实体以便更方便地处理和使用。复合类型在C语言中非常常见用于表示复杂的数据结构和组织数据的方式。
数组是一种由相同类型的元素组成的复合类型。它有固定大小并且可以通过索引访问其中的元素。数组在C语言中非常常用用于存储和处理一组相同类型的数据。
结构体是一种由多个不同类型的成员组成的复合类型。结构体可以用于表示一个实体的多个属性或数据项。每个成员都可以具有不同的数据类型结构体中的成员可以通过点运算符来访问。
联合体是一种特殊的结构体它的所有成员共享同一块内存空间。只能同时存储一个成员的值而且根据存储的数据类型来确定如何解释这块内存。
指针是一种特殊的复合类型它保存了一个变量的内存地址。指针可以指向任何其他类型的数据包括数组、结构体和函数。通过指针可以间接访问指向的数据并进行对数据的操作。
复合类型在C语言中提供了更多的灵活性和功能使得程序员可以更好地组织和处理数据。
postgresql中的复合类型
PostgreSQL支持复合类型也称为复合数据类型。复合类型是一种创建用户自定义数据类型的方式它可以包含多个字段每个字段可以有不同的数据类型。
CREATE TYPE complex AS (r double precision,i double precision
);CREATE TYPE inventory_item AS (name text,supplier_id integer,price numeric
);语法与 类似只是只能指定字段名称和类型;目前不能包含任何约束例如 。请注意关键字是必不可少的;没有它系统会认为是另一种命令你会得到奇怪的语法错误。CREATE TABLENOT NULLASCREATE TYPE
定义类型后我们可以使用它们来创建表
CREATE TABLE on_hand (item inventory_item,count integer
);INSERT INTO on_hand VALUES (ROW(fuzzy dice, 42, 1.99), 1000);或功能
CREATE TABLE inventory_item (name text,supplier_id integer REFERENCES suppliers,price numeric CHECK (price 0)
);然后上面所示的相同复合类型将作为副产品出现并且可以像上面一样使用。但请注意当前实现的一个重要限制由于没有约束与复合类型关联因此表定义中显示的约束不适用于表外部的复合类型的值。若要解决此问题请在复合类型上创建一个域并将所需约束应用为域的约束。
构造复合值
若要将复合值写为文本常量请将字段值括在括号内并用逗号分隔。您可以在任何字段值两边加上双引号如果它包含逗号或括号则必须这样做。因此复合常量的一般格式如下
( val1 , val2 , ... )例如
(fuzzy dice,42,1.99)这将是上面定义的类型的有效值。若要使字段为 NULL请在列表中的位置完全不写入任何字符。例如此常量指定 NULL 第三个字段
(fuzzy dice,42,)如果需要空字符串而不是 NULL请写双引号
(,42,)这里第一个字段是非 NULL 空字符串第三个字段是 NULL。 表达式语法还可用于构造复合值。在大多数情况下这比字符串文字语法使用起来要简单得多因为您不必担心多层引用。我们已经在上面使用了这种方法ROW
ROW(fuzzy dice, 42, 1.99)
ROW(, 42, NULL)只要表达式中有多个字段ROW 关键字实际上是可选的因此可以将其简化为
ROW(fuzzy dice, 42, 1.99)
ROW(, 42, NULL)只要表达式中有多个字段ROW 关键字实际上是可选的因此可以将其简化为
(fuzzy dice, 42, 1.99)
(, 42, NULL)访问复合类型
要访问复合列的字段需要写入一个点和字段名称就像从表名中选择字段一样。事实上这很像从表名中进行选择因此您经常必须使用括号来防止混淆解析器。例如on_hand您可以尝试从示例表中选择一些子字段如下所示
SELECT item.name FROM on_hand WHERE item.price 9.99;这是行不通的因为根据 SQL 语法规则该名称是表名而不是on_hand的列名。你必须这样写
SELECT (item).name FROM on_hand WHERE (item).price 9.99;或者如果您还需要使用表名例如在多表查询中如下所示
SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price 9.99;现在括号中的对象被正确地解释为对列的引用然后可以从中选择子字段。 每当从复合值中选择字段时类似的语法问题都会适用。例如要从返回复合值的函数的结果中只选择一个字段您需要编写如下内容
SELECT (my_func(...)).field FROM ...如果没有额外的括号这将生成语法错误。
修改复合类型
下面是插入和更新复合列的正确语法的一些示例。首先插入或更新整个列
INSERT INTO mytab (complex_col) VALUES((1.1,2.2));UPDATE mytab SET complex_col ROW(1.1,2.2) WHERE ...;第一个示例省略 第二个示例使用它;我们本可以以任何一种方式做到这一点。ROW
我们可以更新复合列的单个子字段
UPDATE mytab SET complex_col.r (complex_col).r 1 WHERE ...;请注意这里我们不需要SET实际上也不能在紧接着出现的列名周围加上括号但是在等号右侧的表达式中引用同一列时我们确实需要括号。
我们也可以将子字段指定为INSERT的目标
INSERT INTO mytab (complex_col.r, complex_col.i) VALUES(1.1, 2.2);如果我们没有为列的所有子字段提供值则其余子字段将填充 null 值。
查询复合类型
查询中存在与复合类型关联的各种特殊语法规则和行为。这些规则提供了有用的快捷方式但如果您不知道它们背后的逻辑可能会造成混淆。
在 PostgreSQL 中查询中对表名或别名的引用实际上是对表当前行的复合值的引用。例如inventory_item如果我们有一个如上所示的表我们可以这样写
SELECT c FROM inventory_item c;此查询生成单个复合值列因此我们可能会得到如下输出 c
------------------------(fuzzy dice,42,1.99)
(1 row)但请注意简单名称与表名之前的列名匹配因此此示例之所以有效是因为查询的表中没有命名的列。c
普通的限定列名语法table_name column_name可以理解为将字段选择应用于表当前行的复合值。出于效率原因它实际上不是以这种方式实现的。.
当我们写
SELECT c.* FROM inventory_item c;然后根据 SQL 标准我们应该将表的内容扩展为单独的列 name | supplier_id | price
--------------------------------fuzzy dice | 42 | 1.99
(1 row)就好像查询是
ELECT c.name, c.supplier_id, c.price FROM inventory_item c;PostgreSQL 会将此扩展行为应用于任何复合值表达式尽管如上所示只要它不是简单的表名您就需要在应用的值周围写括号。例如如果是一个函数返回包含列. 、* 和myfunc()的复合类型则这两个查询具有相同的结果abc
SELECT (myfunc(x)).* FROM some_table;
SELECT (myfunc(x)).a, (myfunc(x)).b, (myfunc(x)).c FROM some_table;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914144.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!