只会SQL增删改查?轻松弄懂关系型数据库的基础知识(下)

数据库技术
332
0
0
2022-10-07

单表查询

单表查询是指仅涉及一个数据库表的查询,比如选择一个表中的某些列值、选择一个表中的某些特定行等。单表查询是一种最简单的查询操作。

示例

查询全体学生的学号与姓名

如:select 学号,姓名 from student;

查询全体学生的出生年份

如:select 姓名,2018-年龄 from student;

多个查询条件查询

如:select * from student where 姓名='张三' and 年龄='16';

根据年龄倒序排序

如:select * from student order by 年龄 desc;

统计表中的记录数

如:select count(*) from student;

统计学生的平均年龄

如:select avg(年龄) from student;

统计不同名字的学生数(根据名字去重)

如:select count(distinct 姓名) from student;

对查询结果分组

如:select 学号,count(*) from selectcourse GROUP BY 学号;

使用having对分组结果进行筛选

如:select 学号,count(*) from selectcourse GROUP BY 学号 having 学号>2

常用查询条件

连接查询

卡氏积连接

不带连接谓词的连接。两个表的卡氏积即是两表中元组的交叉乘积,也即其中一表中的每一元组都要与另一表中的每一元组做拼接,因此结果表往往很大。

如:select * from student,course;

自然连接

如果是按照两个表中的相同属性进行等值连接,且目标列中去掉了重复的属性列,但保留了所有不重复的属性列,则称之为自然连接。

如:select * from student,selectcourse where student.学号= selectcourse.学号;

自身连接

自连接(self join)是SQL语句中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。

如员工表里有“员工号,管理者工号”,要查询即是员工又是管理者的员工

如:select a.姓名,a.员工号 from emp a,emp b where a.员工号=b.上司员工号;

复合条件连接

where子句中有多个条件的连接操作,称为复合条件查询

如:select * from student,selectcourse where student.学号= selectcourse.学号 and selectcourse.成绩>=60;

嵌套查询

带有in谓词的子查询

如单层嵌套

如:select * from student where 学号 in(select 学号 from selectcourse);

如多层嵌套

如:select * from student where 学号 in(select distinct 学号 from selectcourse where 课程名称 in(select 课程名称 from course));

如多层嵌套+复合条件查询

如:select * from student where 学号 in(select distinct 学号 from selectcourse where 课程名称 in(select 课程名称 from course)) and 年龄>=17;

带有exists谓词的子查询

exists代表存在量词∃。带有exists谓词的子查询不返回任何实际数据,它只产生逻辑真值“true”或逻辑假值“false”。

如:select * from student WHERE exists (select * from selectcourse where 学号=student.学号 and 年龄=20);

集合查询

每一个select语句都能获得一个或一组元组。若要把多个select语句的结果合并为一个结果,可用集合操作来完成。(注意:参加union操作的各数据项数目必须向他,对应项的数据类型也必须相同)

如:select 姓名,年龄 from student UNION select * from course;

数据更新

插入数据

如:insert into student VALUES(1,'张三',16);

修改数据

如:update student set 年龄=14 where 学号=1;

删除数据

如:delete from student where 学号=1;

如:delete from selectcourse where 学号=1;

修改表&删除表(慎用)

给表添加一列

如:alter table student add 性别 varchar(5);

删除表中某一列

如:alter TABLE student drop column 性别;

删除表

drop table emp;

drop table selectcourse;

drop table course;

drop table student;

drop view sc;