1. 一条Sql语句
-
是什么
SQL是一套标准,全称结构化查询语言
SQL是用来完成和数据库之间的通信的编程语言,
SQL语言是脚本语言,直接运行在数据库上。
SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL语句的底层实现不同罢了,但结果相同。
-
被执行的过程
- 客户端把语句发给服务器端执行;
- 语句解析;
- 查询高速缓存
- 语句合法性检查
- 语义检查
- 获取对象解析锁
- 数据访问权限的核对
- 确定最佳执行计划
- 语句执行
- 结果返回
2. 关于数据库中两表的连接操作
一. 外连接
-
左连接 left join 或 left outer join
select * from student left join score on student.Num=score.Stu_id; -- 左边的student表全部显示,右边score没有的为null
-
右连接 right join 或 right outer join
select * from student right join score on student.Num=score.Stu_id; -- 与左连接相反
-
完全外连接 full join 或 full outer join
select * from student full join score on student.Num=score.Stu_id; -- 是返回两个表中的所有的值,没有对应的数据则输出为空。
注: 通过上面这三种方法就可以把不同的表连接到一起,变成一张大表,之后的查询操作就简单一些了。而对于select * from student,score;则尽量不使用此语句,产生的结果过于繁琐。
二. 内连接
join 或 inner join
select * from student inner join score on student.Num=score.Stu_id;
select * from student,score where student.ID=course.ID;
-- 两条语句实现同样的功能
-- 内连接:返回两个表的交集
三. 交叉连接
cross join:没有where指定查询条件的子句的交叉联接将产生两表的笛卡尔积。
select * from student cross join score;
-- A x {B, C, D}
-- = {A, B}, {A, C}, {A, D}
四. 结构不同的表连接
-
中间表
当两表为多对多关系的时候,我们需要建立一个中间表student_score,中间表至少要有两表的主键。
select s.Name,C.Cname from student_score as sc left join student as s on s.Sno=sc.Sno left join score as c on c.Cno=sc.Cno select C_name,grade from student left join score on student.Num=score.Stu_id where name='李五一';。
五. UNION操作符用于合并两个或多个select语句的结果集。
UNION内部的SELECT语句必须拥有相同数量的列,每个列也必须拥有相似的数据类型,每条SELECT语句中的列的顺序必须相同。
select Num from student union select Stu_id from score;
union操作符是默认查重的,如果允许重复的值,就可以使用union all 。对于两张结构相同的表,union也可以把他们合并成一张表:
select * from student1 union select *from student2;