mysql中的sql基本操作

Posted rui0513

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中的sql基本操作相关的知识,希望对你有一定的参考价值。

数据库环境:Windows 10

数据库版本:mysql 5.7

一、请写出下列查询语句并操作
1、链接数据库
mysql -uroot -p

2、显示数据库版本
mysql --version;

3、查看当前所有数据库
show databases;

4、创建demo数据库,并设置字符集为utf8
CREATE DATABASE IF NOT EXISTS demo DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

5、选择使用demo数据库
use demo;

6、显示时间
select now();


二、在demo数据库下创建以下数据表
1、创建学生表student,并输入对应数据
create table if not exists student(
  sid int unsigned primary key auto_increment,
  name varchar(40) not null,
  gender varchar(10) not null,
  class_id int unsigned not null
);
insert into student values(‘1‘,‘张三‘,‘女‘,‘1‘);
insert into student values(‘2‘,‘李四‘,‘女‘,‘4‘);
insert into student values(‘3‘,‘王五‘,‘男‘,‘2‘);
insert into student values(‘4‘,‘赵六‘,‘女‘,‘3‘);
insert into student values(‘5‘,‘田七‘,‘女‘,‘5‘);
insert into student values(‘6‘,‘江北‘,‘男‘,‘10‘);
insert into student values(‘7‘,‘齐八‘,‘女‘,‘8‘);
insert into student values(‘8‘,‘魏九‘,‘女‘,‘9‘);
insert into student values(‘9‘,‘老石‘,‘男‘,‘7‘);
insert into student values(‘10‘,‘钱电‘,‘女‘,‘6‘);
insert into student values(‘11‘,‘张三‘,‘男‘,‘11‘);

2、创建教师表teacher,并输入对应数据
create table if not exists teacher(
  tid int unsigned primary key auto_increment,
  tname varchar(40) not null
);
insert into teacher values(‘1‘,‘赵老师‘);
insert into teacher values(‘2‘,‘钱老师‘);
insert into teacher values(‘3‘,‘孙老师‘);

3、创建课程表course,并输入对应数据
create table if not exists course(
  cid int unsigned primary key auto_increment,
  cname varchar(40) not null,
  teacher_id int unsigned not null
);
insert into course values(‘1‘,‘生物‘,‘1‘);
insert into course values(‘2‘,‘体育‘,‘2‘);
insert into course values(‘3‘,‘物理‘,‘3‘);

4、创建成绩表score,并输入对应数据
create table if not exists score(
  student_id int unsigned not null,
  course_id int unsigned not null,
  number int unsigned not null
);
insert into score values(‘1‘,‘1‘,‘80‘);
insert into score values(‘1‘,‘2‘,‘90‘);
insert into score values(‘1‘,‘3‘,‘99‘);
insert into score values(‘2‘,‘1‘,‘70‘);
insert into score values(‘2‘,‘2‘,‘60‘);
insert into score values(‘2‘,‘3‘,‘80‘);
insert into score values(‘3‘,‘1‘,‘80‘);
insert into score values(‘3‘,‘2‘,‘80‘);
insert into score values(‘3‘,‘3‘,‘75‘);
insert into score values(‘4‘,‘1‘,‘50‘);
insert into score values(‘4‘,‘2‘,‘30‘);
insert into score values(‘4‘,‘3‘,‘20‘);
insert into score values(‘5‘,‘1‘,‘76‘);
insert into score values(‘5‘,‘2‘,‘87‘);
insert into score values(‘6‘,‘1‘,‘31‘);
insert into score values(‘6‘,‘3‘,‘34‘);
insert into score values(‘7‘,‘2‘,‘89‘);
insert into score values(‘7‘,‘3‘,‘98‘);

5、查看当前数据库中所有的表
show tables;

6、查询所有授课老师的姓名
select tname from teacher;

7、查询班级每种性别有多少人
select gender, count(gender) as genderNum from student
group by gender;

8、查询“生物”课程比“物理”课程成绩高的所有学生的学号
select A.student_id, shengwu, wuli from (
  select student_id, number as shengwu from score
  left join course
  on score.course_id = course.cid
  where course.cname = ‘生物‘) as A
left join (
  select student_id, number as wuli from score
  left join course
  on score.course_id = course.cid
  where course.cname = ‘物理‘) as B
on A.student_id = B.student_id
where shengwu > if(isnull(wuli),0,wuli);

9、查询平均成绩大于60分的同学的学号和平均成绩
select student_id, round(avg(number),2) as avgScore from score
group by student_id
having avgScore > 60
order by avgScore desc;

10、查询所有同学的学号、姓名、选课数、总成绩; 语句进化过程
步骤一:找到目标所在的表
学号、姓名,存在于student
选课数、总成绩,存在于score

步骤二:两表创建内联
select * from student as st
inner join score as sc
on st.sid = sc.student_id;

步骤三:按照需求筛选显示数据
select st.sid, st.name, count(sc.course_id), sum(sc.number) from student as st
inner join score as sc
on st.sid = sc.student_id
group by st.sid;

11、查询姓“赵”的老师的个数
查询teacher表中,姓“赵”老师的个数
select count(*) from teacher
where tname like ‘赵%‘;

查询score表中,选择姓“赵”老师的个数
select count(*) from score as s
inner join teacher as t
on s.course_id = t.tid
where t.tname = ‘赵老师‘;

12、查询没学过钱老师课的同学的学号、姓名
select sid,name from student
where sid not in (
  select student_id from score
  where course_id in (
    select c.cid from course as c
    inner join teacher as t
    on c.teacher_id = t.tid
    where t.tname = ‘钱老师‘
  )
);

13、查询学过“1”并且也学过编号“2”课程的同学的学号、姓名
select st.sid, st.name from student as st
inner join score as sc
on st.sid = sc.student_id
where sc.course_id in (1,2)
group by st.sid, st.name;

14、查询学过孙老师所教的所有课的同学的学号、姓名
select sid, name from student
where sid in (
  select student_id from score
  where course_id in (
    select c.cid from course as c
    inner join teacher as t
    on c.teacher_id = t.tid
    where t.tname = ‘孙老师‘
  )
);

15、查询课程编号“2”的成绩比课程编号“1”课程低的所有同学的学号、姓名
select sid, name from student
where sid in (
  select A.student_id from (
    select * from score
    where course_id = ‘2‘) as A
  inner join (
    select * from score
    where course_id = ‘1‘) as B
  on A.student_id = B.student_id
  where A.number < B.number
);

16、查询有课程成绩小于60分的同学的学号、姓名
select st.sid, st.name from student as st
inner join score as sc
on st.sid = sc.student_id
where sc.number < 60
group by st.sid, st.name;

17、查询没有学全所有课的同学的学号、姓名
select st.sid, st.name from student as st
inner join score as sc
on st.sid = sc.student_id
group by sc.student_id
having count(sc.course_id) < (
  select count(*) from course
);

18、查询和“2”号的同学学习的课程完全相同的其他同学学号和姓名
select * from student
where sid in (
  select score.student_id from score
  join (
    select * from score
    where student_id = 2) as sc
  on sc.course_id = score.course_id
  and sc.student_id != score.student_id
  group by score.student_id
  having count(*) = (
    select count(*) from score
    where student_id = 2
  )
);

19、删除学习孙老师课的SC表记录
delete from score
where course_id in (
  select c.cid from course as c
  inner join teacher as t
  on c.teacher_id = t.tid
  where t.tname = ‘孙老师‘
);

以上是关于mysql中的sql基本操作的主要内容,如果未能解决你的问题,请参考以下文章

Mysql性能排查—结合操作系统线程 查看mysql中的sql资源消耗

MySQL中的基本SQL语句

『 MySQL篇 』:MySQL表的CURD操作

『 MySQL篇 』:MySQL表的CURD操作

mysql数据库在Python中的操作方法

mysql数据库在Python中的简单操作