单表查询
单表查询是指仅涉及一个数据库表的查询,比如选择一个表中的某些列值、选择一个表中的某些特定行等。单表查询是一种最简单的查询操作。
示例
查询全体学生的学号与姓名
如: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;