SQL复习(1)
1、主键:表中每一行都应该有一列可以唯一标识自己。
第2课检索数据
2、检索单个列
select prode_name from Products;
3、检索多个列
select prod_id,prod_name,prod_price from Products;
4、检索所有列
select * from Products;
5、检索不同的值
select vend_id from Products;
6、限制结果
select top 5 prod_name from Products;//只检索前面5行数据
select prod_name from Products limit 5 offset 5;//limit指定返回的行数,offset指定从哪儿开始
注意:第0行(第一个被检索的行是第0行,而不是第一行。)因此,limit 1 offset 1,会检索第2行,而不是第一行。
使用注释 --或者# 单行注释//–和#之后的文本就是注释
/* */ 多行注释
第3课排序检索数据
3.1排序数据
select prod_name from Products;
select prod_name from Products order by prod_name;//order by子句应该保证它是select语句中最后一条子句
3.2按多个列排序
select prod_id,prod_price,prod_name
from Products order by prod_price,prod_name;
3.3按列位置排序
select prod_id,prod_price,prod_name
from Products order by 2,3;
order by 2表示按select清单中第二个列prod_price进行排序,order by 2,3表示先按prod_price,再按prod_name进行排序。
3.4指定排序方向
默认是升序排序,要进行降序排序需要使用desc关键字。
select prod_id,prod_price,prod_name
from Products order by prod_price desc;
select prod_id,prod_price,prod_name
from Products order by prod_price desc,prod_name;
//desc关键字只应用到直接位于其前面的列。在上例中只对prod_price列指定desc,对prod_name不指定。prod_name仍然是按标准的升序排序
//关键字asc是升序,但实际上是默认升序,asc没多大用处
第4课过滤数据
4.1使用where子句
select prod_name,prod_price
from Products where prod_price = 3,49;//只返回prod_price值为3.49的行
注意:where子句的位置,在同时使用order by和where子句时,应该让order by 位于where之后。
4.2where子句操作符
表4-1where子句操作符
操作符 | 说明 | 操作符 | 说明 |
---|---|---|---|
= | 等于 | > | 大于 |
<> | 不等于 | >= | 大于等于 |
!= | 不等于 | !> | 不大于 |
< | 小于 | between | 在指定的两个值之间 |
<= | 小于等于 | is null | 为NULL值 |
!< | 不小于 |
4.2.1检查单个值
select prod_name,prod_price
from Products where prod_price < 10;
4.2.2不匹配检查
select vend_id,prod_name
from Products where vend_id <>'DLL01';//单引号用来限定字符串
——————
select vend_id,prod_name
from Products where vend_id !='DLL01';//!=和<>通常可以互换,但并非所有的DBMS都支持这两种不等于操作符。
4.2.3范围值检查
select prod_name,prod_price
from Products where prod_price between 5 and 10;
4.2.4空值检查
select prod_name
from Products where prod_price is null;
//这条语句返回所有没有价格的产品,不是价格为0的产品
select cust_name
from Customers where cust_email is null;
第5课高级数据过滤
5.1组合where子句
5.1.1and操作符和or操作符
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';
5.1.3求值顺序
and的优先级高于or
select prod_name,prod_price
from Products where vend_id = 'DLL01' or vend_id = 'BRS01' and prod_price >= 10;
//在处理or操作符之前,优先处理and操作符。
//输出供应商为BSR01制造价格为10美元以上的所有产品,以及DLL01制造的所有产品,而不管其价格如何。
select prod_name,prod_price
from Products where (vend_id = 'DDL01' or vend_id = 'BRS01') and prod_price >= 10;
//这时sql语句变成了选择供应商为DDL01或BRS01制造的且价格在10美元及以上的所有产品。
5.2 in操作符
select prod_name, prod_price
from Products where vend_id in ('DLL01', 'BRS01') order by prod_name;
5.3 not 操作符
select prod_name from Products where not vend_id = 'DDL01' order by prod_name;
第6课 用通配符进行过滤
通配符搜索只能用于文本字段,非文本数据类型字段不能使用通配符搜索。
6.1 like操作符
6.1.1 百分号(%)通配符
select prod_id, prod_name
from Products where prod_name like 'Fish%';
//将搜索任意以Fish起头的词。%告诉DBMS接受Fish之后的任意字符,不管它有多少字符。
说明:区分大小写,根据DBMS的不同及其配置,搜索可以是区分大小写的。
select prod_id, prod_name
from Products where prod_name like '%bean bag%';
//表示匹配任何位置上包含bean bag的值,不论它之前或之后出现什么字符。
select prod_name
from Products where prod_name like 'F%y';
//以F起头,以y结尾的产品
6.1.2 下划线(_) 通配符
(_),下划线的用途与%一样,但它只匹配单个字符,而不是多个字符
select prod_id, prod_name
from Products where prod_name like '__ inch tedyy bear';