sql2000学习笔记之基础知识

T-SQL语言及常用工具介绍

T-SQL语言是微软在sql server中使用的编程语言,它是一个数据定义、控制和操作语言。

T-SQL分为以下三种类型:

1、数据定义语言 DDL:创建、更改、删除等

2、数据控制语言 DCL:权限控制,数据备份等

3、数据操作语言 DML:查询、插入、更新、删除

MS SQL Server提供了两种实用工具,这两种工具都用于执行T-SQL语句

1、查询分析器:图形化工具

2、OSQL实用工具:命令行工具

常用参数说明:

-S:连接的服务器名称

-U:用户名

-P:用户密码

-E:使用windows账户登录

-Q:后接具体的TSQL语句,执行后,退出OSQL工具

-q:后接具体的TSQL语句,执行后,不退出OSQL工具,可继续执行其他命令。但输入其他命令后,回车不执行,需使用"GO"命令执行

exit:退出OSQL工具

-i:从文件(*.sql)中读取命令行,执行后退出

-o:后接完整文件路径,将命令执行后得到的结果输出至文件

注意:参数对大小写敏感。

下面的学习全部围绕sql2000自带的两个范例数据库,Northwind和pubs,来进行说明。

Northwind模拟了一家业务型公司所建立的数据库,其中包括员工信息、客户信息、产品信息、供应商信息等。

pubs模拟了一家出版社所建立的数据库,其中包括出版书籍信息、员工信息、作者信息等。

 

select语句

select语句属于DML语言,使用最为频繁,作用是查询数据库。

1、需要一张表,包含:所有员工的所有信息。

分析:需要单张表中所有数据

语法:select * from 表名

作用:检索单张表中所有的行列,其中的*号代表所有数据

答案:select * from employees

2、需要一张表,包含:所有员工的员工号、姓名和职务。

分析:只需要单张表中特定的列

语法:select 列名[,列名...] from 表名

答案:select employeeID,lastname,firstname,title from employees

3、需要一张表,包含:交易号,产品代号,交易额

分析:表中并没有交易额的列,但可以通过产品单价列*产品数量列来进行计算

答案:select orderID,productID,unitPrice*Quantity from [order details]

注意:order details外围的方括号是必要的,因为tsql语言以空格为分隔符,但因order details为一个元素,为不引起歧义,必须用方括号进行标记,此方括号称为限定符

4、需要一张表,包含:所有美国员工的姓名以及其居住城市的信息。

分析:这张表有两列,姓名及居住城市(列),条件为"country"字段为"USA",需使用where关键字来声明条件

语法:select 列名[,列名...] where 筛选条件

其中,筛选条件使用比较表达式,其又使用以下几种比较运算符:

=等于、>大于,<小于,>=大于等于,<=小于等于,<>不等于,()优先级控制

注意点:(1)表达式结果为TRUE时,显示结果

(2)字符、日期型数据要用单引号包含之

答案:select firstname,lastname,city from employees where country='USA'

5、需要一张表,包含:客户公司名中包含"Restaurant"的公司名称及联系方式

分析:模糊查找客户公司名称,需使用通配符。所谓通配符,即是代表任意字符

通配符的种类:

%:代表0个或多个字符的任意字符串

_:任意单个字符

[]:任意在指定范围内或集合中的单个字符,如[a-e]表示a到e中任意字符,[abc]表示a/b/c中任意字符

[^]:任意不在指定范围内或集合中的单个字符,如[a-e]表示不在a到e中的任意字符,[abc]表示除a/b/c以外的任意字符

通配符必须与like关键字一起使用。

答案:select companyname,address from customers where companyname like '%Restaurant%'

6、需要一张表,包含:所有姓氏第二个字母为a的员工信息

分析:使用通配符进行筛选

答案:select firstname,lastname from employees where firstname like '_a%'

注意:作为筛选条件的字符串对大小写不敏感。

7、需要一张表,包含:姓氏为carson,carsen,karson或karsen的作者(在pub中查询)

分析:找出这几个字符串的相同点与不同点,相同点为,第一个字母不是c就是k,之后的三个字母都是ars,随后的一个字母不是o就是e,最后一个字母n相同。可用通配符搭配来进行查询

答案:select au_lname,au_fname from authors where au_lname like '[ck]ars[oe]n'

8、需要一张表,包含:产品价格在10美元与20美元之间的产品名称和价格

分析:此表包含两列,产品名称和价格,条件是产品价格在10美元到20美元之间,需使用条件运算符。

条件运算符有三种:

and:与,真-真-真,真-假-真,假-真-真,假-假-假,优先级2

or:或,真-真-真,真-假-假,假-真-假,假-假-假,优先级3

not:非,真-假,假-真,优先级1

答案:select productname,unitprice from products where (unitprice>10) and (unitprice<20)

9、需要一张表,包含:预付款不超过5500元的书名(pubs数据库)

分析:使用条件运算符

答案:select title from titles where not advance<5500

10、需要一张表,包含:商业书籍和心理学书籍的名称

分析:筛选条件为type为"business"和"psychology"的书,是用条件运算符

答案:select title from titles where type='business' or type='psychology'

11、需要一张表,包含:预付款超过5500元的商业书籍或心理学书籍

分析:三个条件,使用条件运算符的搭配

答案:select title from titles where (type='business' or type='psychology') and (advance>5500)


扩展知识:

1、关键字between...and...,中文译为"在...与...之间",正如它的字面意思,其作用表示了一个范围,看一个例子。

select title from titles where advance between 3000 and 5000

以上语句执行后,预付款在3000至5000的书,会全部显示。注意,包括边界值(包括3000和5000)

2、关键字in(...),其作用是任取括号内的值,相当于or关键字,看一个例子。

select title from titles where type in('business','psychology')

相当于:select title from titles where type='business' or type='psychology'

以上两条关键字,完全可以用and和or替代,但使用between...and...和in会使代码更简洁。

 

12、需要一张表,包含:没有传真号的供应商公司名称和联系方式

分析:没有传真号的,即表示传真号这一列的值为空,用NULL来表示。

注意,NULL与0或者空格不同;NULL不能比较,例如,两个NULL是不相等的;NULL的序号是最小的,在升序排列中排第一。

语法:select 列名[,列名...] from 表名 where 列名 is [not] NULL

答案:select companyname,phone from suppliers where fax is NULL

13、需要一张表,包含:每种商品的名称与价格,价格按升序排列

分析:关键在升序排列,需使用order by关键字进行排序,其后还要选择参数asc或desc,分别表示升序排列和降序排列

语法:select 列名[,列名...] from 表名 order by 列名 参数(asc或desc)

答案:select productname,unitprice from products order by unitprice asc

注意,这里的asc可以省略,因为默认为asc,如要降序排列,必须加desc。

14、需要一张表,包含:出版商名称,出版商类型和价格,要求按出版商名称降序排列,再按出版商类型升序排列,最后按价格升序排列

分析:需要进行三次排序,第一次按出版商名称排序,第二次在已排序的基础上,按出版商类型排序,最后,在前两次排序的基础上,按价格排序。

答案:select pub_id,type,price from titles order by pub_id desc,type,price

15、需要一张表,包含:供应商所属的国家

分析:特别之处在于,每个国家只能出现一次,这必须使用distinct关键字检索唯一值,将重复出现的值删除。

语法:select distinct 列名[,列名] from 表名

答案:select distinct country from suppliers

16、需要一张表,包含:员工ID,员工姓氏与名。列名必须按照以下方式指定:employee:,first,last

分析:让查询结果使用指定的列名

语法:select 列名 as 自定义列名[,列名 as 自定义列名...] from 表名

答案:select employeeid as [employee:],firstname as first,lastname as last from employees

你可能感兴趣的:(sql,sql,server,语言,工具,出版,TSQL)