欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL必知必会 第一篇

程序员文章站 2022-05-09 21:15:39
...

第一课

        主键(primary key):一列或一组列,其值能够唯一标识表中的每一行

        1. 任意两行都不具有相同的主键值

        2. 每一行都必须有一个主键值(不允许NULL)

        3. 主键列中的值不允许修改或更新

        4. 主键值不能重用(如果从表中删掉某行,它的主键不能赋给以后的新行)


所使用的是SQL Server,在开始正式的练习前先给出所用的数据库关系图:

SQL必知必会 第一篇


第二课

        这一课介绍如何使用SELECT语句从表中检索一个或多个数据列

        主要代码如下:

select prod_name
from products;
select prod_id, prod_name, prod_price
from products;
select *
from products;
select distinct vend_id
from products;
select top 5 prod_name
from Products;
select prod_name --这是一条注释
from Products;

        1. SQL不区分大小写

        2.(*)表示通配符,表示返回表中所有列,最好不要使用*通配符

        3. DISTINCT 关键字指示数据库只返回不同的值,而且作用于所有的列,不能部分使用

        4. 在SQL Server中,用TOP关键字来限制最多返回多少行

        5. 第一个被检索的行是第0行,不是第1行,这里要注意

        6. 注释用--或者#都可以

小结:这一课讲了如何使用SQL的SELECT语句来检索单个表列,多个表列以及所有表列。讲了如何返回不同的值,如何注释代码。不幸的是,更复杂的SQL使得SQL代码变得不轻便。


第三课

        这一课讲授如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据

        主要代码如下:

select prod_name
from products
order by prod_name;
select prod_id, prod_price, prod_name
from products
order by prod_price, prod_name;
select prod_id, prod_price, prod_name
from Products
order by 2, 3;
select prod_id, prod_price, prod_name
from Products
order by prod_price desc, prod_name;

        1. ORDER BY语句应该处于SELECT语句中的最后一句

        2. 可以使用非检索的列进行排序

        3. 按多个列排序时,排序的顺序按照规定进行

        4. 可以用相对列位置进行排序

        5. ORDER BY语句是默认升序排序的,如果想要降序排序,使用DESC关键字,DESC关键字只作用于直接位于其前面的列名

        6. 如果需要区分大小写和排序顺序,要请求数据库管理员的帮助

小结:这一课讲了如何用SELECT语句的ORDER BY子句对检索出的数据进行排序。这个字句必须是SELECT语句中的最后一条子句。根据需要,可以用它在一个或多个列上对数据进行排序。


第四课

        这一课讲授如何使用SELECT语句的WHERE子句指定搜索条件

        主要代码如下:

select prod_name, prod_price 
from products
where prod_price = 3.49;
select prod_name, prod_price
from Products
where prod_price < 10;
select prod_name, prod_price
from Products
where prod_price <= 10;
select vend_id, prod_name
from Products
where vend_id <> 'DLL01';
select vend_id, prod_name 
from Products
where vend_id != 'DLL01';
select prod_name, prod_price
from Products
where prod_price between 5 and 10;
select prod_name
from Products
where prod_price is null;
select cust_name
from Customers
where cust_email is null;

        1. 在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤

        2. 在同时使用ORDER BY子句和WHERE子句时,应该让ORDER BY子句位于WHERE之后

        3. 操作符的兼容性取决于DBMS

        4. 单引号用来限定字符串,如果将值与字符串类型的列进行比较,就需要单引号

        5. 通过过滤选择不包含指定值的所有行时,可能希望返回含NULL值的行,但是这做不到。过滤数据时,一定要验证被过滤列中含NULL的行确实出现在返回的数据中

小结:这一课讲了如何使用SELECT语句的WHERE子句过滤返回的数据。此外,还有如何检验相等、不相等、大于、小于、值的范围以及NULL值等。


第五课

        这一课讲授如何组合WHERE子句来建立功能更强、更高级的搜索条件。还有,将学习如何使用NOT和IN操作符

        主要代码如下:

select prod_id, prod_price, prod_name
from Products
where vend_id = 'DLL01' and prod_price <= 4;
select prod_name, prod_price
from Products
where vend_id = 'DLL01' or vend_id = 'BRS01';
select prod_name, prod_price
from Products
where (vend_id = 'DLL01' or vend_id = 'BRS01') 
	  and prod_price >= 10;
select prod_name, prod_price
from Products
where vend_id in ('DLL01', 'BRS01')
order by prod_name;
select prod_name
from Products
where not vend_id = 'DLL01'
order by prod_name;

        1. 在使用具有AND和OR操作符时,应该加括号来明确地分组,不要依赖于默认的求值顺序(先AND后OR)

        2. IN和NOT操作符具有更多的优势,尽量多使用

小结:这一课讲授了如何用AND和OR操作符组合成WHERE子句,还讲授了如何明确地管理求值顺序,如何使用IN和NOT操作符


第六课

        这一课介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤

        主要代码如下:

select prod_id, prod_name
from Products
where prod_name like 'fish%';
select prod_id, prod_name
from Products
where prod_name like '%bean bag%';
select prod_name
from Products
where prod_name like 'f%y';
select prod_id, prod_name
from Products
where prod_name like '__ inch teddy bear';
select prod_id, prod_name
from Products
where prod_name like '%inch teddy bear';
select cust_contact from Customers
where cust_contact like '[jm]%'
order by cust_contact;
select cust_contact 
from Customers
where cust_contact like '[^jm]%'
order by cust_contact;
select cust_contact
from Customers
where not cust_contact like '[jm]%'
order by cust_contact;

        1. 通配符(wildcard)是用来匹配一部分的特殊字符

        2. LIKE操作符指示DBMS,后面的搜索模式利用通配符匹配而不是简单的相等匹配

        3. 配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索

        4. %表示任意字符出现任意次数,代表搜索模式中给定位置的0个、1个或多个字符

        5. 如果DBMS用空格来填补字段的内容,会使 'f%y'这样的语句没成功检索想要的结果,简单的解决办法是给搜索模式再增加一个%号:'f%y%',更好的解决办法是使用函数(见第八课)

        6. 通配符%无法匹配NULL,NULL表示的是不存在

        7. 通配符_每次只匹配单个字符,而不是多个字符

        8. 使用__时注意要在后面加一个空格,否则空格也是字符会被匹配,会产生错误    

        9. [jm]匹配括号里任意一个字符,它也只能匹配单个字符,此通配符可以用前缀字符^来否定

        10. 通配符搜索比前面讨论的其他搜索要耗费更长的时间,不要过度使用通配符

        11. 如果确实要使用通配符,也尽量不要把它放在搜索模式的开始处,这样是最慢的

        12. 仔细注意通配符的位置

小结:这一课介绍了什么是通配符,如何在WHERE子句中使用SQL通配符,还说明了通配符应该细心使用,不要使用过度