SQL语言
1. 模式的创建
1 create schema "S-T" authorization wang;
2. 设置默认值
1 create table student1 ( 2 sno char(8), 3 sname char(8), 4 sbirth date default '0000-00-00', 5 ssex char(2) default '?', 6 sdept char(30) 7 );
3. 基本表的撤销
1 drop table sc; 2 drop table course; 3 drop table student;
注:撤销表时,数据库中不应该存在依赖于被删除表的其它表、视图、索引、存储过程等对象。
4. 基本表结构的修改
1 -- 增加“入学时间”列 2 alter table student1 add stime date; 3 -- 删除“入学时间”列 4 alter table student1 drop stime;
5. 查询(去除重复值)
1 -- 查询全部不同的生日 2 select distinct sbirth from student1;
7. 字符串匹配(LIKE)
1 -- 查询所有出生日期在1996的信息 2 select * 3 from student1 4 where sbirth like '1997%';
8. 三值逻辑(AND OR NOT)
1 -- 注意是 is null 或者 is not null 2 select * 3 from sc 4 where sno='980001' and 5 (grade>=60 or grade<60 or grade is null);
9. 输出排序
1 /* 2 查询所有学生信息 3 结果按所在系逆序排序, 4 同系的学生则按学号顺序排序 5 */ 6 select * 7 from student1 8 order by sdept desc,sno asc;
10. 输出列重命名
1 select sno 学号,sname 姓名,sbirth 出生日期 2 from student1 3 where sbirth like '1996%' 4 order by sno desc;
11. 聚集函数
1 /* 2 查询选修3号课程的学生人数,最高分和平均分 3 */ 4 select count(*),max(grade),avg(grade) 5 from sc 6 where cno='3';
12. 聚集函数和分组(GROUP BY,HAVING)
1 /* 2 查询选修了三门以上课程的学生学号及该生的平均成绩 3 */ 4 select sno,avg(grade) 5 from sc 6 group by sno 7 having count(*)>3;
13. select 语句的完整句法
14. 连接查询(多表)
1 /* 2 求数据结构课程成绩大于85分的学生姓名和成绩 3 结果按成绩降序排列 4 */ 5 select student.sname, grade 6 from student, sc, course 7 where student.sno = sc.sno and 8 sc.sno = course.cno and 9 course.cname = '数据结构' and 10 sc.grade > 85 11 order by grade desc;
注:当不同的表中有同名属性时,属性名前要用表名限定。
15. 自身连接
1 /* 2 求离散数学的先修课的先修课的课号与名称 3 */ 4 select z.cno, z.cname 5 from course x, course y, course z 6 where x.pcno = y.cno and 7 y.pcno = z.cno and 8 x.cname = '离散数学';
16. 外连接
需要查找两张表中一张表存在,另一张表不存在的时候使用外连接。
1 /* 2 查询所有学生的学号、姓名、所选课程的课程号以及这门课的成绩 3 left join 返回符合连接条件的数据行以及左边表中不符合条件的数据行 4 right join, full join 类似 5 */ 6 select student.sno, sname, cno, grade 7 from 8 student left outer join sc 9 on student.sno = sn.sno;
17. 嵌套查询
1 /* 2 查询与学号为95003的学生同系的学生学号和姓名 3 */ 4 select sno, sname 5 from student 6 where sdept = (select sdept 7 from student where sno='95003');