MYSQL干货(全)!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40530943/article/details/81024678

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';

退出:exitquit;

为用户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 双拼

 

例题 54 表拼接。

score,depttable,teachertable,coursetable 拼接成一张表,即综合以上 3 个拼接

 

四、数据表横向拼接即联接-JOIN

如下图所示,在 score 所有列的右边增加一列,显示每个学院的汉字名称。新闻 1-4

例题 6:显示新成绩表 score 中所有数据,但是其学院名称是数字,请同步显示其

deptname 相应的学院汉字名称

 


 

例题 8:查询学院名称 deptname 的最高者的代码

 

例题 9:查询学院名称中含有“影”的所有数据

 

猜你喜欢

转载自blog.csdn.net/qq_40530943/article/details/81024678