SQL必知必会

第一课了解数据库
1.1 数据库基础
数据库:保存有组织数据的容器
表:某种特定类型数据的结构化清单(一般情况下是一种类型一个表)
每个表都有唯一的一个名字来标识自己
模式:关于数据库和表的布局以及特性的信息
列(column):表由列组成,表中的一个字段,一个或多个列组成一个表;每列都有相应的类型,它限制应该存储的数据;
注意:数据类型的兼容性,相同得数据类型在不同的DBMS系统中的名称不一样
行(row):表中的一个记录(record);
主键:一列或者一组列,其值能够唯一标识表中每一行;
      在一个表中要保证主键是唯一的且不重复;
不为空(NULL值);
不能修改,不能更新;
不能重用;(之前删除的主键不能并重复使用)


第二课检索数据
2.1 SELECT语句(从一个或者多个表中检索信息):至少给出两条信息;
关键字(keyword):不能用作表或者列的名字;
2.2 检索单个列
输入▼ :
SELECT:prod_name(表中检索一个名为prod_name的列);
FROM Products(从哪个表中检索数据);
注意:根据DBMS不同,分号要求不一样,可以总是在每条语句后面加上分号;
提示:SQL语句不区分大小写,但一般SQL关键字使用大写,对于表名和列小写;
      SQL语句,其中所有空格都被忽略,可写成一行也可多行,多行便于阅读以及调试
2.3 检索多个列(较少使用实际检索出来数据)
不同:在SELECT关键字之后给出多个列名,列名之间用逗号隔开;
输入▼ :
SELECT prod_id, prod_name, prod_price 
FROM Products;
2.4 检索所有列
输入▼ :
SELECT * (通配符(*)返回表中所有列)
FROM Products;
注意:检索没有必要的列将降低检索和应用程序性能;
提示:可以检索出未知名字的列;
2.5 检索不同的值
输入▼ :
SELECT vend_id 
FROM Products;(检索方法)
其中:即使表中只有三个供应商但是有9个产品,也会返回9个值,供应商名字会重复
检索不同的值:
使用DISTINCT关键字:数据库只返回不同的值(必须放在列名的前面)
SELECT DISTINCT vend_id
FROM Products;
2.6 限制结果(在其他DBMS系统中有另外写法)
SELECT语句返回所有的行,但是我们只需要其中的几行?
在SQL Server和Access中使用SELECT时,可以使用TOP关键字
输入▼ :
SELECT TOP 5 prod_name
FROM Products;
2.7 使用注释
行内注释:
输入▼ :
SELECT TOP 5 prod_name  -- 这是一条注释(多数是用这种)
FROM Products;
多行注释:
输入▼ :
/* SELECT prod_nam
FROM Products; */ 
SELECT prod_name 
FROM Products; 
注释从/*开始,到*/结束,/*和*/之间的任何内容都是注释。


第三课排序检索数据
使用SELECT语句的ORDER BY子句
3.1 排序数据
子句(clause):
1.SQL语句构成了子句
2.子句有一个关键字加上所提供的数据组成
OREAD BY子句:(取一个或者多个列的名字)
1.为了显示而选择的列,显示该条列数据的顺序
2.通常在语句的最后一条语句;
输入▼  :
SELECT prod_name 
FROM Products 
ORDER BY prod_name;
3.2 按多个列排序
1. 简单指定列名,列名之间用逗号隔开
2. 代码检索 3 个列,并按其中两个列对结果进行排序
输入▼ :
SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY prod_price, prod_name;
注意:仅在多行具有相同的prod_price时,才会对产品进行 prod_name进行排序,若所有的价格都是唯一值,将不会对prod_name进行排序。
3.3 按列位置排序
ORDER BY 还支持按相对列位置进行排序:
1.把列名用它所对应的行来替代;
2.可以混合使用实际列名和相对列位置;
输入▼ :
SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY 2, 3;
3.4 指定排序方向
1. 默认的排序顺序-升序排序-(A到Z)
2. 进行降序排序-OREAD BY 子句需要指定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关键字:(DESCENDING)
1.只能应用到直接位于其前面的列名;
2.如果对多个列进行降序,需要在每个列名后面加上DESC关键字。


第四课过滤数据
使用SELECT语句的WHEAR子句指定搜索条件
4.1 使用WHEAR子句
WHERE子句:
1.数据根据WHEAR子句中指定的搜索条件进行过滤;
2.WHEAR子句的位置,位于ORDER BY子句后面,否则将会产生错误;
输入▼ :
SELECT prod_name, prod_price 
FROM Products 
WHERE prod_price = 3.49;(只返回值等于3.49的行)
4.2 WHEAR 子句操作符

WHERE子句操作符 

     操作符            说明

      操作符            说明

=              等于

< >            不等于

!=             不等于

<              小于

<=             小于等于

!<             不小于

>               大于

>=              大于等于

!>              不大于

BETWEEN         在指定的两个值之间

IS NULL         为NULL值    

范围值检查:BETWEEN操作符,需要两个值
输入▼ :
SELECT prod_name, prod_price 
FROM Products 
WHERE prod_price BETWEEN 5 AND 10;
空值检查:IS NULL操作符。


第五课高级数据过滤
组合WHEAR子句,建立更高级搜索条件,学习使用NOT和IN操作符
5.1 组合WHEAR 子句
SQL允许给出多个WHEAR子句,用AND或者OR结合
AND操作符:检索满足所有给定条件的行
输入▼ :
SELECT prod_id, prod_price, prod_name 
FROM Products 
WHERE vendid =‘DLL01' AND rodrice <= 4;
OR操作符:用来表示检索匹配任一给定条件的行
求值顺序:正确使用()表示AND和OR操作符组合起来求值顺序,使结果正确输出
5.2 IN操作符
IN 操作符:
1.用来指定条件范围,范围中的每个条件都可以进行匹配;
2.功能于OR操作符相似,但是比OR更加简单方便;
写法:例:WHERE vend_id IN ( ‘DLL01', ‘BRS01' )
5.3 NOT操作符
NOT操作符:有且只有一个功能,否定其后所跟的任何条件
输入▼ :
SELECT prod_name 
FROM Products 
WHERE NOT vend_id = ‘DLL01' 
ORDER BY prod_name ;(匹配非 DLLO1之外的所有东西)


第六课用通配符进行过滤
使用通配符,对数据进行复杂过滤,以及使用LIKE操作符进行通配搜索
6.1 LIKE操作符
通配符 :(wildcard)
1.搜索产品名中包含文本“bean bag”的所有产品;
2.用来匹配值的一部分的特殊字符;
3.通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。
4.为在搜索子句中使用通配符,必须使用 LIKE 操作符;
5.可以在任意位置使用,并且可以使用多个通配符;
百分号(%)通配符:
1.表示任何字符出现任意次数;
2.Access,需要使用*而不是%;
3.根据配置不同可以进行大小写的区分;
4.%表示搜索模式中给定位置的0个、1个或多个字符;
5.不可以匹配产品名称为NULL的行;
一个通配符:
输入▼ :
SELECT prod_id, prod_name 
FROM Products 
WHERE prod_name LIKE ‘Fish%’;(表示接受FISH之后的任意字符,不管有多少)
两个通配符:
输入▼ :
SELECT prod_id, prod_name 
FROM Products 
WHERE prod_name LIKE '%bean bag%';(表示任意位置包含文本 bean bag 的值)
以 F 起头、以 y 结尾的所有产品:
输入▼ :
SELECT prod_name 
FROM Products 
WHERE prod_name LIKE 'F%y';
1.注意y后面跟有空格,将会检索不出来;
2.简单解决方法 F%y% 写成这种格式,或者用函数将空格去掉;
下划线(_)通配符:
1.下划线的用途和%一样,但它只匹配单个字符,而不是多个字符;
    例:两个下划线匹配两个字符,单个字符将不会匹配出来,一个下划线匹配一个字符,不能多也不能少
2. DB2不支持通配符_;
3. Access通配符,需要使用?而不是_;
输入▼ :
SELECT prod_id, prod_name 
FROM Products 
WHERE prod_name LIKE ‘__ inch teddy bear'; 
方括号[]通配符:
1.用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符;
2.通配符可以用前缀字符^(脱字号)来否定;
3.在Access中需要用!来否定而不是^。
匹配名字以J或者M起头的联系人:
输入▼ :
SELECT cust_contact 
FROM Customers 
WHERE cust_contact LIKE '[JM]%' 
ORDER BY cust_contact;
6.2 使用通配符的技巧
1. 通配符搜索时间较长,不建议过度使用通配符;
2. 尽量不要把通配符放在开始处,这样搜索出来是最慢的;
3. 仔细注意通配符的位置,放错可能不会返回想要的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值