打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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:模糊查詢

此部分將在下面單獨講解

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MySQL
sql server查询(SELECT ,where,distinct,like 查询,in,is null,group by 和having,order by,as)
5-3
MySQL多表查询讲解
SQL Server与oracle两者区别之语法区别
SQL语句汇总(二)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服