第 1 章
- 介绍数据库中的一些名词和解释
- 本书用到的. sql 脚本
- SQL 语句的特点
涉及名词
- database(数据库) , 保存有组织的数据的容器
- DBMS , 数据库管理软件, 通过 DBMS 管理 database
- table(表), 储存 同一类型 / 一个清单 的数据
- schema(模式), 关于数据库和表的布局和特性的信息
- column(列), 表中的一个字段, 通过列组成表
- row(行), 每一行表示一个记录
- primary key(主键), 用于唯一区分表中每个行, 需满足: 非空, 唯一
- 建议: 主键值不会更改, 不重用
SQL 语句特点
- 结束用” ; “
- 不区分大小写
- 建议: 关键词使用大写
- 所有空格都是被忽略的
第 2 章
- 介绍如何连接和登录到 MySQL
- 如何执行 Sql 语句
- 如何获取数据库和表信息
1. 连接和登录
- 需要用到: 主机名, 端口, 用户名, 密码 (如果有的话)
mysql -u 用户名 -p ( -h 登录的主机ip -P 端口号 )
括号里表示可以不用
2. 数据库基本操作
- 使用” test “数据库:
use test;
- 输出
Database changed
- 显示所有数据库和表:
show databases;
show tables;
- 显示” customers “表的列信息
show columns from customers;
- 快捷语句:
describe customers;
- 其他 show 语句
show grants;
, 显示用户安全权限show errors;
, 显示服务器错误信息
第 3 章
- 介绍 select 从表中检索一个或者多个列
检索列
- 检索单列: 从 products 里检索 pro_name 列内容
select pro_name from products;
- 检索多列: 从 products 里检索 3 列内容: 使用 , 分开
select pro_name, pro_id, pro_price from products;
- 检索所有列:
select * from products;
检索时候的条件
- distinct, 检索的时候不想出现重复值, 可以使用 distinct 修饰检索列
- 栗子: 检索出所有的供应商 id
select distinct ven_id from products;
- distinct 应用于所有列!, 不能被部分使用!
- 栗子: 检索出所有的供应商 id
- limit s,n, 用来限制检索输出的数量, s(start) 为起始行, n(num) 为检索行数
- 显示结果不多余 5 行 :
select pro_name from products limit 5;
- 显示结果从行 5 开始, 显示 6 行:
select pro_name from products limit 5,6;
- mysql5 开始的代替语法::
select pro_name from products limit 6 offset 5;
- 第一行为行 0!!
- 显示结果不多余 5 行 :
- 全限定列名
- 多表查询的时候使用全限定列名, 使得 sql 语句更加明了
- 检索 products 的 pro_name 列:
select products.pro_name from test.products;
- order by , 排序输出结果, 默认排序为升序
- 检索结果按照单个列, pro_name 排序
select pro_name from products order by pro_name
- 检索结果按照多个列, pro_price, pro_name 排序, 先排序 pro_name, 再按照 pro_price
select pro_name from products order by pro_price, pro_name;
- 按多个列排序的意义 (上面的栗子): 不同厂商生产的产品可能会有相同的名字和不同的价格, 按这两个排序可以得到同名商品下价格比较
- 找出价格最高的商品: 使用 DESC 来降序排序
select pro_price, pro_name from products order by pro_price DESC;
- 检索结果按照单个列, pro_name 排序
第 4 章
- 过滤数据 WHERE
where 字句
- 找出 products 里价格为 2.5 的记录
select pro_name, pro_price from products where pro_price = 2.5;
- where 位于 order by 的前面
- 操作符: 比如大于小于不等于等等
=, !=, <,
between
: 特定两个值之间select pro_name, pro_price from products where pro_price <9;
列出价格小于 9 的商品select pro_name, pro_price from products where pro_price between 5 and 10;
列出价格在 [5,10] 之间的商品select pro_name, pro_price from products where pro_price is null;
is null 来检测有没有空值
组合 where 字句
- 列出 1003 制造的而且价格小于等于 9 的商品, and 表示两个条件都要满足
select pro_id, pro_name, pro_proce, where ven_id = 1003 and pro_price <=9;
- 列出 1003 制造的或者价格小于等于 9 的商品, or 表示两个条件满足一个就行
- `select pro_id, pro_name, pro_proce, where ven_id = 1003 or pro_price <=9;
- 组合使用 and 和 or 列出 1002 和 1003 制造的价格小于等于 9 的 shang, 使用括号
select pro_id, pro_name, pro_proce, where (ven_id = 1003 or ven_id = 1002) where pro_price <=9;
in 操作符
- IN 表示条件范围, 匹配括号里的每个条件
- 列出 1002, 1003 制造的所有商品, 按照价格排序
select pro_id, pro_name, pro_proce, where ven_id in(1003,1002) order by pro_price ;
- not 操作符, 用于否定他之后的条件
列出 ** 非 **1002, 1003 制造的所有商品, 按照价格排序
select pro_id, pro_name, pro_proce, where ven_id not in(1003,1002) order by pro_price ;
LIKE + 通配符
- % 表示任意字符的任意次数: 一下为列出 je 开头的商品
select pro_price, pro_name from products where pro_name like ' je% ';
- **_ 表示匹配单个字符 **a
- 使用通配符技
- 通配符比较影响性能
- 不要用于开始处