分享

表的基本查询(重要)

 jtll521 2011-06-23
--创建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
 


























    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多