【数据库基础知识 & 表的内外连接与素引特性】

版权声明: https://blog.csdn.net/qq_41880190/article/details/85335831

表的内外连接

内连接

外连接

左外连接

右外连接

表的索引特性

基本原理

 索引创建

索引查询

索引删除

创建规则(原则)


表的内外连接

内连接

内连接实际上就是利用 where 子句对两种表形成的笛卡儿积进行筛选

语法:

select 字段 from 表 1 inner join 表2 on 连接条件 and 其他条件;

案列:

用前面的写法

select ename, dname from emp, dept where emp.deptno=dept.deptno and ename='smith';

用标准的内连接写法

select ename, dname from emp inner join dept on emp.deptno=dept.deptno and ename='smith;

外连接

左外连接

如果联合查询,左侧的表完全显示我们就说是左外连接。

语法:

select 字段名 from 表名1 left join 表名2 on 连接条件;

建两张表 stu 表和 exam 表 

create table stu (
    id int,
    name varchar(30)
);    --学生表 
insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
create table exam (
    id int, 
    grade int
);    --成绩表 
insert into exam values(1, 56),(2,76),(11, 8);

查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

当左边表和右边表没有匹配时,也会显示左边表的数据 

select * from stu left join exam on stu.id=exam.id;

查询结果:

右外连接

如果联合查询,右侧的表完全显示我们就说是右外连接。

语法:

select 字段 from 表 1 inner join 表2 on 连接条件 and 其他条件;

案例:

对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

select * from stu right join exam on stu.id=exam.id;

表的索引特性

索引:提高数据库的性能,查询速度的提高是以插入、更 新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于提高一个海量数据的检索速度

  • 主键索引(primary key)
  • 唯一索引(unique)
  • 普通索引(index)
  • 全文索引(fulltext)

基本原理

说明: 占用磁盘空间、当添加一条记录,除了添加到表中,还要维护二叉树,速度有影响,但不大。

当我们添加一个索引,不能够解决所有查询问题,需要分别给字段建立索引;例如 select * from EMP where ename='abcdef'; 索引是以空间换时间

 索引创建

主键索引

直接在字段名后指定

 

primary key create table user1(id int primary key, name varchar(30));

指定某列或某几列为主键索引
 

primary key create table user1(id int primary key, name varchar(30));

修改表属性
 

alter table user3 add primary key(name);

修改表属性:

一个表中,最多有一个主键索引,当然可以使符合主键 主键索引的效率高(主键不可重复) 创建主键索引的列,它的值不能为null,且不能重复 主键索引的列基本上是int

唯一索引(唯一性约束 unique)

在某列后直接指定unique唯一属性。
 

create table user4(id int primary key, name varchar(30) unique);

在表的后面指定某列或某几列为
 

unique create table user5(id int primary key, name varchar(30), unique(name));

修改表属性 
 

alter table user6 add unique(name);

修改属性结果:

特点: 一个表中,可以有多个唯一索引 查询效率高 如果在某一列建立唯一索引,必须保证这列不能有重复数据 如果一个唯一索引上指定not null,等价于主键索引

普通索引

同样有三种方法与创建主键索引、唯一性约束语法一致,因此不做讨论(index)

修改表属性
 

alter table student add index(name);

普通可以有多个;

索引查询

第一种方法:

show keys from 表名;

查询结果:

第二种方法:

show index from 表名; 

查询结果:

第三种方法(信息比较简略):

desc 表名;

查询结果:

索引删除

第一种方法-删除主键索引:

alter table 表名 drop primary; 

第二种方法-其他索引的删除:

alter table 表名 drop index 索引名; 

索引名就是show keys from 表名 中的 Key_name 字段 mysql> alter table user10 drop index idx_name;

第三种方法方法:

drop index 索引名 on 表名 mysql> drop index name on user8

创建规则(原则)

比较频繁作为查询条件的字段应该创建索引

唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

更新非常频繁的字段不适合作创建索引

不会出现在where子句中的字段不该创建索引

猜你喜欢

转载自blog.csdn.net/qq_41880190/article/details/85335831