码迷,mamicode.com
首页 > 数据库 > 详细

Mysql综合案例

时间:2017-10-02 14:27:34      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:tab   val   arch   启动mysql   数据库   针对   家庭   _id   名称   

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;

 

Mysql综合案例

标签:tab   val   arch   启动mysql   数据库   针对   家庭   _id   名称   

原文地址:http://www.cnblogs.com/justdoitba/p/7619921.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!