Mysql综合案例
Mysql综合案例
考核要点:创建数据表、单表查询、多表查询
已知,有一个学生表student和一个分数表score,请按要求对这两个表进行操作。student表和score分数表的表结构分别如表1-1和表1-2所示。
表1-1student表结构
字段名 数据类型 主键 外键 非空 唯一 自增 字段描述
stu_id INT(10) 是 否 是 是 否 学号
stu_name VARCHAR(20) 否 否 是 否 否 姓名
sex VARCHAR(2) 否 否 否 否 否 性别
birth YEAR 否 否 否 否 否 出生年份
department VARCHAR(20) 否 否 是 否 否 院系
addr VARCHAR(50) 否 否 否 否 否 家庭住址
表1-2score表结构
字段名 数据类型 主键 外键 非空 唯一 自增 字段描述
score_id INT(10) 是 否 是 是 是 编号
stu_id INT(10) 否 否 是 否 否 学号
c_name VARCHAR(20) 否 否 否 否 否 课程名
grade INT(10) 否 否 否 否 否 分数
表1-1和表1-2中分别对student表和score表中字段的数据类型、主键、外键、非空、唯一约束、自增和字段描述做了说明,其中这两个表中都有stu_id字段,用于表示学号,该字段使student表和score表实现了关联。
(1)启动MySQL服务器。
如果MySQL服务器是未启动的状态,可以在cmd窗口中,通过命令来启动服务器,具体命令如下所示:
net start mysql
(2)登录MySQL服务器。
在cmd窗口中登录MySQL服务器,用户名为root,密码为root,具体命令如下所示:
mysql -uroot -proot
(3)创建数据库。
创建一个名为my_db的数据库,具体SQL语句如下:
create database my_db;
(4)切换当前数据库。
将名为my_db的数据库切换为当前数据库,具体SQL语句如下:
use my_db;
(5)创建学生表student,插入6条记录。
创建学生表student,SQL语句如下所示:
CREATE TABLE student (
stu_id INT(10) PRIMARY KEY,
stu_name VARCHAR(20)NOT NULL,
sex VARCHAR(2),
birth YEAR,
department VARCHAR(20),
addr VARCHAR(50)
);
上述SQL语句执行成功后,表示学生表student创建成功,这时,使用INSERT语句向表中插入数据,SQL语句如下所示:
INSERT INTO student VALUES
( 901,'张飞', '男',1985,'计算机系', '河北省涿州市'),
( 902,'关羽', '男',1986,'中文系', '山西省运城市'),
( 903,'貂蝉', '女',1990,'中文系', '山西省忻州县'),
( 904,'刘备', '男',1990,'英语系', '河北省涿州市'),
( 905,'小乔', '女',1991,'英语系', '安徽省潜山市'),
( 906,'赵云', '男',1988,'计算机系', '河北省正定市');
上述INSERT语句执行成功后,向表中插入了6条记录,分别是学生的学号、姓名、性别、出生年份、院系和出生地址,这时,使用SELECT语句查看stu表中的数据信息
mysql> select * from student;
从查询结果可以看出,在当前的数据库中创建了一个student表,并成功插入了6条记录,student表的主键为id。
(6)创建分数表score,插入10条记录。
首先创建分数表score,SQL语句如下所示:
CREATE TABLE score (
score_id INT(10) PRIMARY KEY AUTO_INCREMENT ,
stu_id INT(10) NOT NULL ,
c_name VARCHAR(20) ,
grade INT(10)
);
上述SQL语句执行成功后,表示分数表score创建成功,接下来,使用INSERT语句向score表中插入数据,SQL语句如下所示:
INSERT INTO score(stu_id,c_name,grade) VALUES(901, '计算机',98),
(901, '英语', 80),(902, '计算机',65),(902, '中文',88),
(903, '中文',95),(904, '计算机',70),(904, '英语',92),
(905, '英语',94),(906, '计算机',90),(906, '英语',85);
上述SQL语句执行成功后,向表中插入了10条记录,分别是学生的学号、姓名、所在学校和报考的学校名称,这时,使用SELECT语句查看score表中的数据信息:
mysql> select * from score;
从查询结果可以看出,score表创建成功,同时向表中插入了10条记录,score表的主键为score_id。
(7)从student表中查询计算机系和英语系学生的信息。
该操作属于单表查询操作,SQL语句如下所示:该操作属于单表查询操作,SQL语句如下所示:
mysql> SELECT * FROM student
-> WHERE department IN ('计算机系','英语系');
上述SQL语句执行成功后,顺利查询出了计算机系和英语系的学生的信息,上面的SQL语句使用了in操作符,针对本操作其实还有另外一种查询方式,SQL语句如下所示:
mysql> SELECT * FROM student
-> WHERE department='计算机系' OR department='英语系';
从查询结果可以看出,使用or操作符也得到了正确的查询结果。
(8)从student表中查询年龄25~28岁的学生信息。
该操作属于单表查询操作,SQL语句如下所示:
mysql> SELECT stu_id,stu_name,sex,
-> 2016-birth AS age,department,addr
-> FROM student
-> WHERE 2016-birth BETWEEN 25 AND 28;
上述SQL语句中,2016-birth表示当前年份减去学生出生年份,得到的就是学生的年龄,并使用as操作符为列取别名为age,BETWEEN... AND...操作符用于表示某个范围之间的数。从查询结果可以看出,顺利得到要求的结果。
针对本操作也可以不使用BETWEEN... AND...操作符,改为使用关系运算符来对年龄范围进行限制,SQL语句如下所示:
mysql> SELECT stu_id,stu_name,sex,
-> 2016-birth AS age,department,addr
-> FROM student
-> WHERE 2016-birth>=25 AND 2016-birth<=28;
(9)在student表中统计每个院系各有几个学生。
该操作属于单表查询操作,使用GROUP BY 分组查询,通过院系department来分组, SQL语句如下所示:
mysql> SELECT department AS "院系", COUNT(id) AS "人数"
-> FROM student
-> GROUP BY department;
从上述查询结果可以看出,每个院系的学生均为2个人。
(10)查询每个院系学生中的最高分。
该操作属于多表查询操作,SQL语句如下所示:
mysql> SELECT MAX(grade),department
-> FROM score
-> LEFT JOIN student ON score.stu_id = student.st
-> GROUP BY department;
上述SQL语句执行成功后,顺利查询出了每个院系学生的最高分。
(11)查询学生貂蝉的考试科目(c_name)和考试成绩(grade)
该操作属于多表查询操作,SQL语句如下所示:
mysql> SELECT stu_name,c_name,grade
-> FROM score
-> LEFT JOIN student ON score.stu_id = student.stu_id
-> WHERE stu_name= "貂蝉";
(12)查询计算机成绩低于95的学生信息。
SQL语句如下:
mysql> SELECT stu_name,sex,birth,addr,c_name,grade
-> FROM student
-> LEFT JOIN score ON score.stu_id = student.stu_id
-> WHERE c_name = "计算机" AND grade<95;
(13)查询同时参加计算机和英语考试的学生的信息。
SQL语句如下:
mysql> SELECT *
-> FROM student
-> WHERE stu_id =ANY(
-> SELECT stu_id
-> FROM score
-> WHERE stu_id IN (SELECT stu_id
-> FROM score WHERE c_name= '计算机')
-> AND c_name= '英语' );
(14)从student表和score表中分别查询出学生的学号,然后合并查询结果。
SQL语句如下:
mysql> SELECT stu_id FROM student
-> UNION
-> SELECT stu_id FROM score;
(15)查询姓张或者姓王的同学的个人信息、院系和考试科目及成绩。
SQL语句如下:
mysql> SELECT student.stu_id, stu_name,sex,birth,
-> addr, c_name,grade
-> FROM student, score
-> WHERE (stu_name LIKE '张%' OR stu_name LIKE '王%')
-> AND (student.stu_id=score.stu_id) ;
(16)查询山西省的学生的姓名、出生年份、院系、考试科目及成绩。
SQL语句如下:
mysql> SELECT stu_name,birth,department, c_name,grade
-> FROM student, score
-> WHERE addr LIKE '山西%'
-> AND student.stu_id=score.stu_id;
最新文章
- Shell 字符串的截取
- thinkphp 杂项(3.2.3)
- JS学习知我见(常用建站代码)
- jQuery导航切换功能
- POJ 2195 	Going Home 最小费用最大流 尼玛,心累
- svn 回滚到上一个版本shell 脚本
- 时间函数 date strtotime
- Spark相比Hadoop MapReduce的特点
- [iOS微博项目 - 2.0] - OAuth授权3步
- YII 验证邮箱和QQ号码
- 什么是测试开发工程师-google的解释
- 5.For loops
- centos7安装mongodb3.4
- 【转】jenkins自动化部署项目7 -- 新建job(将服务代码部署在windows上)
- FreeSWITCH添加中文语音
- Android Studio向项目添加C/C++原生代码教程
- JavaScript常见的创建对象的几种方式
- webpack4 自学笔记三(提取公用代码)
- 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
- 2016.6.21——Add Binary
热门文章
- iOS 头文件导入@class注意事项
- LINQ架构简单描述
- 使用嵌入文档Here Documents
- 基于jquery的json转table插件jsontotable
- win8.1 64位安装oracle10g客户端心得
- eclipse 里的tomcat一直处于starting状态
- iOS开发小技巧--取消按钮的选中状态
- 解决Spring框架的Dao层改用@Repository注解,无法使用JdbcDaoSupport的问题
- centos7+ docker1.12 实践部署docker及配置direct_lvm
- JetBrains PyCharm 4.0.4 key