T-SQL入门攻略之3-SQL简单查询

--> Title  : T-SQL入门攻略3-SQL简单查询

--> Author : wufeng4552

--> Date   : 2010-03-23

SQL语言最强大的功能是数据查询。

准备工作

首先建立测试数据

if object_id('student')is not null drop table student

go

CREATE TABLE student(

s_no nchar(8) PRIMARY KEY,

s_name nchar(8)NOT NULL,

s_sex nchar(2) CHECK(s_sex = N'' OR s_sex = N''),

s_birthday smalldatetime CHECK(s_birthday>='1970-1-1' AND s_birthday<='2000-1-1'),

s_speciality nvarchar(50)DEFAULT  N'计算机软与理论',

s_avgrade numeric(3,1)  CHECK(s_avgrade >= 0 AND s_avgrade <= 100),

s_dept nvarchar(50)  DEFAULT  N'计算机科学'

);

注:以上约束,默认等将在后续讲解

数据表的结构信息一般可以在系统目录中查询(information_schema.columns)包括表名,字段名,长度,类型等等

SELECT

 table_name ,

 column_name,

 isnull(column_default,'') default_value,

 is_nullable,

 data_type, isnull(isnull(isnull(character_maximum_length,numeric_precision),datetime_precision),1)length

FROM information_schema.columns

WHERE table_name='student'

添加数据

INSERT INTO student Values('20060201',N'李好',N'', '1987-1-1', N'计算机应 技术', 94.5, N'计算机系');

INSERT INTO student Values('20060202',N'王丫',N'', '1987-2-23', N'计算机软件与理论', 88.8, N'计算机系');

INSERT INTO student Values('20060203',N'王智高',N'', '1986-12-25', N'网络编程', 85.8, N'信息工程系');

INSERT INTO student Values('20060204',N'赵刚',N'', '1988-7-1', N'网络编程', 77.8, N'信息工程系');

INSERT INTO student Values('20060205',N'贾志',N'', '1985-9-18', N'计算机应技术', 45.0, N'计算机系');

INSERT INTO student Values('20060206',N'丽思',N'', '1984-8-1', N'计算机应 技术', 61.3, N'计算机系');

INSERT INTO student Values('20060207',N'赵智远',N'', '1983-11-2', N'电子商务', 72.8, N'电子商务 ¨t');

INSERT INTO student Values('20060208',N'王可',N'', '1985-5-28', N'电子商务', 55.7, N'电子商务 ¨t');

1FROM子句select语句

1.1查询所有

SELECT * FROM student

 

1.2 使用别名

SELECT s_no as 学号,

       s_name 姓名,

       s_sex 性别,

       s_birthday 年龄,

       s_speciality 专业,

       s_avgrade 平均成绩,

       s_dept 系别

FROM student

注:as 是默认的可以省略

1.3构造计算列

计算列是根据表中某一列或者若干列进行计算得到的

SELECT s_name 姓名,

       Year(getdate())-Year(s_birthday)年齡

FROM student;

以上语句中年龄可以用函数datediff实现

SELECT s_name 姓名,

       datediff(year,s_birthday,getdate())年齡

FROM student;

2:過濾重複記錄 Distinct

SELECT

    DISTINCT s_dept 系別

FROM student;

需要注意的是如果distinct後面跟多個字段關鍵子distinct只能放第一個列面之前一個語句只能只用一個distinct關鍵字

3TOP查詢

返回前面若干條記錄 TOP關鍵字有兩種格式

3.1 TOP N 返回前面的N條記錄

select top 3 * from student

3.2 TOP Percent 返回前面N%條記錄

select top 30 percent * from student

4:條件查詢 WHERE子句

查詢條件就是一種邏輯表達式,只有那些使表達式值為真的記錄才能按目標列表達式指定的方式組成一個新記錄從而添加到結果集中

4.1 連接詞構成的查詢(NOT,OR,AND等等)

優先級別從高到低順序是NOT,OR,AND,如果表達式中出現多個則按照優先級運算

SELECT *

FROM student

WHERE not (s_avgrade<60) or (s_sex='' and s_speciality='计算机应技术');

--等价于:

SELECT *

FROM student

WHERE not s_avgrade<60 or s_sex='' and s_speciality='计算机应技术';

以上

not (s_avgrade<60)平均成績及格

 

5:範圍查詢 BETWEENIN

5.1 BETWEEN

SELECT s_name 姓名,

       s_sex 性别 ,

       s_dept 系别 ,

       s_avgrade 平均成绩 ,

       s_birthday 出生年月

FROM student

WHERE s_birthday BETWEEN '1984-08-01' AND '1986-12-25';

--以上表示查詢出生日期在'1984-08-01''1986-12-25'之間的包括邊界

反之如果查詢不在'1984-08-01''1986-12-25'之間的包括邊界不在這個區間的

可以加上謂詞NOT

SELECT s_name 姓名,

       s_sex 性别 ,

       s_dept 系别 ,

       s_avgrade 平均成绩 ,

       s_birthday 出生年月

FROM student

WHERE s_birthday not BETWEEN '1984-08-01' AND '1986-12-25'

 

5.2 IN

INBETWEEN有類似的功能,都是查詢滿足某列值在一定範圍內的記錄但不同的是IN後面必須跟每句的列值表(列值的枚舉)即把所有的列值都列出來,相當與在一個集合中查詢。

SELECT s_name 姓名,

       s_sex 性别 ,

       s_dept 系别 ,

       s_avgrade 平均成绩 ,

       s_birthday 出生年月

FROM student

WHERE s_dept IN ('信息工程系','电子商务')

--以上查詢信息工程系與電子商務系的學生

--反之如果查詢不是信息工程系與電子商務系可以用謂詞NOT實現

SELECT s_name 姓名,

       s_sex 性别 ,

       s_dept 系别 ,

       s_avgrade 平均成绩 ,

       s_birthday 出生年月

FROM student

WHERE s_dept NOT IN ('信息工程系','电子商务')

 

6:模糊查詢

此部分將在下面單獨講解

 

 

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值