【mysql-02-4】使用文档-查询练习01

一、查询练习-数据准备  

1.1新建一个查询用的数据库:selectTest 

CREATE DATABASE selectTest;

选择 该 数据库!

USE selectTest;

1.2 建立数据表(学生表、课程表、成绩表、教师表) (页首)

1.2.1、学生表(student)

CREATE TABLE student( /*学生表*/

sno VARCHAR(20) PRIMARY KEY COMMENT'学生学号',

sname VARCHAR(20) NOT NULL COMMENT'学生姓名,不能为空',

ssex VARCHAR(10) NOT NULL COMMENT'学生性别',

sbirthday DATETIME COMMENT'学生生日-出生年月日',

class VARCHAR(20) COMMENT'学生所在的班级'

);

1.2.2、教师表(teacher)

CREATE TABLE teacher(

tno VARCHAR(20) PRIMARY KEY COMMENT'教师编号',

tname VARCHAR(20) NOT NULL COMMENT'教师姓名',

tsex VARCHAR(20) NOT NULL COMMENT'教师性别',

tbirthday DATETIME COMMENT'教师生日-出生年月日',

prof VARCHAR(20) NOT NULL COMMENT'教师职称',

depart VARCHAR(20) NOT NULL COMMENT'教师所在部门'

);

1.2.3、课程表(course)

CREATE TABLE course(

cno VARCHAR(20) PRIMARY KEY COMMENT'课程号',

cname VARCHAR(20) NOT NULL COMMENT'课程名称',

tno VARCHAR(20) NOT NULL COMMENT'教师编号 外键关联teacher表',

FOREIGN KEY(tno) references teacher(tno)

);

-- 报错:Failed to open the referenced table 'teacher'

-- 需要先创建teacher表!

1.2.4、成绩表(score)

CREATE TABLE score (

sno VARCHAR(20) not null COMMENT'成绩表的编号,依赖学生学号',

cno VARCHAR(20) not null COMMENT'课程号 依赖于 课程表中的cno',

degree decimal COMMENT'成绩',

foreign key(sno) references student(sno),

foreign key(cno) references course(cno),

primary key(sno, cno) /*设置联合主键*/

);

1.3 往数据表中添加数据 (页首)

1.3.1、添加学生信息

-- 添加学生信息---学生表数据

INSERT INTO student VALUES('101','曾华','男','1977-09-01','95033');

INSERT INTO student VALUES('102','匡明','男','1975-10-02','95031');

INSERT INTO student VALUES('103','王丽','女','1976-01-23','95033');

INSERT INTO student VALUES('104','李军','男','1976-02-20','95033');

INSERT INTO student VALUES('105','王芳','女','1975-02-10','95031');

INSERT INTO student VALUES('106','陆军','男','1974-06-03','95031');

INSERT INTO student VALUES('107','王尼玛','男','1976-02-20','95033');

INSERT INTO student VALUES('108','张全蛋','男','1975-02-10','95031');

INSERT INTO student VALUES('109','赵铁柱','男','1974-06-03','95031');

1.3.2、添加教师信息

-- 添加教师信息---教师表数据

INSERT INTO teacher VALUES('804','李诚','男','1958-12-02','副教授','计算机系');

INSERT INTO teacher VALUES('856','张旭','男','1969-03-12','讲师','电子工程系');

INSERT INTO teacher VALUES('825','王萍','女','1972-05-05','助教','计算机系');

INSERT INTO teacher VALUES('831','刘冰','女','1977-08-14','助教','电子工程系');

1.3.3、添加课程信息

-- 添加课程信息---课程表数据

INSERT INTO course VALUES('3-105','计算机导论','825');

INSERT INTO course VALUES('3-245','操作系统','804');

INSERT INTO course VALUES('6-166','数字电路','856');

INSERT INTO course VALUES('9-888','高等数学','831');

 

1.3.4、添加成绩信息

-- 添加成绩信息---成绩表数据

INSERT INTO score VALUES('103','3-245','86');

INSERT INTO score VALUES('105','3-245','75');

INSERT INTO score VALUES('109','3-245','68');

INSERT INTO score VALUES('103','3-105','92');

INSERT INTO score VALUES('105','3-105','88');

INSERT INTO score VALUES('109','3-105','76');

INSERT INTO score VALUES('103','6-166','85');

INSERT INTO score VALUES('105','6-166','79');

INSERT INTO score VALUES('109','6-166','81');

 

   

二、查询练习-1-10 

查询练习 

  • 查询student表的所有记录。
  • 查询student表中的所有记录的sname、ssex和class列。
  • 查询教师所有的单位,即不重复的depart列。
  • 查询score表中成绩在60到80之间的所有记录。
  • 查询score表中成绩为85,86或88的记录。
  • 查询student表中"95031"班或性别为"女"的同学记录。
  • 以class降序查询student表的所有记录。
  • 以cno升序、 degree降序查询score表的所有记录。
  • 查询"95031"班的学生人数。
  • 查询score表中的最高分的学生学号和课程号。(子查询或者排序)

01、查询student表的所有记录  

select * from student;

02、查询student表中的所有记录的snamessexclass  

select sname, ssex, class from student;

03、查询教师所有的单位,即不重复的depart 

select distinct depart from teacher;

04、查询score表中成绩在6080之间的所有记录  

1、查询区间(between...and...

查询区间:between...and... 闭区间 [min, max]

select * from score where degree between 60 and 80;

2、运算符比较(>、<)

select * from score where degree > 60 and degree < 80;

05、查询score表中成绩为858688的记录  

表示或者关系的查询。

select * from score where degree in(85, 86, 88);

06、查询student表中"95031 "班或性别为"女"的同学记录  

or 表示 或者

select * from student where class='95031' or ssex='女';

07、以class降序查询student表的所有记录  

升序(asc;默认状态)、降序(desc)

1、降序(desc)

select * from student order by class desc; /*desc降序*/

2、升序(asc;默认状态)

select * from student order by class; /*desc降序;asc默认升序*/

select * from student order by class asc; /*desc降序;asc默认升序*/

08、以cno升序、 degree降序查询score表的所有记录 

select * from score order by cno asc, degree desc;

09、查询"95031"班的学生人数  

select count(*) from student where class = '95031';

10、查询score表中的最高分的学生学号和课程号(子查询或者排序)  

1、子查询(复合语句)

select sno, cno from score where degree = ( select max(degree) from score ) ; /*复合语句*/

查询练习-10过程解析

10、查询score表中的最高分的学生学号课程号。(子查询或者排序)

1、子查询-过程解析

select sno, cno from score where degree = ( select max(degree) from score ) ; /*复合语句*/

  • 找到最高分【select max(degree) from score)】
  • 找最高分的sno、cno【select sno, cno from score where degree = ( select max(degree) from score) ;】

2、排序

limit x, y; 【x:开始位置;y:取多少】【limit (从那开始取),(取到多少结束);】

第一个实参 表示 从第几条开始查,第二个实参 表示 查几条!

select sno, cno from score order by degree;

select sno, cno, degree from score order by degree;

select sno, cno, degree from score order by degree limit 0, 1;

select sno, cno, degree from score order by degree desc limit 0, 1;

参考文献 

https://blog.csdn.net/weixin_44949135/article/details/106694730

https://github.com/hjzCy/sql_node/blob/master/mysql/MySQL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.md

   

   

原文地址:https://www.cnblogs.com/yifanrensheng/p/14352521.html