赞
踩
- SELECT salary, salary+1000 new_salary
- FROM employees;
由图可看出来:字段名 新的别名。
2.1查询薪水在6000-10000之间
- SELECT first_name,salary
- FROM employees
- #where salary>=6000 && salary<=10000;
- #另一种写法
- #where salary>=6000 and salary<=10000;
- #还有一种
- WHERE salary BETWEEN 6000 AND 10000;
2.2查询30和50号部门中所有的员工
- SELECT first_name,department_id
- FROM employees
- #where department_id=30 || department_id=50;
- #where department_id=30 or department_id=50;建议这个
- WHERE department_id IN(30,60);#和上面的都一样
2.3员工的奖金率为null的员工是谁
- SELECT first_name,commission_pct
- FROM employees
- WHERE commission_pct IS NULL;#不能写成=null
反过来,查询不为null的员工
WHERE commission_pct IS NOT NULL;
2.4查询员工工资不在6000-10000之间的
- SELECT salary,first_name
- FROM employees
- WHERE salary NOT BETWEEN 6000 AND 10000;
3.1查询员工的姓名中包含f的有哪些
- SELECT first_name
- FROM employees
- WHERE first_name LIKE '%f%';#%表示任意个数的任意字符
3.2查询员工中姓名中第二个字符为d的员工有哪些
- SELECT first_name
- FROM employees
- WHERE first_name LIKE '_d%';#%_表示任意一个字符 \_表示_
3.3escape:指定转义字符
- SELECT first_name
- FROM employees
- WHERE first_name LIKE '_$_%' ESCAPE '$';#指定$为转义字符
再换一个
- SELECT first_name
- FROM employees
- WHERE first_name LIKE '_p_%' ESCAPE 'p';
3.4查询员工姓名中既包含a又包含e的有那些
- SELECT first_name
- FROM employees
- WHERE first_name LIKE '%a%e%'OR first_name LIKE '%e%a%';
- #或者:where first_name like'%a%' and first_name like'%e%';
4.1查询员工姓名和薪水并按照薪水排序 默认升序
- SELECT first_name,salary
- FROM employees
- ORDER BY salary DESC;
- #ORDER BY salary asc;
4.2查询80号部门的所有员工的姓名和薪水并按照薪水升序
- SELECT first_name,salary
- FROM employees
- WHERE department_id=80
- ORDER BY salary ASC;
4.3查询给员工薪水+1000后的工资降序
- SELECT first_name,salary,salary+1000 new_salary
- FROM employees
- ORDER BY new_salary DESC;
4.4查询所有员工的名字,薪水,部门号。并对部门号将进行降序,若部门号一样,按薪水升序
- SELECT first_name,salary,department_id
- FROM employees
- ORDER BY department_id DESC ,salary ASC;
以下是sql92语法
5.1查询员工的姓名和部门名称
- SELECT first_name,department_name
- FROM employees,departments
- WHERE employees.`department_id`=departments.`department_id`;
5.2查询员工的姓名,部门号,部门名称
在多表查询中若查询的字段是唯一的,那么可以在字段名前不用加表名。若不是唯一,
还是加上比较好。
在两个表中,如果字段是唯一的,它会需要查找所有的表来确定查找的字段;
若加上表明的话,它只会查找一个表,更有效率。
- SELECT employees.`first_name`,departments.`department_name`,departments.`department_id`
- FROM employees,departments
- WHERE employees.`department_id`=departments.`department_id`;
如果表名太复杂,可以起名;数据库是先执行 from 再执行其他的;
- SELECT d.`first_name` a,e.`department_name` b,e.`department_id` c
- FROM employees d,departments e
- WHERE d.`department_id`=e.`department_id`;
若没有where,则会产生的卡尔基的问题,也就是3*3,4*4那种意思;
- SELECT d.`first_name` a,e.`department_name` b,e.`department_id` c
- FROM employees d,departments e
以下是sql99语法:
select 字段名1,字段名2,....
from 表名1 join 表名2
on 连接条件
join 表名3
on 连接条件
.......
where 过滤条件
order by 字段名1 asc/desc, 字段名2 asc/desc,......
以下等值连接:连接条件使用的是等号 = ;
以下非自连接:连接的两张表不是同一张。
5.3查询员工的姓名,部门号,部门名称
- SELECT d.`first_name` a,e.`department_name` b,e.`department_id` c
- FROM employees d JOIN departments e
- ON d.`department_id`=e.`department_id`;
以下自连接:同一张表;
5.4查询员工姓名以及该员工的管理者的姓名
- SELECT e1.`first_name` 员工姓名,e2.`manager_id`
- FROM employees e1 JOIN departments e2 #e1:当员工表,e2:当管理者表,其实为一张表;
- ON e1.`manager_id`=e2.`department_id`
以下非等值连接
5.5查询员工的薪水及等级
- SELECT e1.`first_name` , j.`GRADE`
- FROM employees e1 JOIN job_grades j
- #on e1.`salary` >= j.`LOWEST_SAL`and e1.`salary`<=j.`HIGHEST_SAL`;
- #还可用这种beteen
- ON e1.`salary` BETWEEN j.`LOWEST_SAL`AND j.`HIGHEST_SAL`;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。