什么是SQL
SQL
: Structured Query Language 结构化查询语言
基本概念
数据库 database
: 保存有组织的数据的容器表 table
是一种结构化的文件 用来存储某种特定类型的数据数据库中的每个表都有一个名字来标识.名字是唯一的.
说明:表明
模式
: 关于数据库和表的布局以及特性的信息列
: 表中的一个字段. 所有的表都是由一个或多个列组成的.数据类型
: 所允许的数据的类型. 每个表列都有相应的数据类型.行
: 表中的数据是按行存储的. 表中的一个记录.主键
: 一列or一组列,其值能够唯一标志表中的每一行.主键应该满足的条件:
- 任意两行都不具有相同的主键值
- 每一行都必须具有一个主键值. 主键值不与允许为
NULL
- 主键列中的值不允许修改和更新
- 主键值不能重用(若某行被删除 它的主键值不能再赋给以后的行)
外键
检索数据
SELECT语句
- 为了使用
SELECT
检索表数据. 必须至少给出两条信息. 想选择什么以及从什么地方选择.
检索单个列
SELECT prod_name
FROM Products
-- 从Products表中检索一个名为prod_name的列
检索多个列
检索多个列仍然用相同
SELECT
语句.唯一不同的是必须在SELECT后面给出多个列名.列名之间用逗号分隔.SELECT prod_id,prod_name,prod_price,prod_desc FROM Products;
检索所有列
SELECT *
FROM Products;
检索不同值
SELECT
语句返回所有匹配的行.DISTINCT
关键字 : 指示数据库只返回不同的值SELECT DISTINCT vend_id FROM Products;
限制结果
TOP
关键字 : 限制最多返回多少行SELECT prod_name FROM Products LIMIT 5; -- MySQL,SQlite,用的是LIMIT子句 SELECT prod_name FROM Products LIMIT 5 OFFSET 5; -- OFFSET 指定从哪儿开始 SELECT prod_name FROM Products LIMIT 5,4 -- LIMIT 5,4 即 LIMIT 4 OFFSET 5 前面是便宜量 后面是数量
使用注释:
--
/* */
排序检索数据
排序数据
SELECT prod_name
FROM Products
ORDER BY prod_id;
-- 注意ORDER BY子句的位置
-- 排序可以使用检索列 / 也可以使用非检索列
按多个列排序
SELECT prod_id,prod_name,prod_price
FROM Products
ORDER BY prod_price,prod_name;
-- 仅在多个行有相同prod_price时,才继续按prod_name排序
按列的位置排序
SELECT prod_id,prod_name,prod_price
FROM Products
ORDER BY 2,3;
-- 先按第二个即prod_name排序,再按prod_price排序
指定排序方向
数据排序不仅限于升序排序
还可以使用
ORDER BY
子句进行降序必须指定
DESC
关键字SELECT prod_id,prod_price,prod_name FROM Products ORDER BY prod_price DESC;
在多个列上降序排序 必须对每一列指定
DESC
关键字
过滤数据
使用WHERE子句
WHERE
子句指定搜索条件SELECT prod_name,prod_price FROM Products WHERE prod_price = 3.49;
WHERE
子句的位置在ORDER BY
之前! 必须先选出数据才能排序
WHERE子句操作符
操作符 | 说明 | 操作符 | 说明 |
---|---|---|---|
= | 等于 | > | 大于 |
<> | 不等于 | >= | 大于等于 |
!= | 不等于 | !> | 不大于 |
< | 小于 | BETWEEN | 在指定两个值之间 |
<= | 小于等于 | IS NULL | 为NULL值 |
!< | 不小于 |
检查单个值
SELECT prod_name,prod_price FROM Products WHERE prod_price <10;
不匹配检查
SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id <> 'DLL01';
范围值检查
SELECT prod_id, prod_price, prod_name FROM Products WHERE prod_price BETWEEN 5 AND 10;
空值检查
SELECT cust_name FROM Customers WHERE cust_email is null;
高级数据过滤
组合WHERE子句
AND
操作符号 : 满足所有条件select prod_id,prod_price,prod_name from Products where vend_id = 'DLL01' AND prod_price <= 4;
OR
操作符 : 任一条件满足select prod_name,prod_price from Products where vend_id = 'DLL01' or vend_id = 'BRS01';
AND
的优先级高于OR
注意使用圆括号()
IN
操作符 : 用来指定条件范围 范围中每个条件都可以进行匹配IN
取一组逗号分隔括在圆括号内的合法值.select prod_name,prod_price from Products where vend_id in ('DLL01','BRS01');
NOT
操作符 : 否定其后的条件!select prod_name from Products where vend_id not in ('DLL01','BRS01');
使用通配符进行过滤
LIKE
操作符
- 通配符 : 用来匹配一部分特殊字符
- 搜索模式 : 字面值 通配符 或二者组成的搜索条件
- 谓语 :
百分号 %
通配符
%
表示任何字符出现任意次数!-- 找出所有以词Fish起头的产品 select prod_id,prod_name from Products where prod_name like 'Fish%';
%
不会匹配NULL
的行!
下划线 _
通配符
_
表示单个字符!-- _ 表示单个字符 select prod_id,prod_name from Products where prod_name like '_ inch teddy bear'; --where prod_name like '__ inch teddy bear';
方括号 []
通配符
[]
表示指定一个字符集.它必须匹配指定位置的一个字符-- 找出所有以J或M开头的联系人 select cust_contact from Customers where cust_contact like '[JM]%'; -- 否定 -- where cust_contact like '[^JM]%'; -- where not cust_contact like '[JM]%';