sql查询技巧指南

时间:2023-03-09 06:18:42
sql查询技巧指南

传送门(牛客网我做过的每到题目答案以及解析)

sql定义:

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统

概述

作为一个非DBA,我们日常中用到sql最多得到是查询,比说内连,外联,交并补之类的,再多一些就是插入,更新,删除很少用,一般都是逻辑查询。像存储过程,触发器很少用的,这里点到为止,不深究。

备注:本人一年经验,超级小菜鸟,一点小建议,若有错误欣然悔改,若是喷子。。。(大哥我错啦!!!)

学习方法

重复练习就不赘述啦。

第一:练习之前语法一定要掌握清楚,这里需要注意的是不同数据库有自己的方言、或者特殊的函数。

  举个例子:oracle的rank,mysql就没有这个。

第二:练习的时候要理解你写的sql要做什么,要学会解析成sql,具体做法按照以下步骤。

  举个例子:看下面这道题

查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_no
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
题目:查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_no
步骤一:解析这个需求,提炼出查询条件;
目的:查找(也可以理解成查询后要显示的字段)(领导当前薪水详情),(对应的部门编号)
提取筛选条件:1:各个部门(假定主表是salaries),意味着我们需要关联部门表,让部门和人员薪水信息是 1:1,关联条件就是人员no一致;
       2:当前(to_date='9999-01-01'),一个where条件
       3:隐含一个条件,salaries中也有一个to_date,也要限定一下,一个where条件 步骤二:组合成sql语句,如下
 select s.*,d.dept_no
from salaries s
--左连接
left join dept_manager d
--连接体哦阿健
on s.emp_no = d.emp_no
--筛选条件
where s.to_date = '9999-01-01'
and d.to_date = '9999-01-01'

第三步:学习优化,在这个过程中学习一下测试的方法

 declare
i number := 1;
j number := 1;
cout number := 1;
begin
for i in 1..10 --循环开始
loop
for j in 1..2500000
loop
cout := cout +1;
insert into sc values(cout,cout,cout,dbms_random.value(100,0));--这个随机函数
end loop;
end loop;
commit; --最后一起提交
end;

刷题顺序建议

 也没什么顺序啦,就是按照 查询->增/删/改->触发器(听着牛逼,其实用到很少,可能是我太菜,目前没遇到过)

每道题目详细解析地址

截图留念 11:30:06

sql查询技巧指南

sql查询技巧指南

sql查询技巧指南

sql查询技巧指南

sql查询技巧指南