设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2903|回复: 0

sqlserver各类查询

[复制链接]

36

主题

337

金钱

521

积分

初级用户

发表于 2019-12-12 15:57:34 | 显示全部楼层 |阅读模式

sqlserver查询(子查询,全连接,等值连接,自然连接,左右连,交集,并集,差集)
  1. --部门表

  2. create table dept(

  3.    deptno int primary key,--部门编号

  4.    dname nvarchar(30),--部门名

  5.    loc nvarchar(30)--地址

  6. );



  7. --雇员表

  8. create table emp(

  9.    empno int primary key,--雇员号

  10.    ename nvarchar(30),--员工姓名

  11.    job   nvarchar(30),--雇员工作

  12.    mrg int,--雇员上级

  13.    hiredate datetime,--入职时间

  14.    sal numeric(10,2),--薪水

  15.    comm numeric(10,2),--奖金

  16.    deptno int foreign key references dept(deptno)--设置外键

  17. );



  18. insert into dept values (10,'ACCOUNTING','NEW YORK');

  19. insert into dept values (20,'RESEARCH','DALLAS');

  20. insert into dept values (30 ,'SALES','CHICAGO');

  21. insert into dept values (40, 'OPERATIONS','BOSTON');



  22. insert into emp values (7369,'SMITH','CLERK',7902,'1980-12-17',800.00,null,20);

  23. insert into emp values(7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600.00,300.00,30);

  24. insert into emp values(7521,'WARD','SALESMAN',7698,'1981-2-22',1250.00,500.00,30);

  25. insert into emp values(7566,'JONES','MANAGER',7839,'1981-4-2',2975.00,null,20);

  26. insert into emp values(7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250.00,1400.00,30);

  27. insert into emp values(7698,'BLAKE','MANAGER',7839,'1981-5-1',2850.00,null,30);

  28. insert into emp values(7782,'CLARK','MANAGER',7839,'1981-6-9',2450.00,null,10);

  29. insert into emp values(7788,'SCOTT','ANALYST',7566,'1987-4-19',3000.00,null,20);

  30. insert into emp values(7839,'KING','PRESIDENT',null,'1981-11-17',5000.00,null,10);

  31. insert into emp values(7844,'TURNER','SALESMAN',7698,'1981-9-8',1500.00,0.00,30);

  32. insert into emp values(7876,'ADAMS','CLERK',7788,'1987-5-23',1100.00,null,20);

  33. insert into emp values(7900,'JAMES','CLERK',7698,'1981-12-3',950.00,null,30);

  34. insert into emp values(7902,'FORD','ANALYST',7566,'1981-12-3',3000.00,null,20);

  35. insert into emp values(7934,'MILLER','CLERK',7782,'1982-1-23',1300.00,null,10);
复制代码



子查询
什么是子查询
子查询是指嵌入在其它sql语句中的select语句,也叫嵌套查询

单行子查询
单行子查询是指只返回一行数据的子查询语句

请思考:如何显示与SMITH同一部门的所有员工?
  1. select * from emp where deptno=(select deptno from emp where ename=’SMITH’);
复制代码


多行子查询
多行子查询指返回多行数据的子查询
请思考:如何查询和部门的工作相同的雇员的名字、岗位、工资、部门号
1,先查询10 号部门有哪些岗位
  1. select distinct job from emp where deptno=10;
复制代码


2,显示和他的岗位有一个相同的员工
  1. select ename,job,sal,deptno from emp where job in(select distinct job from emp where deptno=10)
复制代码



全连接
  1. select * from emp,dept;
复制代码



自然查询
  1. 自然连接:将等值连接中的重复列去掉

  2. select student.sno,sname,ssex,sage,sdept,cno,grade from student,sc where student.sno=sc.sno;
复制代码



左连接和右连接
  1. 左连接:left on, 依次遍历左边这个表,查询在右表中是否有对应的记录,如果有对应记录,则匹配,否则显示null

  2. select student.sno,sname,ssex,sage,sdept,cno,grade from student left join sc on(student.sno=sc.sno);



  3. 右连接:rigth on,以右边的表为参照

  4. select student.sno,sname,ssex,sage,sdept,cno,grade from student right join sc on(student.sno=sc.sno);
复制代码



union并集
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。
  1. select ename,sal,job from emp where sal>2500

  2. union  

  3. select ename,sal,job from emp where job='MANAGER';
复制代码

  1. select * from student where sage>20

  2. union

  3. select * from student where sage<22
复制代码

1.png

对两个结果集进行“union”,"intersecrt","except"运算这两个结果集的列数必须相同.
intersect交集
使用该操作符用于取得两个结果集的交集。
  1. select ename,sal,job from emp where sal>2500

  2. intersect

  3. select ename,sal,job from emp where job='manager';
复制代码
  1. select * from student where sage>20

  2. intersect

  3. select * from student where sage<22
复制代码

2.png


except差集
使用该操作符用于取得两个结果集的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据。

  1. select ename,sal,job from emp where sal>2500

  2. minus

  3. select ename,sal,job from emp where job='manager';
复制代码

  1. select * from student where sage>20

  2. except

  3. select * from student where sage>22
复制代码

3.png

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表