表结构:
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