MYSQL登录:
根用户登录:mysql -h localhost -u root -p
名为a的用户登录:mysql -h localhost -u a -p
创建用户:
Creat user ‘name’ @’localhost’ identified by’password’;
授予权限:
grant select, insert, update, delete, create, drop, references, execute on *.* to 'username'@'localhost';
退出:exit、quit;
为用户username创建数据库score2018:
Mysql -h localhost -u username -p(登录)
Show databases;(显示数据库列表)
Create database score2018(创建数据库)
Use score2016;//使用数据库
在数据库中创建数据表:
其中studscore是名字;id不为空自增。
create table studscore ( id int not null auto_increment primary key, studno char(20), studname char(40), coursename char(80), ps1 double, ps2 double, examend double, totalscore double);
插入数据:
insert into 每次只能插入一组数据、想要插入多组数据可以同时执行多条命令。
选择:Select * from studscore;
查看字符集以及字符集修改:
Show variables like 'character_set_%';
set character_set_client=gbk;
set character_set_results=gbk;
set character_set_connection=gbk;
数字相关的查询:ID=9、ID<9、ID<=9、ID>9、ID>=9、ID!=9、id BETWEEN 10 AND 20 、id NOT BETWEEN 10 AND 20, 字符型相关查询:,如 studno、deptname、teachername、coursename,采用 LIKE 与 IN 二个运算符进行查询。
Poistion:测一个子字符串在另外一个字符串中的位置
Left:左边取n个字符
Right:右边取n个字符
substring :字串
Length:长度
rtrim;去掉右边的空格
一、MYSQL登录:mysql -h localhost -u root -p
二、添加用户:
use mysql;
创建用户“wangbo2018”密码为654321
create user'wangbo2018'@'localhost'identified by '654321';
授予其相应的权限:插入、修改、删除、创建等。
grant select, insert, update, delete, create, drop, references, execute on *.* to 'wangbo2018'@'localhost';
退出:exit;
三、为wangbo2018创建数据库score2018
mysql -h localhost -u wangbo2018 -p
显示表:show databases;
创建新的:create database score2018;
Use score2018;
查看表:show tables;
创建表:其中studscore是名字;id不为空自增。
插入数据,insert into 每次只能插入一组数据、想要插入多组数据可以同时执行多条命令。
获取名为studscore的内容Select * from studscore(name);
创建一个名为studscorps的新表及其内容
查看表中的内容。
四、查询(单表查询和多表查询)
将文件拷到数据的文件夹中
查看表中的内容:
查看sp中内容
出现乱码,修改字符集
字体正常
数字相关的查询:ID=9、ID<9、ID<=9、ID>9、ID>=9、ID!=9、id BETWEEN 10 AND 20 、id NOT BETWEEN 10 AND 20, 字符型相关查询:,如 studno、deptname、teachername、coursename,采用 LIKE 与 IN 二个运算符进行查询。
Poistion:测一个子字符串在另外一个字符串中的位置
Left:左边取n个字符
Right:右边取n个字符
substring :字串
Length:长度
rtrim;去掉右边的空格
数字相关操作图如下:
字符相关操作如下:
%任意字符,_单个字符;
1:找出学院名称中含有“影”的所有学生的成绩数据。
2、从 scoreorigin 找出学院名称中前 2 个字为“新闻”的所有学生。 前一个字呢?前 3 个字呢?前 5 个字呢? 可将 deptname 换成 char 型的其他字段,如 studno, studname,teachername,coursename. 不能是数值型字段,如 testscore1 是不可以的。
3:从 scoreorigin 找出学院名称中最后 4 个字为“艺术学院”的所有学生。 最后 1 个字呢?最后 2 个字呢?最后 5 个字呢?
5 、可将 deptname 换 成 char 型 的 其 他 字 段 , 如 studno, studname,teachername,coursename. 不能是数值型字段,如 testscore1 是不可以的。
6、从 scoreorigin 找出学院名称中第 8 字起,连续2个字为“艺术”的所有学生。 SELECT * FROM scoreorigin WHERE SUBSTRING(deptname,8,2)='艺术'
7、如果想找出“传播”二个字,那么这个语句要如何写? SELECT * FROM scoreorigin WHERE SUBSTRING(deptname,____,2)='传播'
8:测试每个人姓名的长度 SELECT studno,trim(studname) as studname ,LENGTH(studname) as lenname FROM scoreorigin
9、显示 scoreorigin 表中,每位同学所在学院的长度、课程的长度、老师姓名的长度。
10 将 score 的记录显示成如下形式
SELECT studno,studname,CONCAT(studname,'(',studno,')'), CONCAT(teachername, '(',coursename,')'), testscore1 FROM scoreorigin 将多个字符串拼接成一个 CONCAT(s1,s2,s3,...)
11:将 teachertable 表中 teacherno,teachername 拼接一块,与 score 表的相关信息显示 在一块,效果如下图所示。
12、将 depttable 表中 deptno,deptname 拼接一块,与 score 表的相关信息上图类似的 效果。
13:将 coursetable 表中 courseno,coursename 拼接一块,与 score 表的相关信息上图类 似的效果。
数学函数操作如下:
1、“期中成绩与期中考试的平均成绩上下相差 6 分以内”
|a-b|<=6
-6<=a-b<=6
a-b<=6 AND a-b>=-6
a-b<=6 AND b-a>=6
求绝对值的函数是有吗? 有,不建议大家使用,据说效率不高。
select * from scoreorigin where abs(middlescore-(select avg(middlescore) from scoreorigin))<=6;
Abs求绝对值,avg求平均数
2 期中成绩与期中考试最小值成绩上下相差 10 分以内
3期中成绩与期中考试最大值成绩少 10 分以内
日期函数操作如下:
1、今夕是何日?
2、时分秒?
3、年月日
4、星期及天数
5、300 天以后是星期几?
数据汇总
一、统计各组的记录数-count()
例题 1:统计各学院的人数
use score20160507new;
SELECT deptname,count(deptname) FROM scoreorigin group by deptname;
练习 1:统计各门课的人数
SELECT coursename,count(coursename) FROM scoreorigin group by coursename;
练习 2:统计各位老师的人数
SELECT teachername,count(teachername) FROM scoreorigin group by teachername;
思考:统计各学院期末成绩在 90 分以上的人数呢?
SELECT * FROM scoreorigin WHERE endscore>90 ORDER BY deptname;
练习 3:统计各门课的期末成绩在 90 分以上的人数呢
练习 4:统计各位老师的期末成绩在 90 分以上的人数呢
练习 5:统计各门课的期中成绩在 90 分以上的人数呢
练习 6:统计各位老师的期中成绩在 90 分以上的人数呢?
二、统计各组的成绩总和--SUM(表达式)
例题 2:统计各学院的期末成绩的总和,期中成绩的总和。 尽管成绩的总和意义不大,但是总和除以人数,得到平均成绩。
练习 1:求各门课的期中成绩,期末成绩,总评成绩的分数总和
练习 2:统计各位老师的期中成绩,期末成绩,总评成绩的分数总和
练习 3:求各门课的期中成绩,期末成绩,总评成绩的,期末成绩在 90 分及以上的总和
练习 4:统计各位老师的期中成绩,期末成绩,总评成绩的期末成绩在 90 分及以上的 总和 前面求出了各学院的人数,这里求出了总分,二者相除得到平均成绩?请问如何求呢?
练习 1:求各门课的期中成绩,期末成绩,总评成绩的分数平均值
练习 2:统计各位老师的期中成绩,期末成绩,总评成绩的分数平均值
练习 1:求各门课的期中成绩,期末成绩,总评成绩的分数总和,各门课的人数
练习 2:统计各位老师的期中成绩大于或等于 60 的人数
练习 3:求各门课的期末成绩大于或等于 80 人数
练习 4:统计各位老师的期末成绩大 80 的人数
练习 5:求各门课(coursename)的总评成绩在大于等于 80 而小于 90 的人数
练习 6:统计各位老师(teachername)总评成绩在大于等于 80 而小于 90 的人数
三、统计各组的成绩均值--AVG(表达式)
求均值往往比求和、统计人数更普遍,而采用 sum()/count()求均值比较麻烦,因此需 要更高效的求均值的方法。可能不对!
例题 3:统计各学院的期末成绩的均值,期中成绩的平均分。
练习 1:求各门课的期中成绩,期末成绩,总评成绩的分数平均值
练习 2:统计各位老师的期中成绩,期末成绩,总评成绩的分数平均值
例题 4:统计各学院的期末成绩的均值,最终只显示平均值在 72 分以下的。
练习 1:求各门课的期中成绩分数平均值,显示平均值大 60 分以上
练习 2:求各门课的总评成绩的分数平均值,显示平均分在 70 分以上
练习 3:求各门课的期中成绩,总评成绩的分数平均值,显示总评平均分在 60 到 80 分 课程
练习 4:求各位老师的期中成绩分数平均值,显示平均值大 60 分以上
练习 5:求各位老师的总评成绩的平均值,显示平均分在 70 分以上
练习 6:求各位老师的期中成绩,总评成绩的平均值,显示总评平均分在 60 到 80 分的 老师。
四、最高:MAX(表达式),最低:MIN(表达式)
例题 5:统计各学院的期末成绩的最高分,最低分
再举一例:期末最高最低、总评最高最低
练习 1:求各门课的期中成绩分数最高分,最低分
练习 2:求各门课的总评成绩的分数最高分,最低分
练习 3:求各门课的期中成绩,总评成绩最高分,最低分
练习 4:求各位老师的期中成绩分数最高分,最低分
练习 5:求各位老师的总评成绩的最高分,最低分
练习 6:求各位老师的期中成绩,总评成绩的最高分,最低分。
例题 6:统计各学院的姓名的最高,最低者
汉字的最高与最低,是指其汉语拼音的最高与最低!
练习 1:求各门课的学生姓名的最高与最低者
练习 2:统计各位老师的课程名称的最高与最低者
子查询与多表联合查询
前面学习的寻找
“studname=(select max(studname) from scoreorigin )”,
在一个查询中 嵌套另一个查询,被嵌套的查询称为子查询。
今天推而广之,子查询的数据与父查询的数据可以来自不同的数据表,这其实是联合两 个数据表进行查询,还可以有其他联合方式。
Select 字段清单 FROM 表名 WEHRE 条件
五、子查询-in
查询中有查询称为子查询,可在 SELECT 语句的字段中出现查询,如同步显示最大值、 平均值,也可在 WHERE 中出现查询,如期末分数比最高分少 10 分的情况。
例题 1:查询姓名的最高者所有数据
例 2:找出学院名称中含有“影”的所有学生的成绩数据
例题 7:查询姓名的最高者所有数据
练习:
0、期末成绩最高者所有数据
1、查询课程名称最高者所有数据
2、查询教师名称最低者的所有数据
3、查询学院名称最高者的所有数据
4、查询期末成绩最高者的所有数据
5、查询期中成绩最低者的所有数据
6、查询总评成绩最高者的所有数据例题
8:查询期末考试成绩比期最高少 10 分以内的数据
练习:
1、查询测试 1 比最低分多 10 分以上
2、查询测试 2 比最高分少 10 分以上
3、查询测试 3 比最低分多 10 分以内
4、查询期中成绩比最高分少 10 分以下
5、查询期末大于最低分
6、查询总评成绩比最高分少 10 分以上,又高于平均分的所有
六、子查询-exists 存在 有
以上查询都是在一个表中进行,现在开始在多个表中查询。
例 3:从 teachertable 表中找出在 score 表中有课的老师的姓名
三、数据表横向拼接即联接-全连接
例题 4:显示新成绩表 score 中所有数据,但是其学院名称是数字,请同步显示其
deptname 相应的学院汉字名称
练习:
1、显示新成绩表 score 中所有数据,但是其老师名称是数字,请同步显示其相应的老
师汉字名称与老师代码
Score 表与 teachertable 双拼
2、显示新成绩表 score 中所有数据,但是其课程名称是数字,请同步显示其相应的课
程汉字名称与课程代码
Score 表与 coursetable 双拼
例题 5:4 表拼接。
将 score,depttable,teachertable,coursetable 拼接成一张表,即综合以上 3 个拼接
四、数据表横向拼接即联接-JOIN
如下图所示,在 score 所有列的右边增加一列,显示每个学院的汉字名称。新闻 1-4 下
次
例题 6:显示新成绩表 score 中所有数据,但是其学院名称是数字,请同步显示其
deptname 相应的学院汉字名称
例题 8:查询学院名称 deptname 的最高者的代码
例题 9:查询学院名称中含有“影”的所有数据