数据库入门教程(SQL Server 2005)----数据库是如何查询数据的

分类: 365beat怎么下载 发布时间: 2025-10-22 17:30:30
作者: admin 阅读: 3696 | 点赞: 101
数据库入门教程(SQL Server 2005)----数据库是如何查询数据的

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;

--输出奖金不为空的员工的信息