027-87887360

新闻资讯

开发券商软件的公司

开发券商软件的公司,复杂表达式处理,表达式大致可以分为两种:算术表达式和条件表达式。由于采用 Bison 进行解析,可以支持任意深度嵌套的复杂表达式。TrivialDB 支持的基本运算主要如下


四则运算,针对整数和浮点数进行。


比较运算符,即 <=、<、=、>、>= 与 <>。


模糊匹配运算符,即 LIKE,其实现采用 C++11 的正则表达式库。


范围匹配运算符,即 IN,可以在表的 CHECK 约束中以及 WHERE 子句中使用。


空值判定运算符,即 IS NULL 和 IS NOT NULL 两种。


逻辑运算,包含 NOT、AND 和 OR 三种。


以下是一些复杂表达式运算的例子


UPDATE customer SET age = age + 1 WHERE age < 18 AND gender = 'F';


SELECT * FROM customer WHERE name LIKE 'John %son';


SELECT * FROM students WHERE grades IN ('A', 'B', 'C');


SELECT * FROM students WHERE name IS NOT NULL;


聚集查询


开发券商软件的公司,实现了五种聚集查询函数 COUNT、SUM、AVG、MIN 和 MAX。其中 COUNT 不支持 DISTINCT 关键字。例如


SELECT COUNT(*) FROM customer WHERE age > 18;


SELECT AVG(age) FROM customer WHERE age <= 18;


属性完整性约束


支持多种属性完整性约束,分别是


主键约束。一个表可以有多个列联合起来作为主键,只有在所有主键都相同时才认为两条记录有冲突,即这种情况下主键是一个元组。


外键约束,每个域都可以有外键约束,引用另外一个表的主键。


UNIQUE 约束,该约束限制某一列的值不能重复。


NOT NULL 约束,该约束限制某一列不能有空值。


DEFAULT 约束,该约束可以在 INSERT 语句不指定值是给某列赋予一个默认值。


CHECK 约束,该约束可以对表中元素的值添加条件表达式的检查。


开发券商软件的公司,下面是一个简单的例子,注意如果在多个列都指定了 PRIMARY KEY,那么就认为主键是一个元组,而不是有多个主键。例如 Infos 表的主键为(PersonID, InfoID)。


CREATE TABLE Persons (


PersonID int PRIMARY KEY NOT NULL,


Name varchar(20),


Age int DEFAULT 1,


Gender varchar(1),


CHECK (Age >= 1 AND Age <= 100),


CHECK (Gender IN ('F', 'M'))


);


CREATE TABLE Infos (


PersonID int PRIMARY KEY,


InfoID int PRIMARY KEY,


FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)


);


多表连接查询


在 SELECT 语句中,我们支持任意多表的连接操作,例如


SELECT * FROM A, B, C WHERE A.ID = B.ID AND C.Name = A.Name


并且,对于多个表的连接中形如 A.Col1 = B.Col2 的条件,那么如果这两个列的某一个拥有索引,会利用索引进行查询优化。例如如下查询就可以优化


SELECT * FROM Persons, Infos WHERE Persons.PersonID = Infos.PersonID;


SELECT * FROM Persons, Infos, Datas WHERE Persons.PersonID = Infos.PersonID AND Datas.N IS NOT NULL;


SELECT * FROM Persons, Infos, Datas WHERE Persons.PersonID = Infos.PersonID AND Datas.ID = Infos.PersonID;


开发券商软件的公司,具体的优化方法以及何种查询可以优化见文档中"查询优化"部分。


表别名


我们在多表连接查询时支持通过别名(alias)的方式对一个表进行连接,例如


SELECT * FROM Persons AS P1, Persons AS P2 WHERE P1.PersonID = P2.PersonID;