Ψ

You are only young once, Practice makes perfect.

通过一个案例学习SQL语言

本文通过一个具体案例来学习如何使用SQL建立数据库和表,以及如何进行各种从简单到复杂的查询(数据库使用的为MySQL)。

数据库建立及数据如下:

create database if not exists sct;
use sct;

create table student(
	s_no varchar(8) primary key,
	s_name varchar(10),
	s_gender varchar(2),
	s_age int,
	d_no varchar(2),
	s_class varchar(6)
);

create table dept(
	d_no varchar(2) primary key,
	d_name varchar(10),
	d_dean varchar(10)
);

create table course(
	c_no varchar(3) primary key,
	c_name varchar(30),
	c_hours int,
	c_credit float,
	t_no varchar(3)
);

create table teacher(
	t_no varchar(3) primary key,
	t_name varchar(10),
	d_no varchar(2),
	t_salary float
);

create table sc(
	s_no varchar(8),
	c_no varchar(3),
	score float
);

insert into student values('98030101', '张一', '男', 20, '03', '980301');
insert into student values('98030102', '张小二', '女', 20, '03', '980301');
insert into student values('98030103', '张三', '男', 19, '03', '980301');
insert into student values('98040201', '钱4', '男', 20, '04', '980402');
insert into student values('98040202', '赵5', '男', 21, '04', '980402');
insert into student values('98040203', '孙6', '女', 19, '04', '980402');

insert into dept values('01', '机电系', '李1');
insert into dept values('02', '能源系', '李2');
insert into dept values('03', '计算机系', '李3');
insert into dept values('04', '自动控制系', '李4');

insert into course values('001', '数据库', '001', 40, 6);
insert into course values('002', '高等数学', '002', 80, 12);
insert into course values('003', '数据结构', '003', 40, 6);
insert into course values('004', '编译原理', '004', 40, 6);
insert into course values('005', 'C语言', '005', 30, 4.5);

insert into teacher values('001', '李明', '01', 1200);
insert into teacher values('002', '教师2', '03', 1400);
insert into teacher values('003', '教师3', '03', 1600);
insert into teacher values('004', '教师4', '04', 1100);
insert into teacher values('005', '教师5', '02', 1200);

insert into sc values('98030101', '001', 92);
insert into sc values('98030101', '002', 85);
insert into sc values('98030101', '003', 88);
insert into sc values('98040202', '001', 90);
insert into sc values('98040202', '002', 80);
insert into sc values('98040202', '003', 55);
insert into sc values('98050104', '003', 56);
insert into sc values('98030102', '001', 54);
insert into sc values('98030102', '002', 85);
insert into sc values('98030102', '003', 48);

# 检索学生表中所有学生的信息
select * from student;

# 检索学生表中所有学生的姓名及年龄
select s_name,s_age from student;

# 检索学生表中所有年龄小于等于19岁的学生的年龄及姓名
select s_age,s_name from student where s_age<=19;

# 检索教师表中所有工资少于1500元或者工资大于2000元 并且是03系的教师姓名
select t_name from teacher where (t_salary<1500 or t_salary>2000) and d_no='03';

# 求或者学过001号课程, 或者学过002号课程的学生的学号
select distinct s_no from sc where c_no='001' or c_no='002';

# 求既学过001号课程, 又学过002号课程的学生的学号

# 在选课表中,检索成绩大于80分的所有学号

# 按学号由小到大的顺序显示出所有学生的学号及姓名

# 检索002号课大于80分的所有同学学号并按成绩由高到低顺序显示

# 检索所有姓张的学生学号及姓名

# 检索名字为张某某的所有同学姓名

# 检索名字不姓张的所有同学姓名

# 按“001”号课成绩由高到低顺序显示所有学生的姓名

# 按‘数据库’课成绩由高到低顺序显示所有同学姓名

# 求有薪水差额的任意两位教师

# 求年龄有差异的任意两位同学的姓名

# 求‘001’号课程有成绩差的任意两位同学

# 求既学过“001”号课又学过 “002”号课的所有学生的学号

# 求“001”号课成绩比“002”号课成绩高的所有学生的学号

# 列出没学过李明老师讲授课程的所有同学的姓名

# 新建Table: SCt(S#, C#, Score), 将检索到的成绩及格同学的记录新增到该表中

# 追加成绩优秀同学的记录

# 新建Table: St(S#, Sname, avgScore), 将检索到的同学的平均成绩新增到该表中

# 删除SC表中所有元组

# 删除98030101号同学所选的所有课程

# 删除自动控制系的所有同学

# 删除有四门不及格课程的所有同学

# 将所有教师工资上调5%

# 将所有计算机系的教师工资上调10%

# 当某同学001号课的成绩低于该课程平均成绩时,将该同学该门课成绩提高5%

# 将张三同学001号课的成绩置为其班级该门课的平均成绩

# 在学生表Student(S#,Sname,Ssex,Sage,D#,Sclass)基础上增加二列Saddr, PID

# 将上例表中Sname列的数据类型增加两个字符

# 删除学生姓名必须取唯一值的约束

# 撤消学生表Student

# 撤消教师表Teacher

# 撤消SCT数据库

# 列出张三、王三同学的所有信息

# 列出选修了001号课程的学生的学号和姓名

# 求既学过001号课程, 又学过002号课程的学生的学号

# 列出没学过李明老师讲授课程的所有同学的姓名

# 求学过001号课程的同学的姓名

# 找出工资最低的教师姓名

# 找出001号课成绩不是最高的所有学生的学号

# 找出所有课程都不及格的学生姓名

# 找出001号课成绩最高的所有学生的学号

# 找出98030101号同学成绩最低的课程号

# 找出张三同学成绩最低的课程号

# 找出001号课成绩最高的所有学生的学号

# 找出98030101号同学成绩最低的课程号

# 找出张三同学成绩最低的课程号

# 求工资小于任一教师的教师姓名

# 检索选修了赵三老师主讲课程的所有同学的姓名

# 检索学过001号教师主讲的所有课程的所有同学的姓名

# 列出没学过李明老师讲授任何一门课程的所有同学的姓名

# 列出至少学过98030101号同学学过所有课程的同学的学号

# 求有差额(差额>0)的任意两位教师的薪水差额

# 依据学生年龄求学生的出生年份,当前是2015年

# 求教师的工资总额

# 求计算机系教师的工资总额

# 求数据库课程的平均成绩

# 求每一个学生的平均成绩

# 求每一门课程的平均成绩

# 求不及格课程超过两门的同学的学号

# 求不及格课程超过两门的同学的学号

# 求有10人以上不及格的课程号

# 求有两门以上不及格课程同学的学号及其平均成绩

# 求学过002号课的同学或学过003号课的同学学号

# 求既学过002号课,又学过003号课的同学学号

# 假定所有学生都有选课,求没学过002号课程的学生学号

# 找出年龄值为空的学生姓名

# 求所有教师的任课情况并按教师号排序(没有任课的教师也需列在表中)

# 求所有教师的任课情况(没有任课的教师也需列在表中)

#


未完待续……

发表评论:

搜索
«   2018年9月   »
12
3456789
10111213141516
17181920212223
24252627282930
最新留言
    文章归档
    控制面板
    您好,欢迎到访网站!
      查看权限
    • 订阅本站的 RSS 2.0 新闻聚合

    Powered By Z-BlogPHP 1.5.2 Zero

    Copyright Psizen.com. All Rights Reserved.