关系操作的特点是操作对象和操作结果都是集合,而非关系数据模型的数据操作方式则为一次一个记录的方式。关系数据代数语言、关系演算语言和具有关系代数和关系演算双重特点的语言(例如SQL)。关系演算语言包含元组关系演算语言(例如Aplha、Quel)和域关系演算语言(例如QBE)。
关系代数语言、元组关系演算和域关系演算是抽象查询语言,它与具体的DBMS中实现的实际语言并不一样,但是可以用它评估实际系统中的查询语言能力的标准。
关系代数运算符有4类:集合运算符(∩ 交、∪ 并、- 差、× 笛卡尔积)、比较运算符(> 大于、≥ 大于等于、< 小于、≤ 小于等于 ≠ 不等于、= 等于)、逻辑运算符(¬ 非、ν 与、Λ 或)、专门的关系运算符(σ 选择、÷ 除、π 投影、⋈ 连接)
基本关系代数涵盖有五种:并、差、笛卡尔积、选择、投影,其他的都可以由这五种推出来如:各种连接。
以MySQL运行结果为例:
首先建立数据库 create database mydb;
在建立两个表格emp与dept详情如下:
CREATE TABLE emp(
empno INT,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
comm decimal(7,2),
deptno INT
) ;
INSERT INTO emp values(7369,\'SMITH\',\'CLERK\',7902,\'1980-12-17\',800,NULL,20);
INSERT INTO emp values(7499,\'ALLEN\',\'SALESMAN\',7698,\'1981-02-20\',1600,300,30);
INSERT INTO emp values(7521,\'WARD\',\'SALESMAN\',7698,\'1981-02-22\',1250,500,30);
INSERT INTO emp values(7566,\'JONES\',\'MANAGER\',7839,\'1981-04-02\',2975,NULL,20);
INSERT INTO emp values(7654,\'MARTIN\',\'SALESMAN\',7698,\'1981-09-28\',1250,1400,30);
INSERT INTO emp values(7698,\'BLAKE\',\'MANAGER\',7839,\'1981-05-01\',2850,NULL,30);
INSERT INTO emp values(7782,\'CLARK\',\'MANAGER\',7839,\'1981-06-09\',2450,NULL,10);
INSERT INTO emp values(7788,\'SCOTT\',\'ANALYST\',7566,\'1987-04-19\',3000,NULL,20);
INSERT INTO emp values(7839,\'KING\',\'PRESIDENT\',NULL,\'1981-11-17\',5000,NULL,10);
INSERT INTO emp values(7844,\'TURNER\',\'SALESMAN\',7698,\'1981-09-08\',1500,0,30);
INSERT INTO emp values(7876,\'ADAMS\',\'CLERK\',7788,\'1987-05-23\',1100,NULL,20);
INSERT INTO emp values(7900,\'JAMES\',\'CLERK\',7698,\'1981-12-03\',950,NULL,30);
INSERT INTO emp values(7902,\'FORD\',\'ANALYST\',7566,\'1981-12-03\',3000,NULL,20);
INSERT INTO emp values(7934,\'MILLER\',\'CLERK\',7782,\'1982-01-23\',1300,NULL,10);
CREATE TABLE dept(
deptno INT,
dname varchar(14),
loc varchar(13)
)
INSERT INTO dept values(10, \'ACCOUNTING\', \'NEW YORK\');
INSERT INTO dept values(20, \'RESEARCH\', \'DALLAS\');
INSERT INTO dept values(30, \'SALES\', \'CHICAGO\');
INSERT INTO dept values(40, \'OPERATIONS\', \'BOSTON\');
1、并在MySQL中体现为合并结果集union(需要注意的是t1和t2的约束是相同的)
去除重复列:select * from t1 union select * from t2;
不去除重复列:select * from t1 union all select * from t2;
2、笛卡尔积(以emp和dept表位例,其中emp有14条记录、dept中有4条记录形成的记录14*4=56条)
select * from emp,dept;
只有部分截图
3 内连接(inner)
在MySQL中不加限定条件的时候
select * from emp inner join dept;
结果与笛卡尔积是一样的。当然在后面可以加where条件和using关键字。
4选择和投影
4.1 投影是对列处理
select deptno from emp;
4.2 选择是对行处理
select * from emp where ename=\'jones\';