SQL必知必会 第一篇

第一课

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

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

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

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

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


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



第二课

        这一课介绍如何使用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通配符,还说明了通配符应该细心使用,不要使用过度



        


        

猜你喜欢

转载自blog.csdn.net/weixin_42048278/article/details/80050072
今日推荐