多测师肖老师__三表(9.1)

表结构:

Student学生表(学号、姓名、性别、年龄、编辑)

Course课程表(编号、课程名称)

sc选课表(选课编号、学号、课程编号、成绩)

 create table student(

stu_no int,

stu_name varchar(10),

sex char(1),

age int(3),

edit varchar(20) )
DEFAULT  charset=utf8;
insert into student values

(1,'wang','',21,'hello'),

(2,'小明','',22,'haha2'),

(3,'hu','',23,'haha3'),

(4,'li','',25,'haha4');

create table course(

c_no int,

c_name varchar(10)

 )

DEFAULT  charset=utf8;

insert into course values

(1,'计算机原理'),

(2,'java'),

(3,'c'),

(4,'php'),

(5,'py'); 

#rop  table   sc;

create table sc(

sc_no int,

stu_no int,

c_no int,

score int(3))

DEFAULT  charset=utf8;

insert into sc values

(1,1,1,80),

(2,2,2,90),

(3,2,1,85),

(4,2,3,70),

(5,2,4,95),

(6,2,5,89);



select * from student ;
select * from sc ;
select * from course ;

 ======================================

student

 sc

 course

 

  ======================================

 1、三表隐藏内连接

格式:

select * FROM 表1   ,表2,表3  where 表1.关联字段=表2.关联字段    and  表2.关联字段=表3.关联字段 ;

 

 

案例:select * FROM student a,sc b,course c where a.stu_no=b.stu_no and b.c_no=c.c_no ;

 

 

 2、三表普通内连接

 格式:select * FROM 表1   inner  join   表2 on  表1.关联字段=表2.关联字段   inner  join   表3   on   表2.关联字段=表3.关联字段 ;

案例:select * FROM student a INNER JOIN sc b on a.stu_no=b.stu_no INNER JOIN course c on b.c_no=c.c_no ;

 3、三表左连接

 格式:select * FROM 表1   left  join   表2 on  表1.关联字段=表2.关联字段   left  join   表3   on   表2.关联字段=表3.关联字段 ;

案例:select  *   FROM   student a  left JOIN sc b   on    a.stu_no=b.stu_no  left JOIN course c on  b.c_no=c.c_no ;

4、三表右连接

 格式:select * FROM 表1   right join   表2 on  表1.关联字段=表2.关联字段   right  join   表3   on   表2.关联字段=表3.关联字段 ;

案例:select  *   FROM   student a  right JOIN sc b   on    a.stu_no=b.stu_no  right JOIN course c on  b.c_no=c.c_no ;

5、先合两个表,在合另一张表

格式:select   *  from (select    字段名   FROM 表1   right join   表2 on  表1.关联字段=表2.关联字段 )别名,表3 where 

合表.关联字段=表3.关联字段

select  *  from  (select  a.stu_no,stu_name,sex ,age ,edit ,sc_no ,c_no ,score FROM   student a  right JOIN sc b   on    a.stu_no=b.stu_no)s ,course c  where s.c_no=c.c_no  ;

 6、把三表单成单表理解

 (SELECT b.*,c.* FROM sc a,student b,course c WHERE a.stu_no=b.stu_no AND a.c_no=c.c_no)s 当成单表
select * from (SELECT b.*,c.* FROM sc a,student b,course c WHERE a.stu_no=b.stu_no AND a.c_no=c.c_no)s

=============================================

(1)写一个SQL语句,查询选修了“计算机原理”的学生学号和姓名

条件: c_name=“计算机原理”

结果:stu_no     stu_name

方法一:

SELECT stu_name,stu_no from student where stu_no in(SELECT stu_no from sc where c_no =(SELECT c_no from course where c_name='计算机原理') )

方法二:

select student.stu_no,stu_name from student left JOIN sc on student.stu_no=sc.stu_no left join course on course.c_no=sc.c_no where c_name='计算机原理';

方法三:

SELECT stu_name FROM sc a,student b,course c WHERE a.stu_no=b.stu_no AND a.c_no=c.c_no and c_name='计算机原理';

方法四:

select a.stu_no,stu_name from  student a INNER JOIN sc  b on  a.stu_no=b.stu_no INNER JOIN course c on b.c_no=c.c_no  where c_name='计算机原理'

 

(2)写一个SQL语句,查询“小明”同学选修的课程名称

条件: stu_name='小明'

结果:c_name

方法一:

SELECT c_name FROM sc a,student b,course c WHERE a.stu_no=b.stu_no AND a.c_no=c.c_no and stu_name='小明';

 

(3)写一个SQL语句,查询选修了5门课程的学生学号和姓名

SELECT a.stu_no,stu_name FROM sc a,student b,course c WHERE a.stu_no=b.stu_no AND a.c_no=c.c_no group by stu_name HAVING COUNT(stu_name)=5

 

 

 

=============================================

(1)备份表结构:


create table sc1 like sc ;

(2)备份数据

a、插入全部数据

案例1:INSERT into  sc1  select  *  from  sc ;

b、插入部分数据

案例2:INSERT into sc2(sc_no,c_no)  select  sc_no,c_no from  sc ;

(3)备份表和数据

create table sc3 as(select * from sc)

=============================================

linux中备份

1、备份  

格式:mysqldump -u root -p  原库>新的脚本名.sql

案例:mysqldump -u root -p dcs>ss.sql

2、还原:

格式:mysql -u root -p 新库<备份好的数据脚本.sql文件

mysql -u root -p dcs<ss.sql

原文地址:https://www.cnblogs.com/xiaolehua/p/15711102.html