您的位置:首页 > 数据库

sql语句的查询语句基本大全

2016-08-24 07:53 477 查看
--创建dept表

create table dept
(deptno int primary key,
dname nvarchar(30),
loc   nvarchar(30)
)

insert into dept (deptno, dname, loc) values (10, 'ACCOUNTING', 'NEW YORK');

insert into dept (deptno, dname, loc) values (20, 'RESEARCH', 'DALLAS');

insert into dept (deptno, dname, loc) values (30, 'SALES', 'CHICAGO');

insert into dept (deptno, dname, loc) values (40, 'OPERATIONS', 'BOSTON');

--创建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)       --因为depyno我们根据需要要做成外键
)
--针对外键,注意:
--1、外键只能只想主键
--2、外键和主键的数据类型要一致

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7369,'SMITH','CLERK',7902,'1980-12-17',800.00,NULL,20);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7521, 'WARD', 'SALESMAN', 7698, '1981-2-22', 1250, 500, 30);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7566, 'JONES', 'MANAGER', 7839, '1981-4-2', 2975, null, 20);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7654, 'MARTIN', 'SALESMAN', 7698, '1981-9-28', 1250, 1400, 30);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7698, 'BLAKE', 'MANAGER', 7839, '1981-5-1', 2850, NULL, 30);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7782, 'CLARK', 'MANAGER', 7839, '1981-6-9', 2450, NULL, 10);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7788, 'SCOTT', 'ANALYST', 7566, '1987-4-19', 3000, NULL, 20);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7844, 'TURNER', 'SALESMAN', 7698, '1981-9-8', 1500, 0, 30);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7876, 'ADAMS', 'CLERK', 7788, '1987-5-23', 1100, NULL, 20);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7900, 'JAMES', 'CLERK', 7698, '1981-12-3', 950, NULL, 30);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values ( 7902, 'FORD', 'ANALYST', 7566, '1981-12-3', 3000, NULL, 20);

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7934, 'MILLER', 'CLERK', 7782, '1982-1-23', 1300, NULL, 10);

-------------------
select * from dept

--查询指定列
--select 字段1 字段2 from 表名 where 条件
select sal,job,deptno from emp where ename='smith'
--取消重复行(distinct只能消除完全一样的行,保留一行)
--select distinct 字段 from 表名 where 条件
select distinct deptno from emp
--显示每个雇员的年工资
--‘年工资’就是别名+奖金
select ename ,sal*13+ISNULL(comm,0) '年工资' from emp
--如何查找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

--如何显示首字母符为S的员工姓名和工资
select ename ,sal from emp where ename like 'S%'
--如何显示第三个字符为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)

--如何显示没有上级的雇员的情况
select *from emp where mgr is null

--如何按照工资从低到高的顺序显示雇员的信息
--asc 升序
--desc 降序
select * from emp order by sal asc

--按照部门升序而雇员的工资降序排列
--order by 可以根据不同的字段排序
select *from emp order by deptno , sal desc

--使用别名排序,统计每个人的年薪并按照从低到高的顺序排列
select ename,(sal*13+isnull(comm,0)*13) '年薪' from emp order by '年薪'

--如何显示所有员工中最高工资和最低工资
--如何显示最低工资和该雇员的名字
--SQL语句是从右往左读的,优化:筛选最多的放最右边
select min(sal) from emp
select ename,sal from emp where sal=(select min(sal) from emp)

--显示所有员工的平均工资和工资总和
--把高于平均工资的雇员的名字和他的工资显示
select avg(sal) '平均工资',sum(sal) '总工资' from emp
select* from emp where sal>(select avg(sal) from emp)

--统计共有多少员工
select count(*) from emp

--显示每个部门的平均工资和最高工资
并显示部门名称(多表查询)
select avg(sal) '平均工资',max(sal) '最高工资',deptno from emp group by deptno

--显示每个部门的各种岗位的平均工资和最低工资
select avg(sal) '平均工资',min(sal) '最低工资',deptno,job from emp group by deptno,job order by deptno

--显示平均工资低于2000的部门号和它的平均工资
--having 往往和 gourp by 结合使用,可以对分组查询结果进行筛选
select avg(sal) '平均工资',deptno from emp group by deptno having avg(sal)<2000

select * from emp

--显示雇员的名字,雇员的工资和所在部门的名称
--如果两张表都有相同名字的字段,则需要带表名
select ename,sal,loc,emp.deptno from emp,dept where dept.dname='sales' and emp.deptno=dept.deptno

--如何显示部门号为10的部门名,员工名和工资
select dept.dname,emp.ename,emp.sal from emp,dept where dept.deptno=10 and emp.deptno=10

select emp.ename,emp.sal,dept.dname from emp,dept where dept.deptno = emp.deptno order by dept.dname

--显示公司员工和他上级的名字
--分析:把emp表看成两张表,分别为 worker,boss

select worker.ename,boss.ename '上级'   from emp worker,emp boss where worker.mgr=boss.empno

--单行子查询
select * from emp where deptno = (select deptno from emp where ename = 'smith')

--多行子查询
select * from emp where job in (select distinct job from emp where deptno = 10)

--显示部门的平均工资的员工姓名,工资,和所在部门的平均工资
--1.首先知道各个部门的平均工资

select avg(sal) myavg , deptno from emp group by deptno

--2.把上面的查询结果当做一个临时表

select emp.ename,emp.sal ,emp.deptno from  emp , (select avg(sal)  myavg, deptno from emp group by deptno ) temp where emp.deptno = temp.deptno and emp.sal>temp.myavg

--请显示第五个到第十个入职的雇员(按照时间先后)

--1.显示第一个到第四个入职的雇员
select top 4 * from emp order by hiredate

select top 6 * from emp where empno not in (select top 4 empno from emp order by hiredate) order by hiredate

--显示第十一个到第十三个入职的人的信息
select top 3 * from emp where empno not in (select top 10 empno from emp order by hiredate) order by hiredate

--如何删除表中重复记录
select  distinct * into #temp from cat --把cat表非重复的记录放入临时表temp
delete from  cat  --把cat表清空
insert into cat select * from #temp  --把temp(没有重复记录)表的数据放入cat
drop table #temp --删除临时表

--左外连接和右外链接
--显示公司每个员工和它的上级的名字
--内连接
select w.ename,b.ename  from emp w,emp b where w.mgr = b.empno

--显示公司每个员工和它的上级的名字,要求没有上级人,名字也要显示
--左外链接:左边的表的记录全部显示,如果没有匹配的记录,就用null来填
select w.ename,b.ename  from emp w left join emp b on w.mgr = b.empno
--右外链接:右边的表的记录全部显示,如果没有匹配的记录,就用null来填

--约束 :  not null,unique,primary key, foreign key,check
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: