sql查询基本语法.docx
- 文档编号:9620281
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:8
- 大小:17.03KB
sql查询基本语法.docx
《sql查询基本语法.docx》由会员分享,可在线阅读,更多相关《sql查询基本语法.docx(8页珍藏版)》请在冰豆网上搜索。
sql查询基本语法
sql查询基本语法
1、计算列
select*fromemp
--*表示所有的
--fromemp表示从emp表查询
selectempno,enamefromemp;
selectename,sal*12as"年薪" fromemp
--as可以省略,记住“年薪“不要写成‘年薪’,也不要写成年薪,方便移植
selectename,sal*12as"年薪",sal"月薪",jobfromemp
select5fromemp;
--OK,输出一个常量值
--输出的行数是emp表的行数,每行只有一个字段,值是5
select5;
--ok
--不建议使用,没什么实际意义
注意:
在Oracle中字段的别名不允许用单引号括起来
但是SqlServer2005中却允许
因此为了兼容性,最好字段别名用双引号括起来,不要用单引号
2、distinct【不允许重复的】
select distinctdeptnofromemp; --distinctdeptno会过滤掉重复的deptno值
select distinctcomm fromemp; --distinct可以过滤掉重复的null,或者说如果有多个null,会把一个输出
select distinctcomm,deptno fromemp; --distinct把comm和deptno的组合进行过滤,查出两两互不相同的记录,
selectdistinctdeptno,commfromemp
--含义:
把deptno和comm的组合都不重复的输出
selectdeptno,distinctcommfromemp--error,deptno的元素多comm中的元素少
selectdeptno,distinctcommfromemp; --error,逻辑上有冲突
学习方式:
要多思考
3.between【在某个范围之内】
--查找工资在1500到3000之间(包括1500到3000)的所有员工的信息
select*fromempwheresalbetween1500and3000;
--等价于
select*fromempwheresal>=1500andsal<=3000;
--查找工资小于1500或者大于3000(包括1500到3000)的所有员工的信息
select*fromempwheresal<1500orsal>3000;
select*fromempwheresalnotbetween1500and3000;
4.in【属于若干个孤立值】
--把sal=1500和sal=3000的元素输出
select*fromempwheresal in (1500,3000);
--等价于
select*fromempwheresal=1500orsal=3000
--把sal不等于1500和sal不等于3000的元素输出
select*fromempwheresal notin (1500,3000);
--等价于
select*fromempwheresal!
=1500andsal!
=3000
select*fromempwheresal<>1500andsal<>3000
--数据库中不等于有两种表示:
!
=, <>,建议使用第二种
--多或取反是并且非并且取反是或
5、top:
【最前面的若干条诗句】可用于分页
selecttop2*fromemp; --筛选出前两行数据
selecttop2fromemp; --error
selecttop15percent*fromemp;--如果百分比不是整数则向上取整
--把工资在1500到3000之间(包括1500和300)的员工中工资最高的前4个人的信息输出
select top 4*fromemp where sal between1500and3000 orderbysal
--执行过程from哪个表->where->order排序->top->所有字节
--desc降序,不写则默认是升序(asc)
6、null【没有值,空值】
①、零和人null是不一样的,null表示空值,没有值,零表示一个确定的值
②、null不能参与如下的运算:
<> !
= =
③、null可以参与如下的运算:
is notis
--输出奖金非空的员工的信息-
select*fromempwherecomm<>null;--输出为空
select*fromempwherecomm!
=null;--输出为空
select*fromempwherecomm=null;--输出为空error
--总结:
null不参与<>!
==运算
--null可以参与isnotis
select*fromempwherecommisnull;--输出奖金为空的员工的信息
select*fromempwherecommisnotnull;--输出奖金不为空的员工的信息
④、任何类型的数据都允许是null
createtablet1(
namenvarchar(20),
cntint,
riqidatetime
)
insertt1values(null,null,null);
select*fromt1;
⑤、任何数字与null参与数学运算的结果永远是null
--输出每个员工的姓名年薪(包含奖金)comm假设是一年的奖金
selectempno,ename,sal*12+comm"年薪"fromemp;
--此程序证明,任何数字与null参与数学运算的结果永远是null
--正确的写法是:
selectempno,ename,sal*12+isnull(comm,0)"年薪"fromemp;
--isnull(comm,0)如果comm是null就返回零,否则返回comm的值
7、orderby【以某个字段排序】
orderbya,b --a和b都是升序
orderbya,bdesc --a升序,降序
orderbyadesc,b --a降序,b升序
orderbyadesc,bdesc --a降序,b降序
文字描述
如果不指定排序的标准,则默认是升序,升序用asc表示,默认可以不写
为一个字段指定的排序标准并不会对另外一个字段产生影响
强烈建议为每一个字段都指定排序的标准
例子:
--asc是升序的意思,默认可以不写,desc是降序
select*fromemporderbysal--默认是按照升序排序
select*fromemporder bydeptno,sal; --先按照deptno升序排序,如果deptno相同,再按照sal升序排序
select*fromemporder bydeptno desc,sal;
--先按照deptno降序排序,如果deptno相同,再按照sal升序排序,
--记住sal是升序,不是降序
--orderbyadesc,b,c,ddesc只对a产生影响,不会对后面的b、c、d产生影响
select*fromemporderbydeptno,saldesc;
--问题:
desc是否会对deptno产生影响?
--答案:
不会、
--先按deptno升序,如果deptno相同,再按sal降序
8、模糊查询
格式:
select字段的集合from表名where某个字段的名字like匹配的内容
匹配的条件通常含有通配符
%
表示任意0个或者多个字符
select*fromempwhereenamelike'%A%'; --ename只要含有字符A就输出
select*fromempwhereenamelike'A%';--ename只要首字母是A的就输出
select*fromempwhereenamelike'%A';--ename只要未字母是A的就输出
_[这是下划线不是减号]
表示单个字符
select*fromempwhereenamelike'_A';--ename只要第二个字母是A的就输出
[a-f]
a到f中的任意单个字符,只能是abcdef中的任意一个
select*fromempwhereenamelike'_[A-F]%';
--把ename中第二个字母是A或B或C或D或E或F的数据输出
[a,f]
a或f
[^a-c]
不是a,也不是b,也不是c的任意单个字符
select*fromempwhereenamelike'_[^A-F]%';
--把ename中第二个字母不是A也不是B也不是C也不是D也不是E也不是F的数据输出
注意:
匹配的条件必须用单引号括起来 不能省略 也不能改用双引号
通配符
通配符作为不同字符使用的情况
select*from表明wherenamelike'%\%%' escape '\' --把name中包含有%的输出
select*from表明wherenamelike'%m%%' escape 'm'//escape后面的内容表明在其之后的元素当做转义字符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sql 查询基本语法 查询 基本 语法