人工智能产业链联盟 发表于 2020-10-11 19:44:00

数据库基础知识盘点 | 数据库入门必看

https://p1.pstatp.com/large/pgc-image/0d2fbe5128754da2bd94c31d3dc163b4

五个基本的关系代数操作


并、差、笛卡尔积、选择、投影


数据库语言四大类



[*]DQL(Data Query Language):数据库查询语言。
[*]DDL(Data Definition Language):数据库定义语言。定义关系模式、删除关系、修改关系模式。


1.关系、属性


DML(Data Manipulation Language):数据库利用语言。插入元组、删除元组、修改元组。


2.元组


DCL(Data Control Language):数据库控制语言。用来授权或回收访问数据库的某种特权,并控制数据库利用事务发生的时间及结果。


3.GRANT、revoke


4.commit / rollback work


完整性


实体完整性:要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。


1.主键


参照完整性:对于永久关系的相关表,在更新、插入或删除纪录时,如果只改其一,就会影响数据的完整性。如删除父表的某纪录后,子表的相应纪录未删除,致使这些纪录称为孤立纪录。对于更新、插入或删除表间数据的完整性。


2.外键


自定义完整性


基础操作


1.创建关系


[*]
[*]
[*]
[*]
[*]
[*]
[*]
create table instructor2(    id char(5) not null,    name varchar(20) not null,    dept_name varchar(20) not null,    salary numeric(8,2),    primary key(id));

结果如下:(可看出对属性进行了相关定义)


https://p9.pstatp.com/large/pgc-image/7a75c03275ec494daad001394f7c947d


2.插入元祖


insert into 关系名 values(每个属性对应的值):



[*]
[*]
[*]
[*]
[*]
[*]
insert into instructor2 values(00001,'ai','math',2500.37);insert into instructor2 values(00002,'la','math',3700.89);insert into instructor2 values(00003,'bi','math',5400.45);insert into instructor2 values(00004,'ma','english',1450.23);insert into instructor2 values(00005,'ye','english',3421.34);insert into instructor2 values(00006,'er','technology',10000.65);

结果如下:


https://p1.pstatp.com/large/pgc-image/735c884b48144ba0a7a6ede8d5efff10


3.删除全部元组


delete from 关系名;


删除了元组,但关系和属性还存在。


https://p9.pstatp.com/large/pgc-image/7a75c03275ec494daad001394f7c947d


4.删除关系


drop table 关系名;


删除了关系,进行select查询时会出现关系名无效的错误。


https://p3.pstatp.com/large/pgc-image/b7d833163ea94d379d19dabcafd4f6a6


5.属性操作


alter table 关系名 add 新属性 数据类型,新属性 数据类型,;



[*]
alter table instructor2 add firstname varchar(20),lastname varchar(20);

https://p3.pstatp.com/large/pgc-image/86651b5ce8914a0eb9bae1ae412aa6ac


alter table 关系名 drop 属性,;



[*]
alter table instructor2 drop firstname ,lastname;

6.查询语句基础结构



[*]select对应投影Π
[*]from对应笛卡尔积
[*]where对应选择σ


含义:



[*]为from子句列出的关系产生笛卡尔积
[*]在(1)的结果上应用where子句中指定的谓词(条件)
[*]对于(2)中的元组,输出select子句中指定的属性



[*]
[*]
[*]
select *(属性1,属性2,...)from 关系名1,关系名2,...where 条件1 and 条件2 and ...;


[*]
[*]
[*]
select id,name,salaryfrom instructor2where salary>4000;

结果如下 :


https://p9.pstatp.com/large/pgc-image/e71f1215e9ea45f29fbe64f105270d13


7.去重操作(distinct)


对于一些属性来说,在某些元组中存在相同的值,偶然我们需要对结果去重,得到正确答案。



[*]
[*]
[*]
select distinct 属性名from 关系名where 条件

当我们想要查察系名时,多个老师可能位于同一个系,不去重将产生下列结果:


https://p1.pstatp.com/large/pgc-image/beb7a6de58514b7a8a6877e99b14316c


显然这不是我们想要的答案。我们只需要知道存在哪些系,而无需知道个数:


https://p1.pstatp.com/large/pgc-image/b5cc292aa864484da917a372adc6fc8a


8.更名操作(as)


(1)长处



[*]方便:长名字变短名字,便于书写语句。
[*]同一关系笛卡尔积:区分属性。


(2)对属性


(3)对关系


[*]
[*]
[*]
select 属性 as 属性别名from 关系名where 条件


[*]
[*]
[*]
select 属性from 关系名 as 关系别名where 条件

属性别名



[*]
[*]
[*]
select name as instructor_name,salaryfrom instructor2where salary>3500;

结果如下 :


https://p1.pstatp.com/large/pgc-image/01d8f2a803444ec7b94b5719d975b794


关系别名



[*]
[*]
[*]
select i1.id,i2.namefrom instructor2 as i1,instructor2 as i2where i1.id=i2.id and i2.salary>3500;

结果如下:


https://p1.pstatp.com/large/pgc-image/9f3821831fdf43af81c22841537256bc


9.字符串运算(like)



[*]SQL利用一对单引号来标示字符串,例‘math’。
[*]百分号(%):匹配任意子串
[*]下划线(_):匹配任意一个字符



[*]
[*]
[*]
select 属性from 关系名where 属性 like '字符形式';


[*]
[*]
[*]
select *from instructor2where salary like '%0_.%';

结果如下 :


https://p3.pstatp.com/large/pgc-image/f0c0a2af383447bebe620d057e65545f


10.显示次序(order by)



[*]默认升序:asc
[*]降序:desc



[*]
[*]
[*]
[*]
select 属性from 关系名where 条件order by 属性 升序/降序;


[*]
[*]
[*]
select *from instructor2order by salary desc;

结果如下:


https://p1.pstatp.com/large/pgc-image/e25050b402ec4b95a2aa2cf95d3983bc


11.betweenand


属性值介于某个范围内



[*]
[*]
[*]
select *from instructor2where 属性名 between ... and ... ;


[*]
[*]
[*]
select *from instructor2where salary between 3000 and 6000;

结果如下:


https://p1.pstatp.com/large/pgc-image/a5d10f06de1447cbab774fd878d1903f


12.分组聚集(group by)



[*]聚集函数:均匀值(avg)、最小值(min)、最大值(max)、总和(sum)、计数(count)。
[*]出如今select语句中但没有被聚集的属性只能是出如今group by子句中的属性。
[*]错误查询



[*]
[*]
[*]
select dept_name,id,avg(salary)from instructor2group by dept_name;

结果如下:


https://p1.pstatp.com/large/pgc-image/b1b2a26a7df44c94a0c4852b15c4def9


13.having子句(出现group by时利用)



[*]有group by时,select 和 having子句中出现的属性有所限制。
[*]任何出如今having子句中,但没有被聚集的属性必须出如今group by子句中。
[*]正确查询



[*]
[*]
[*]
[*]
select dept_name,avg(salary) as avg_salaryfrom instructor2group by dept_namehaving avg(salary)>3000

结果如下:


https://p1.pstatp.com/large/pgc-image/e5980c812df44b4b84ccc732f94bebac


14.集合成员资格



[*]in:测试元组是否是集合的成员
[*]not in:测试元组是否不是集合的成员
[*]in和 not in 操作符用于枚举集合。



[*]
[*]
[*]
select *from instructor2where name not in('ai','ye','er');

结果如下 :


https://p9.pstatp.com/large/pgc-image/e6b7a44cf07d472e8a7eb7f6a0cf4261


留意:内层查询语句的select对应的属性应与外层查询语句的where对应的属相同。



[*]
[*]
[*]
[*]
[*]
[*]
select *from instructor2where name in (select name            from instructor2            where salary>3000            );

相当于两层for循环


https://p9.pstatp.com/large/pgc-image/ff41495c869b4b4f84307469e678c030


结果如下:


https://p9.pstatp.com/large/pgc-image/e6b7a44cf07d472e8a7eb7f6a0cf4261


15.集合的比力


<ul>>some:至少比某一个要大
>all:比全部的都大。
>some、=some、all、=al、3000                );

结果如下:


https://p3.pstatp.com/large/pgc-image/b8dea10e5b5a44ccbf0cc56ce48a63ea


错误查询实例 :查询工资小于等于3000的西席姓名



[*]
[*]
[*]
[*]
[*]
[*]
select *from instructor2where name some(select name               from instructor2               where salary>3000                );

结果如下:


https://p1.pstatp.com/large/pgc-image/735c884b48144ba0a7a6ede8d5efff10


分析:内层查询中只要有一条元组的salary>3000并且name和外层查询name值不相等即可


查询工资大于3000的西席姓名



[*]
[*]
[*]
[*]
[*]
[*]
select *from instructor2where name =all(select name               from instructor2               where salary>3000                );

结果如下:


https://p9.pstatp.com/large/pgc-image/7a75c03275ec494daad001394f7c947d


分析:内层查询中满足salary>3000的全部元组的name都和外层查询name值相等才可以。


16.空关系测试(exists)


存在exists是相对于某一条元组,因而子查询中是select *。


查询在2009年秋季学期和2010年春季学期同时开课的全部课程



[*]
[*]
[*]
[*]
[*]
[*]
[*]
select course_idfrom section as Swhere semester=&#39;Fall&#39; and year=2009 and exists(select *               from section as T               where semester=&#39;Spring&#39; and year=2010               and S.course_id=T.course_id                );

17.删除某些元组


从instructor关系中删除与‘math’系西席有关的全部元组



[*]
[*]
delete from instructorwhere dept_name=&#39;math&#39;;

18.删除全部元组


[*]
delete from instructor;

19.删除的特殊环境


内层语句只有一条元组。删除工资低于大学均匀工资的西席纪录。



[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
delete from instructor2where salary < (            select avg(salary)            from instructor2      );select *from instructor2;

结果如下:


https://p1.pstatp.com/large/pgc-image/714a0e58c19347d59ce398df243f5343


20.插入一些元组



[*]insert into 关系名 values();一次只能插入一条元组。
[*]insert into 关系名 selec查询语句可一次性插入多条。



[*]
[*]
[*]
[*]
insert into instructor2    select id,name,dept_name,18000    from student    where dept_name=&#39;math&#39;;

21.更新元组



[*]
[*]
[*]
update 关系名set 语句where 条件;

只给工资低于7000元的西席涨工资。



[*]
[*]
[*]
update instructor2set salary=salary*1.05;where salary
页: [1]
查看完整版本: 数据库基础知识盘点 | 数据库入门必看