sql server查询(SELECT ,where,distinct,like 查询,in,is null,group by 和having,order by,as)
基本查询:
实例表
- 示例表
- --部门表
- create table dept(
- deptno int primary key,--部门编号
- dname nvarchar(30),--部门名
- loc nvarchar(30)--地址
- );
- --雇员表
- create table emp(
- empno int primary key,--雇员号
- ename nvarchar(30),--员工姓名
- job nvarchar(30),--雇员工作
- mrg int,--雇员上级
- hiredate datetime,--入职时间
- sal numeric(10,2),--薪水
- comm numeric(10,2),--奖金
- deptno int foreign key references dept(deptno)--设置外键
- );
- 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 values (7369,'SMITH','CLERK',7902,'1980-12-17',800.00,null,20);
- insert into emp values(7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600.00,300.00,30);
- insert into emp values(7521,'WARD','SALESMAN',7698,'1981-2-22',1250.00,500.00,30);
- insert into emp values(7566,'JONES','MANAGER',7839,'1981-4-2',2975.00,null,20);
- insert into emp values(7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250.00,1400.00,30);
- insert into emp values(7698,'BLAKE','MANAGER',7839,'1981-5-1',2850.00,null,30);
- insert into emp values(7782,'CLARK','MANAGER',7839,'1981-6-9',2450.00,null,10);
- insert into emp values(7788,'SCOTT','ANALYST',7566,'1987-4-19',3000.00,null,20);
- insert into emp values(7839,'KING','PRESIDENT',null,'1981-11-17',5000.00,null,10);
- insert into emp values(7844,'TURNER','SALESMAN',7698,'1981-9-8',1500.00,0.00,30);
- insert into emp values(7876,'ADAMS','CLERK',7788,'1987-5-23',1100.00,null,20);
- insert into emp values(7900,'JAMES','CLERK',7698,'1981-12-3',950.00,null,30);
- insert into emp values(7902,'FORD','ANALYST',7566,'1981-12-3',3000.00,null,20);
- insert into emp values(7934,'MILLER','CLERK',7782,'1982-1-23',1300.00,null,10);
- select
- 基本select语句
- select [distinct] *|{列名1, 列名2,列名3...}
- from 表名 [where (条件)];
- 说明:
- select 指定查询哪些列的数据。
- *号代表查询所有列。
- from指定查询哪张表。
- where 表示条件。
- distinct可选,指显示结果时,是否剔除重复数据
- 简单的查询语句
- ■ 查询所有列
- select * from 表名;
- ■ 查询指定列
- select 列1,列2… from 表名;
- select ename,sal from emp;
- ■ 如何取消重复行
- select distinct deptno ,job from emp;
- ?查询SMITH 的薪水,工作,所在部门
- select sal,job,deptno from emp where ename='SMITH';
- 特别说明:SQLServer 的sql 不区分大小写,内容也不区分大小写
- ■ 使用算数表达式
- ?显示每个雇员的年工资(奖金为null的用0代替)
- select ename,sal*12+isnull(comm,0)*12 as '年薪' from emp;
- 说明:isnull函数是 SQLserver提供的,用于处理数据 null 的问题
- ■ 使用列的别名
- select ename '姓名',sal*12 as '年收入' from emp;
- 使用别名时,as 可省略,别名可用单引号,双引号或者不加
- 查询工资在 2000 到 5000 的员工情况
- ①, select * from emp where sal>=2000 and sal<=3000;
- ②, select * from emp where sal between 2000 and 3000;
where
- 使用where子句
- 如何显示工资高于的员工
- select ename from emp where sal>3000;
- 如何显示工资在到的员工情况
- select * from emp where sal>=2000 and sal<=250;
- select * from emp where sal between 2000 and 2500;(闭区间)
distinct
- distinct可选,指显示结果时,是否剔除重复数据
- select [distinct] * from emp;
like 查询
- %: 表示任意0到多个字符
- _: 表示任意单个字符
- 不区分大小写
- 如何显示首字符为S的员工姓名和工资
- select ename,sal from emp where ename like 'S%';
- 如何显示第三个字符为O的所有员工的姓名和工资
- select ename,sal from emp where ename like '__O%';
- 查询首字母不是 S 的雇员信息
- select ename,job from emp where ename not like 'S%';
in
- 如何显示empno为123,345,800...的雇员情况
- ①,select * from emp where empno=123 or empno=345 or empno=800;
- ②,select * from emp where empno in (123,456,800);
- 一般我们使用 in 这个关键字,这样效率更高
is null
- 如何显示没有上级的雇员的情况
- select * from emp where mgr is null;
group by 和having(重点)
- group by用于对查询的结果分组统计,默认升序
- having子句用于限制分组显示结果.
- 使用order by字句
- 如何按照工资的从低到高的顺序显示雇员的信息
- select ename,sal from emp order by sal asc;
- 按照部门号升序而雇员的工资降序排列
- select * from emp order by deptno asc,sal desc;
- 按照入职先后顺序排序
- select ename,hiredate from emp order by hiredate asc;
- ■使用列的别名排序
- select ename,sal*12 '年薪' from emp order by '年薪' asc;
- 别名需要使用''号圈中,也可以不在''号圈中。
- 如何显示每个部门的平均工资和最高工资
- select avg(sal),max(sal),deptno from emp group by deptno;
- 显示每个部门的每种岗位的平均工资和最低工资
- select avg(sal),max(sal),deptno,job from emp group by deptno,job order by deptno;
- 显示部门平均工资低于2000的部门号和它的平均工资
- 思路:
- 1,查询出各个部门的平均工资
- select avg(sal),deptno from emp group by deptno;
- 2,挑选出低于的
- select avg(sal),deptno from emp group by deptno having avg(sal)<2000;
- 对数据分组的总结
- 1 分组函数只能出现在选择列表、having、order by子句种
- 2 如果在select 语句种同时包含有group by ,having ,
- order by 那么他们的顺序是group by , having , order by
- 3 在选择列中,如果有列、表达式、和分组函数,那么这些列和
- 表达式必须有一个出现在group by 子句中,否则就会出错
- select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;
- 这里deptno就一定要出现在 group by 中
order by
- order by 子句用于排序结果集。
- asc表示升序
- desc表示降序
- 如何按照工资的从低到高的顺序显示雇员的信息
- select * from emp order by sal [asc];
- 查询学生信息,按照学号升序排列
- select * from student order by sno;
- 查询学生信息,按照年龄降序排列
- select * from student order by sage desc;
- 查询学生信息,按照年龄降序排列,如果年龄相等再按照学号升序排列
- select * from student order by sage desc,sno asc;
使用别名
- 1) select ename,sal '薪水' from emp;
- 2) select ename,sal "薪水" from emp;
- 3) select ename,sal 薪水from emp;
- 4) select ename,sal as '薪水' from emp;
- 5) select ename,sal as "薪水" from emp;
- 6) select ename,sal as 薪水from emp;
- ■使用列的别名排序
- select ename,sal*12 '年薪' from emp order by '年薪' asc;
sql server查询(SELECT ,where,distinct,like 查询,in,is null,group by 和having,order by,as)的更多相关文章
- SQL Server中INNER JOIN与子查询IN的性能测试
这个月碰到几个人问我关于"SQL SERVER中INNER JOIN 与 IN两种写法的性能孰优孰劣?"这个问题.其实这个概括起来就是SQL Server中INNER JOIN与子 ...
- SQL SERVER技术内幕之6 集合查询
1.定义 集合运算会对两个输入查询的结果集进行逐行比较,根据比较结果和所使用的集合运算来确定某一行是否应该包含在集合运算的结果中.因为集合运算是针对集合之间进行的计算,所以集合运算涉及的两个查询不能包 ...
- 不同SQL Server数据库之间的跨数据库查询
--不同SQL Server数据库之间的跨数据库查询 EXEC sp_addlinkedserver @server=N'OldDatabase', --自己定义别名 @srvproduct=N'', ...
- SQL Server中Table字典数据的查询SQL示例代码
SQL Server中Table字典数据的查询SQL示例代码 前言 在数据库系统原理与设计(第3版)教科书中这样写道: 数据库包含4类数据: 1.用户数据 2.元数据 3.索引 4.应用元数据 其中, ...
- SQL Server中SELECT会真的阻塞SELECT吗?
在SQL Server中,我们知道一个SELECT语句执行过程中只会申请一些意向共享锁(IS) 与共享锁(S), 例如我使用SQL Profile跟踪会话86执行SELECT * FROM dbo.T ...
- SQL Server 2017 SELECT…INTO 创建的新表指定到文件组
原文:SQL Server 2017 SELECT-INTO 创建的新表指定到文件组 SELECT-INTO 在 SQL Server 中也是常见的一个功能,过去用此方法创建的新表只能存储到默认的文件 ...
- 深入理解SQL Server数据库Select查询原理(一)
使用SQL Server十年有余,但是一直对其Select查询机制原理一致不明,直到最近有个通讯录表,很简单的一张表(但因简单,所以当时并没有考虑按部门排序问题),结果想查询某个单位所有部门(不重复) ...
- SQL Server性能优化(6)查询语句建议
1. 如果对数据不是工业级的访问(允许脏读),在select里添加 with(nolock) ID FROM Measure_heat WITH (nolock) 2. 限制结果集的数据量,如使用TO ...
- Sql Server系列:多表连接查询
连接查询是关系数据中最主要的查询,包括内连接.外连接等.通过连接运算符可以实现多个表查询.内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值.SQL Server中的内连接有 ...
- SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法
本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...
随机推荐
- Docker 更换国内的Hub源
前言 通常情况下,安装的Docker默认使用的是国外的Hub源,在pull镜像的时候很慢,甚至超时了,不动了,很烦人. 更换阿里云Docker的Hub源 阿里云 - 容器Hub服务控制台:https: ...
- 学习spring和spring mvc过程中遇到的一些问题
以下仅为个人通过网上查找资料总结的内容,如有不对的地方欢迎提出: 注解: @Controller//表明本类是一个Controller @RequestMapping(value="/dem ...
- linux下svn服务器端的操作
1.停止svn服务器端: [root@ www]# ps -ef|grep svnroot 21698 1 0 09:55 ? 00:00:00 svnserve -d -r /www/svn/roo ...
- 使用app测试Modelarts在线服务
1. 基础准备 本demo代码已上传github地址为 https://github.com/zxzxzxygithub/hwmodelartdemo clone下来之后导入android studi ...
- 【经验分享】linux交叉编译 - openssl动态库
一.准备工作 1.到openssl官网下载最新版本openssl(如openssl-1.1.1d.tar.gz),上传到linux编译机上(如上传到目录/home/test下),并使用tar -xvf ...
- 【玩转MLS系列】基础教程
1.申请华为机器学习服务MLS标准版服务: 1.如果还未注册华为云,请先进入华为云官网https://www.huaweicloud.com/进行注册:如果已注册,请登录,转第2步. 2.在华为云官网 ...
- mysql 授权用户 主从和备份
1.授权用户 mysql -uroot -p123qqq...A 进入数据库 grant all on *.* to dc@&q ...
- 自学PHP的第22天---ThinkPHP中的路由、ThinkPHP目录结构
这一切的一切都得从“Hello world”说起!!! 有很多东西在thinkPHP的官方开发文档上其实都有讲到,我在这里只是想记录自己每天坚持学习PHP的情况,今天接触ThinkPHP的路由,路由这 ...
- git 使用详解(10)-- 远程分支
远程分支 远程分支(remote branch)是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在Git 进行网络交互时才会更新.远程分支就像是书签,提醒着你上次连接远程仓库时上面各分支 ...
- 伸展树(Splay tree)的基本操作与应用
伸展树的基本操作与应用 [伸展树的基本操作] 伸展树是二叉查找树的一种改进,与二叉查找树一样,伸展树也具有有序性.即伸展树中的每一个节点 x 都满足:该节点左子树中的每一个元素都小于 x,而其右子树中 ...