数据库
数据库:保存有组织的数据的容器(通常是一个文件或一组文件)。
表:某种特定类型数据的结构化清单。
模式(schema):关于数据库和表的布局以及特性的信息。
列:字段
数据类型:每个表列都有相应的数据类型,限制该列存储的数据。
行:表中记录
主键(primary key):某一列,唯一区分表中的每一行。
SQL:结构化查询语言
使用MySQL
基于客户机-服务器
连接MySQL:主机名、端口、用户名、密码
使用数据库
USE crashcourse;
显示所有数据库
SHOW DATABASES;
显示数据库中的表
SHOW TABLES;
显示表列
SHOW COLUMNS FROM customers;
等同于
DESC customers;
DESCRIBE customers;
显示广泛的服务器状态信息
SHOW STATUS;
显示创建数据库或表的MySQL语句
SHOW CREATE DATABASE crashcourse;
SHOW CREATE TABLE customers;
显示授权用户(所有用户或特定用户)的安全权限。
SHOW GRANTS;
显示服务器错误或警告消息
SHOW ERRORS;
SHOW WARNINGS;
检索数据–SELECT
检索单个列
SELECT prod_name FROM products;
检索多个列
SELECT prod_id, prod_name, prod_price FROM products;
检索所有列
SELECT * FROM products;
检索不同的行—DISTINCT
SELECT DISTINCT vend_id FROM products;
限制结果
前5行
SELECT prod_name FROM products LIMIT 5;
指定开始行和行数
SELECT prod_name FROM products LIMIT 5,5;
注:
检索出的第1行是行0
LIMIT 3,4 从行3开始,取4行
使用完全限定的列名、表名
SELECT products.prod_name FROM crashcourse.products;
排序检索数据(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 prod_price DESC;
以prod_price降序,以prod_name升序(ASC)
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;
找出最昂贵的物品值
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;
过滤数据
使用WHERE子句
SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50;
注:同时使用ORDER BY 和 WHERE 子句时,应该让ORDER BY 位于WHERE 之后。
WHERE子句操作符:
=、<>、!= 等于/不等于
<、<=、>、>=
BETWEEN
检查单个值
SELECT prod_name, prod_price FROM products WHERE prod_price <= 10;
范围值检查
SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
空值检查
SELECT prod_name FROM products WHERE prod_price IS NULL;
数据过滤
AND操作符
SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;
OR操作符
SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 OR prod_price = 10;
注:AND计算优先级高于OR.
同时使用AND和OR操作符的WHERE子句,应该使用圆括号分组。
IN 操作符—指定条件范围
找出供应商1002、1003制造的所有产品
SELECT prod_name, prod_price
FROM products
WHERE vend_id IN (1002, 1003)
ORDER BY prod_name;
等同于
WHERE vend_id = 1002 OR vend_id 1003
IN 与 ALL
IN 比OR执行更快
最大优点,可以包含其他SELECT语句
NOT操作符
SELECT prod_name, prod_price
FROM products
WHERE vend_id NOT IN (1002, 1003)
ORDER BY prod_name;
使用通配符进行过滤
LIKE操作符
百分号%:任何字符出现任意次数,但是不能匹配NULL
区分大小写
SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE 'jet%';
'%anvil%'
's%e'
下划线(_)通配符
只匹配单个字符
SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE '_ ton anvil';
使用正在表达式进行搜索
基本字符匹配
找到prod_name包含文本1000的所有行
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;
. 表示匹配任意一个字符
LIKE和REGEXP之间的重要差别:LIKE匹配列值整个串(只匹配部分不返回结果),而REGEXP匹配列值的子串。
匹配不区分大小写。
进行OR匹配
搜索多个串之一
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000 | 2000 | 3000'
ORDER BY prod_name;
匹配几个字符之一
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
可以得到结果
1 ton anvil
2 ton anvil
[^123]: 除了123外的字符
匹配范围
- 定义范围
[1-5]
[a-z]
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;
匹配特殊字符
匹配特殊字符,需要用\\
为前导
SELECT vend_name
FROM vendors
WHERE vend_name REGEXP '\\.'
ORDER BY vend_name;
匹配字符类—表示集合
匹配多个实例
例
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name;
结果可能是
TNT (1 stick)
例
匹配连在一起的4位数字
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_name;
也可使用
WHERE prod_name REGEXP '[0-9][0-9][0-9][0-9]'
定位符
找到以一个数(包括小数点开始的数)开始的所有产品
SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;
^ 用在[]中表示反转集合,否则定位串的开始位置。