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语句,如下
 2 
 3 select s.*,d.dept_no
 4 from salaries s
 5 --左连接
 6 left join dept_manager d
 7 --连接体哦阿健
 8 on s.emp_no = d.emp_no
 9 --筛选条件
10 where s.to_date = '9999-01-01'
11 and d.to_date = '9999-01-01'

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

 

 1 declare
 2      i number := 1;
 3      j number := 1;
 4      cout number := 1;
 5 begin
 6      for i in 1..10 --循环开始
 7      loop
 8     for j in 1..2500000
 9       loop
10         cout := cout +1;
11          insert into sc values(cout,cout,cout,dbms_random.value(100,0));--这个随机函数
12          end loop;
13      end loop;
14      commit; --最后一起提交
15 end; 

 

 

 

刷题顺序建议

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

 每道题目详细解析地址

截图留念 11:30:06

 

 

 

 

 

 

 

posted @ 2019-09-04 13:24  小傻孩丶儿  阅读(405)  评论(0编辑  收藏  举报