数据查询
单表查询
- 对属性操作
Select后可以写属性名、常数、函数以及他们组成的表达式,除此之外还可以给属性名重命名以及星号和distinct。
Select相当于关系代数的投影运算
- 查询表中所有属性
select * from emp
- 查询每个员工的编号和姓名
属性的显示顺序与select后的属性列表顺序一致
Select id, name from emp
- 查询每个员工的编号和姓名、年工资
Select id, name,salary * 12 from emp
修改查询结果中的列名:在属性后用空格隔开直接定义属性名或者用as隔开
Select id, name,salary * 12 as year_sal from emp
- 查询每个员工的编号和姓名、年工资以及年收入
年收入=年工资*(1+提成)
Select id, name, salary * 12 as year_sal , salary * 12 * (1+comm_pct*0.01)
from emp
凡是null参与的运算结果仍未null
空值函数(A,B):如果A为空则函数返回B值,否则返回A值
ifnull(A,B)
Select id, name, salary * 12 as year_sal , salary * 12 * (1+ifnull(comm_pct,0)*0.01)
- 查询每个员工的职位
Select title From emp
- 查询员工的职位种类
Distinct:用于去除查询结果中的重复元组,写在select之后属性列表之前
Select distinct title from emp;
- 查询每个员工的编号和职位
Select distinct id, title from emp
Select distinct id, distinct title from emp;--错误
- 对行的操作(条件查询)
Where—相当于关系代数中选择运算
Where 条件表达式,写在from之后
Where不能使用属性别名
在查询条件中属性尽量不要写在表达式中
- 查询1号员工
Select * From emp
Where id = 1;
- 工资大于1000的员工
Select * From emp
Where salary > 1000;
- 年工资大于12000的员工
选择先做
Select id, name,salary * 12 as year_sal from emp
Where year_sal > 12000;
- 查询工资在1000到2000之间的
否定形式 not between and
属性名Between A and B ->
属性 >= A and 属性 <=B
Select * From emp
Where salary between 1000 and 2000;
- 在1,3,5,7部门工作的员工
属性名 In (A,B,C……)->
属性 = A or 属性 = B or 属性 = C ……
否定形式:not in
Select * From emp
Where dept_id in(1,3,5,7)
- 模糊查询
否定形式:Not like
Like 用于字符串比较
%:任意长度的任意字符
_:任意一个字符
Name = ‘张三’
姓张同学: 张%
姓张的三个字的同学: 张__
名字中有张的: %张%
带Escape的like
带带正则表达式的like
Select * From emp
Where name like ‘A%’
- 查询没有提成的员工
Select * From emp
Where comm_pct is null;
- 查询有提成的员工
Select * From emp
Where comm_pct is not null;
连接查询
1.每个员工姓名及其所在部门的名称
select name,name from emp,dept ×
select emp.name,dept.name from emp,dept ×
select emp.name,dept.name from emp,dept
where emp.dept_id = dept.id --表连接条件
连接条件至少是表的个数减1个
2.每个部门的名称及其所在区域的名称
select dept.name,region.name from dept,region
where dept.regio_id = region.id
3.每个员工名字及其所在的城市
select epm.name,region.city from emp,region,dept
where emp.dept.id = dept.id and dept.region_id = region_id
表的别名:在from子句中表名后空格隔开直接定义表的别名。当给表定义别名后再访问该表时必须使用其别名
select e.name,r.city from emp e,region e,dept d
where e.dept.id = d.id and d.region_id = region_id
4.不等值连接:
select e.id,e.name,s.grade
from emp e,salgrade s
where e.salary >= s.lowsal and s.salary <=s.higsal
5.自然连接 natural join
select * from A表 natural join B表
6.笛卡尔积
cross join
外连接: 用于显示悬浮元组