联系客服
客服二维码

联系客服获取更多资料

微信号:LingLab1

客服电话:010-82185409

意见反馈
关注我们
关注公众号

关注公众号

linglab语言实验室

回到顶部
数据库基础知识盘点 | 数据库入门必看

292 阅读 2020-08-03 10:34:02 上传

以下文章来源于 语料数据库



五个基本的关系代数操作



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


数据库语言四大类



  • 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));


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



    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);


      结果如下:



      3.删除所有元组


      delete from 关系名;


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



      4.删除关系


      drop table 关系名; 


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



      5.属性操作


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


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



        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;


              结果如下 :



              7.去重操作(distinct)


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


                select distinct 属性名from 关系名where 条件


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



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



                8.更名操作(as)


                (1)优点


                • 方便:长名字变短名字,便于书写语句。

                • 同一关系笛卡尔积:区分属性。


                (2)对属性


                (3)对关系


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


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


                    属性别名


                      select name as instructor_name,salaryfrom instructor2where salary>3500;


                      结果如下 :



                      关系别名


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


                        结果如下:



                        9.字符串运算(like)


                        • SQL使用一对单引号来标示字符串,例‘math’。

                        • 百分号(%):匹配任意子串

                        • 下划线(_):匹配任意一个字符


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


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


                            结果如下 :



                            10.显示次序(order by)


                            • 默认升序:asc

                            • 降序:desc


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


                                select *from instructor2order by salary desc;


                                结果如下:



                                11.between⋯and⋯


                                属性值介于某个范围内


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


                                    select *from instructor2where salary between 3000 and 6000;


                                    结果如下:



                                    12.分组聚集(group by)


                                    • 聚集函数:平均值(avg)、最小值(min)、最大值(max)、总和(sum)、计数(count)。

                                    • 出现在select语句中但没有被聚集的属性只能是出现在group by子句中的属性。

                                    • 错误查询


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


                                      结果如下:



                                      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


                                        结果如下:



                                        14.集合成员资格


                                        • in:测试元组是否是集合的成员

                                        • not in:测试元组是否不是集合的成员

                                        • in和 not in 操作符用于枚举集合。 


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


                                          结果如下 :



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


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


                                            相当于两层for循环 



                                            结果如下:



                                            15.集合的比较


                                            • >some:至少比某一个要大

                                            • >all:比所有的都大。

                                            • >some、=some、<=some、<>some、>

                                            • >all、=all、、>

                                            • =some等价于in,<>some并不等价于not in。

                                            • <>all等价于not in,=all不等价于in。


                                            查询工资大于3000的教师姓名


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


                                              结果如下:



                                              查询工资小于等于3000的教师姓名


                                                select *from instructor2where name <>all(select name                 from instructor2                 where salary>3000                );


                                                结果如下:



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


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


                                                  结果如下:



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


                                                  查询工资大于3000的教师姓名


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


                                                    结果如下:



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


                                                    16.空关系测试(exists)


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


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


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


                                                      17.删除某些元组


                                                      从instructor关系中删除与‘math’系教师有关的所有元组


                                                        delete from instructorwhere dept_name='math';


                                                        18.删除所有元组


                                                          delete from instructor;


                                                          19.删除的特殊情况


                                                          内层语句只有一条元组。删除工资低于大学平均工资的教师记录。


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


                                                            结果如下:



                                                            20.插入一些元组


                                                            • insert into 关系名 values(⋯);一次只能插入一条元组。

                                                            • insert into 关系名 selec查询语句可一次性插入多条。


                                                              insert into instructor2    select id,name,dept_name,18000    from student    where dept_name='math';


                                                              21.更新元组


                                                                update 关系名set 语句where 条件;


                                                                只给工资低于7000元的教师涨工资。


                                                                  update instructor2set salary=salary*1.05;where salary<7000;


                                                                  给工资低的教师涨5%,大于7000的涨3%。


                                                                    update instructor2set salary=case        when salary<=7000 then salary*1.05        else salary*1.03    end


                                                                    点赞
                                                                    收藏
                                                                    表情
                                                                    图片
                                                                    附件