做题小结:
1.判断奇偶(SQL15):
①取余数:%
比如判断为奇数where emp_no % 2 = 1
②Mod(a,b) 在sql中的意思是 a / b 的余数(即 a % b )
基础用法:如果id需要是偶数或者奇数时就可以使用mod。
mod(id,2)=1 是指id是奇数。
mod(id,2)=0 是指id是偶数。
③用位运算:where e.emp_no & 1 = 1
计算机中奇数=XXXXXXX1,偶数位=XXXXXXX0
奇偶&运算
奇&1(00000001)=1
偶&1(00000001)=0
计算机中&运算的性能要高于四则运算
(运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:两位同时为“1”,结果才为“1”,否则为0)
"按位与"运算符 比如a&b;
表示把a和b进行二进制的按位与运算
与的计算规则是,如果两个数在相同的位置上都为真(或为1),其结果为真(输出1),如果两位数中在相同的位置上有一位为假(或为0)者结果为假。
2.两个(left)join连接:直接先写好前面一个后面加(left)join
select e.last_name,e.first_name,de.dept_name
from employees e left join
dept_emp em on e.emp_no=em.emp_no
left join departments de on de.dept_no=em.dept_no
同时还可以直接用and加上表连接限制条件而不需要再用where
select e.emp_no,(s1.salary-s2.salary) as growth
from employees e
inner join salaries s1 on s1.emp_no=e.emp_no and s1.to_date="9999-01-01"
inner join salaries s2 on s2.emp_no=e.emp_no and s2.from_date=e.hire_date
order by growth asc
3.from后面可以跟两个子查询,直接用逗号隔开就行
select n1.emp_no,n2.emp_no,n1.salary,n2.salary
from
(select e1.emp_no,e1.dept_no,s1.salary,e1.to_date
from dept_emp e1 left join salaries s1 on e1.emp_no=s1.emp_no) n1,
(select m2.emp_no,m2.dept_no,s2.salary
from dept_manager m2 left join salaries s2 on m2.emp_no=s2.emp_no) n2
where n1.dept_no=n2.dept_no and n1.salary>n2.salary
and n1.to_date='9999-01-01'
4.有时候不一定需要join 来连接表,直接from+逗号隔开也可以,后面where中和join一样加上点隔开。如
SELECT f.title, f.description
FROM film f, film_category fc, category c
WHERE f.film_id = fc.film_id