1、有两张表(主键和外键)
员工表emp:empno, ename, job, mgr(上级), hiredate, sal, comm(奖金), deptno
部门表dept:deptno, dname, loc
理论上先建dept表:
--创建dept表
create table dept(deptno int primary key,dname nvarchar(30),loc nvarchar(30))
insert into dept values(10,'accounting','new york')
--创建emp表
create table emp(empno int primary,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))
insert into emp values(1000,'lili','clerk','8878','1990-1-1'.1374.21,80)
*****对于外键,请注意:
(a)外键只能指向主键
(b)外键和主键的数据类型要一致
2、表的基本查询-简单的查询语句
(a)查询所有列
select * from emp where 条件(*能不用就不用,浪费资源)
(b)查询指定列
select 字段1,字段2 form emp where 条件
(c)如何取消重复行(distinct只能消除搜索结果完全相同的行保留一行)
select distinct 字段1,字段2 from 表名 where 条件
**例1:查询smith的薪水,工作,所在部门
select sal,job,deptno form emp where ename='smith'
**例2:统计共有多少个部门编号
select distinct deptno form emp
(d)使用算数表达式
**例3:显示每个雇员的年工资
select ename 姓名,sal*13 "年工资" from emp
**select ename,sal*13+comm*13 "年工资" from emp
后面这句可能有问题,因为comm有的值为空(NULL),空与任何值运算的结果都是空(NULL),可以通过一个函数转换
**select ename,sal*13+isnull(comm,0)*13 "年工资" from emp
**例4:如何查找1982.1.1以后入职的员工
select * form emp where hiredate>'1982-1-1'
(e)使用like操作符(模糊查询)
%:表示0到多个字符 _:表示单个字符
**例5:如何显示首字母为S的员工的姓名和工资
select ename,sal from emp where ename like"S%"
(f)在where中使用in
**例6:如何显示empno为123,111,212雇员的情况
select * from emp where empno=123 or empno=111 or empno=212
而一般我们使用in来完成
select * form emp where empno in(123,111,212)
**例7:如何显示没有上级的员工
select ename from emp where mgr is null
(g)使用逻辑操作符号
就是or and 的使用
(h)使用order by(默认是升序排列asc,降序排列用desc)
**例8:如何按照工资的从低到高的顺序显示雇员信息
select * form emp order by sal asc
**例9:按照部门号升序而工资降序
select * form emp order by deptno ,sal desc(执行结果:先排deptno,然后sal,比如把部门号10的sal降序,再把部门号20的sal降序)
**例10:统计每个人的年薪并按照从低到高的顺序排列
select ename,(sal*13+isnull(comm,0)*13) "nianxin" from emp order by nianxin asc
(i)分页查询(很常用)