mysql常用语句八:DQL中的查询操作

1 强制索引

表结构如下

在这里插入图片描述

需求

针对salariesemp_no字段创建索引idx_emp_no,查询emp_no10005, 使用强制索引

SQL语句

select * from salaries force index(idx_emp_no) where emp_no = 10005;

运行截图

在这里插入图片描述

2 构造触发器

表结构如下

在这里插入图片描述
在这里插入图片描述

需求

构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。

SQL语句

create trigger audit_log
after insert on employees_test for each row
begin insert into audit values(new.id, new.name);
end;

3 dense_rank()函数

表结构如下

在这里插入图片描述

需求

查询通过的题目的排名,通过题目个数相同的,排名相同,此时按照id升序排列

SQL语句

select id, number, dense_rank() over(order by number desc) as t_rank 
from passing_number
order by number desc,id;

RANK()函数不同,DENSE_RANK()函数始终返回连续的排名值。常用PARTITION BY子句将FROM子句生成的结果集分区。

运行结果

在这里插入图片描述

4 子查询

表结构如下

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

需求

查找所有员工的last_namefirst_name以及对应的dept_name,也包括暂时没有分配部门的员工(null)。

SQL语句

select e.last_name, e.first_name, t.dept_name 
from employees e left join
(select de.emp_no, d.dept_name from dept_emp as de 
 left join departments as d 
 on de.dept_no = d.dept_no) as t
on e.emp_no = t.emp_no;

分析:
直接进行连接操作的话是找不到条件的,所以要使用子查询建立一个新的表。括号中的语句

select de.emp_no, d.dept_name from dept_emp as de 
 left join departments as d 
 on de.dept_no = d.dept_no

相当于新建了一个表
在这里插入图片描述
然后将这个表与employees表通过emp_no条件连接,实现最终的查询。

运行结果

在这里插入图片描述

5 创建外键约束

表结构如下

在这里插入图片描述
在这里插入图片描述

需求

audit表上创建外键约束,其emp_no对应employees_test表的主键id

SQL语句

alter table audit
add foreign key(emp_no)
references employees_test(ID);

猜你喜欢

转载自blog.csdn.net/Awt_FuDongLai/article/details/114933895