--创建dept表
create table dept
(
deptno int primary key,
dname nvarchar(30),
loc nvarchar(30)
)
--创建emp表
create table emp
(
empno int primary key,
ename nvarchar(30),
job nvarchar(30),
mgr int,
hiredate datetime,
sal numeric(10,2),
comm numeric(10,2),
deptno int foreign key references dept(deptno) --根据需要将deptno做成外键,外键定义关键字为foreign key,将其与表dept中的主键相关联
)
--针对外键,有以下几点:
--1.外键只能指向主键,
--2.外键和主键的数据类型要一致。
---下面添加数据
insert into dept values(10,'accounting','new york')
insert into dept values(20,'research','dallas')
insert into dept values(30,'sales','chicago')
insert into dept values(40,'operations','boston')
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7369,'smith','clerk',7902,'1980-12-17',800.00,20)
insert into emp values(7499,'allen','salesman',7698,'1981-02-20',1600.00,300.00,30)
insert into emp values(7521,'ward','salesman',7698,'1981-02-22',1250.00,500.00,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7566,'jenos','maneger',7839,'1981-04-02',2975,20)
insert into emp values(7654,'martin','salesman',7698,'1981-09-28',1250.00,1400.00,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7698,'blaks','maneger',7839,'1981-05-01',2850,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7782,'clark','maneger',7839,'1981-06-09',2450,10)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7788,'scott','analyst',7566,'1981-04-19',3000,20)
insert into emp(empno,ename,job,hiredate,sal,deptno) values(7839,'king','president','1981-11-17',5000,10)
insert into emp values(7844,'turner','salesman',7698,'1981-09-08',1500,.00,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7876,'adams','clerk',7788,'1981-05-23',1100,20)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7900,'james','clerk',7698,'1981-12-03',950,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(77902,'ford','analyst',7566,'1981-12-03',3000,20)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(77934,'miller','clerk',7782,'1981-01-23',1300,10)
--查询所有列
select *form emp(表面) where 条件 注:在查询时尽量不要使用*
--查询指定列
select 字段1,字段2 from 表名 where 条件
--查询simth的薪水,工作,所在部门
select sal,job,deptno from emp where ename='smith'
--如何取消重复行(distinct只能消除完全一样的行)
select distinct 字段 from 表名 where 条件
查询出所有的部门
select deptno from emp--将所有的部门全部查到,有重复的
select distinct deptno from emp --将所有的部门全部查到,不含重复的
--显示每个雇员的年工资
--年工资是列工资 的别名,
select ename,sal*13 年工资 from emp
--年工资是列工资+奖金
select ename,sal*13+comm*13 年工资 from emp --结果会出现很多null,因为comm有很多空值
如何处理空的问题?
select ename 姓名,sal*13+isnull(comm*13) 年工资 from emp
--使用where语句
--如何显示工资高于3000的人
select * from emp where sal>3000
--如何查找1982.1.1后入职的员工
select *from emp where hiredate>'1982-1-1'
--如何显示工资在2000到2500的员工的情况
select *from emp where sal>2000 and sal<2500
或者
select *from emp where sal between 2000 and 2500
--用like模糊查询
--如何显示首字符为S的员工姓名和工资
select ename,sal from emp where ename like 's%' 注:%表示0到多个字符
--如何显示第三个字符为大写O的所有员工的姓名和工资
select ename,sal from emp where ename like '__o%'
--如何显示empno为123,345,800...的雇员的情况。
select *from emp where empno=123 or empno=345 or empno=800
一般不使用这个方法,而是使用in这个关键字,效率更高
select *from emp where empno in(123,345,800)
--使用isnull操作符
如何显示没有上级的雇员的情况
select *from emp where mgr is null
--查询工资高于500或者岗位为manager的雇员,同时还要满足他们的姓名首写字母为j
select *from emp where (sal>500 or job='manager') and ename like 'j%'
在上面一定要加上括号
--order by的使用
--如何按照工资从低到高的顺序显示雇员的信息
select *from emp order by sal asc
注:order by 默认是升序排列,关键字为asc,当想降序排列时就换成关键字desc
--按照部门号升序而雇员的工资降序排列
select *from emp where order by deptno,sal desc
注:order by 可以按照不同的字段分别排序
--统计每个人的年薪,并按照从低到高的顺序排列
select ename, (sal+isnull(comm,0))*13 from emp order by (sal+isnull(comm,0))*13
上面的操作是可以的,但是要对(sal+isnull(comm,0))*13计算两次,所以可以使用别名,然后对别名排序即可
select ename,(sal+isnull(comm,0))*13 nianxin from emp order by nianxin