1、计算列
//以scott数据库中的emp表为例-----where可译为查找,其本质是在进行表中的数据筛选。
对于筛选字段,自from到where或其后任何一个语句,都是用来产生一个临时表,再选取其中字段进行显示,此时from后的第一个关键字筛选不能使用select后的别名。
select * from emp;
--这个语句查询emp表中的所有数据,并显示。
--对于sql语句,每个语句后添加‘;’。
--对于像creat table()中的语句,每个元素或每个语句后面添加“,”但是最后一个语句可以不添加。
--select语句中“*”表示所有的(数据)。
--fron emp 表示从emp表中查询。
select empno, ename from emp;
-- 此语句仅仅查询表emp中的empno,enamel字段的数据,并显示。
select ename, sal*12 from emp;
--其中sal代表数值工资,可以对字段进行计算,但是此时显示没有列名
--可以通过as “名字”的方式进行为列添加名字(别名)。
select ename, sal*12 as "年薪" from emp;
----as 可以省略;记住:"年薪"中的双引号不能省略;
----在sql server中使用单引号也可行,但为了在Oracle中便于移植,通常使用 emp;双引号;
----使用"年薪”后,计算后得到的数值显示的列名为:年薪。
select 5 from emp;
seles,每行只有一个字段,值为5;显示时此字段无名称。
select ename, sal*12 as "年薪" ,sal "月薪",job from emp;
--每个字段通过逗号进行分割,数据库先查询到表依次对每个字段进行查询显示。
--通过双引号进行添加别名,显示时显示更改后的别名。
2
、distinct【不允许重复的】
//以scott数据库中的emp表为例
select deptno from emp;
--依照表中数据显示14条记录,重复项依然显示,但是有时又不需要显示重复项。
select distinct deptno from emp;
--此时只显示3行数据,使用distinct可以过滤掉字段的的deptno中重复的值,deptno字段中均是整型值,无空值
select distinct comm from emp;
单独过滤一个字段,将此字段中相同的对象去除只保留一个
--distinct可以过滤掉重复的null值,或者说是如果一个字段中含有多个null值,只输出一个。
select distinct comm,deptno from emp;
--如此过滤的是,两个对象的这三个字段相同的,将其中一个过滤掉。
--把comm,deptno字段进行组合过滤。而不是进行分开过滤或者是单独过滤前者。
select deptno,distinct comm from emp;
--error逻辑上存在冲突。
3、between【在某个范围】
//以数据库scott中的emp表为例
--查找工资在1500到3000之间的所有员工的信息
select * from emp
where sal>=1500 and sal <=3000
等价于
select * from emp
where sal between 1500 and 3000
--其中where表示“判断”条件是否成立,若成立返回值是1时输出;where即使过滤
--and表示“与”;
--此sql语句单独对sal字段中数据进行判断并输出符合条件的值。
--查找工资在小于1500或大于3000之间的所有员工的信息
select * from emp
where sal<1500 or sal>3000
等价于
select * from emp
where sal not between 1500 and 3000
--其中or表示“或”的含义
--between........and表示"在两者之间的范围”。
4、in【属于若干个孤立的值或确定的某个值】
//以数据库scott中的emp表为例
select *from emp where sal in (1500,3000,5000)
--把记录中sal值是1500、3000、5000的记录进行输出。
等价于
select *from emp
where sal=1500 or sal=3000 or sal=5000
select *from emp where sal not in (1500, 3000, 5000)
--把把记录中sal值不是1500、3000、5000的记录进行输出。
等价于
select *from emp
where sal!=1500 and sal!=3000 and sal!=5000
--数据库中不等于有两种表示方式:!= <>(推荐使用)
--对或进行取反是并且,对并且取反是或
5、top【表前面的部分行】
//以数据库scott中的emp表为例
select *from emp;
--查询显示整张表
select top 2 * from emp;
--查询并显示表的前两行记录
select top 15 percent * from emp;
--查询并显示表前面15%的部分,若表的15%是2.1则显示3条记录。
--把工资在1500到3000之间(包括1500和3000)的员工中工资最高的前四个人的信息输出
--先将表进行降序排列,然后输出显示前四个
select top 4 * from emp
where sal between 1500 and 3000
--输出1500到3000中前4个
order by sal desc--order by--顺序输出,dec指降序方式输出显示
--当不添加关键字desc时,默认以升序的方式进行排序
6、null【没有值或者空值】
//以数据库scott中的emp表为例
零值和null是不一样的,null表示空值,没有值;零表示一个确定的值。
任何类型的数据都允许为null;
create table tl(name nvarchar(20),cnt int,riqi datetime);
insert into tl value(null,null,null);
select * from tl;
--如此给该表添加三个空值,依然可以正常输出显示表
任何数字与null参与数学运算结构都是null;
--输出每个员工的姓名年薪(包含奖金) comm假设是一年奖金
select empno,ename,sal*12+comm "年薪" from emp;
--本程序证明了:null不能参与任何数据运算否则结果永远为空
--正确写法为:
select ename, sal*12+isnull(comm,0) "年薪" from emp;
--isnull(comm,0)如果comm是null 就返回零否则返回comm的值;
--输出奖金非空的员工的信息
select * from emp;
select * from emp where comm <> null;--error命令
--总结:null不能参与<> != = <= >=运算
--null可以与is not is进行结合
select * from emp where comm is null;--输出奖金为空的员工的信息
select * from emp where is not null;
--输出奖金不为空的员工的信息