最近在复习sql语句,把一般会遇到的小知识点记一下
1.order by 排序 要放在select语句的最后
比如要求找到to_date=‘9999-01-01’ 并且salary 倒序的员工薪水信息,并且去重,去重用distinct 这个关键字
select…from…where…order by…
select distinct salary from salaries where to_date='9999-01-01' order by salary desc
这个语句如果order by放在where的前面就是错的
2.求个数 用count(),一般是跟group by 分组一起使用
比如求订单表里user_id 大于2的订单个数
这是订单表
select user_id,count(*) from order_table group by user_id having count(*)>2
3.group by 后面的条件判断用having
user表user
订单表order_table
要求订单表里金额总和大于100的用户信息
这里要用到group by分组,sum求和
select a.username,b.user_id,sum(money) as sm from user as a RIGHT JOIN
order_table as b on a.id=b.user_id group by b.user_id,a.username
having sm>100
4.左连接left join和右连接right join
两张表a和b,如果是要a表的信息全部展示,就a left join b
如果要b表的信息全部展示,就用a right join b或者b left join a
题目:查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序(请注意,一个员工可能有多次涨薪的情况)
CREATE TABLEemployees
(emp_no
int(11) NOT NULL,birth_date
date NOT NULL,first_name
varchar(14) NOT NULL,last_name
varchar(16) NOT NULL,gender
char(1) NOT NULL,hire_date
date NOT
NULL, PRIMARY KEY (emp_no
));
CREATE TABLEsalaries
(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
));
这时是有员工没有涨薪的情况,但是涨薪表里的员工肯定是在员工表里的,所以员工表employees要在左边
select b.emp_no,b.salary from employees as a left join salaries as b on a.emp_no=b.emp_no and a.hire_date=b.from_date order by b.emp_no desc