第三章 使用数据库
// 选择数据库
USE crashcourse;
// 查看有多少数据库
SHOW DATABASES
// 查看一个数据库内可用的表
SHOW TABLES;
// 查看一个表内的列
SHOW COLUMNS FROM customers; // DESCRIBE customers;
// 显示数据库状态信息;
SHOW STATUS;
// 显示创建特定数据库或表的MYSQL语句
SHOW CREATE DATABASE;
SHOW CREATE TABLE;
// 用来显示授予用户的安全权限
SHOW GRANTS;
// 用来显示服务器错误或警告消息
SHOW ERRORS
SHOW WARNINGS
第四章 检索数据
// 检索单个列
SELECT prod_name FROM products;
// 检索多个列
SELECT prod_id, prod_name, prod_price FROM products;
// 检索所有列
SELECT * FROM products;
// 检索不同的行
SELECT DISTINCT vend_id FROM products;
// 限制结果
SELECT prod_name FROM products LIMIT 5;
SELECT prod_name FROM products LIMIT 5,5;
// 使用完全限定的表名
SELECT products.prod_name FROM products;
SELECT products.prod_name FROM crashcourse.products;
第五章 排序检索数据
// 排序数据SELECT prod_name FROM products ORDER BY prod_name;
// 按多个列排序
SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price,prod_name;
// 制定排序方向
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;
// ORDER和LIMIT结合
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;
// 第六章 过滤数据
// 检查单个值
SELECT prod_name,prod_price FROM products WHERE prod_price = 2.50;
// = <> != < > <= >= BETWEEN
SELECT prod_name,prod_price FROM products WHERE prod_name='fuses';
// 不匹配检查
SELECT vend_id,prod_name FROM products WHERE vend_id <> 1003;
// 范围检查
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
// 空值检查
SELECT prod_name FROM products WHERE prod_price IS NULL;
// 第七章 数据过滤
// 组合WHERE子句 AND OR
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;
SELECT prod_price,prod_name FROM products WHERE vend_id = 1002 OR vend_id = 1003;
// 错误提醒 如果没有括号的话会出现错误
SELECT prod_name,prod_price FROM products
WHERE(vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;
// IN操作符
SELECT prod_name,prod_price FROM products
WHERE vend_id IN (1002,1003) ORDER BY prod_name;
// IN和OR很像,但是有以下优点:1.更清楚直观;2.比OR快;3.可以包含其他SELECT语句,使得能够更动态地创建WHERE子句;
// NOT
SELECT prod_name,prod_price FROM products
WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
// 第八章 用通配符进行过滤
// %表示任何字符出现任意次数 0 1 多次
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE 'jet%';
// _ 匹配单个
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '_ton anvil';
// 第九章 用正则表达式进行搜索
// 基础字符匹配 包含1000
SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;
// . 匹配任意一个字符
SELECT prod_name FROM products WHERE prod_name REGEXP '.1000' ORDER BY prod_name;
// 进行OR匹配
SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;
// 匹配几个字符串之一
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;
// 匹配范围
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;
// * 0个或多个匹配 + 1个或多个匹配等于{1,} ? 0个或1个匹配等于{0,1}
// {n} {n,} {n,m}
SELECT prod_name FROM products WHERE prod_name REGEXP '\\([0-9] sticks?\\)' ORDER BY prod_name;
// 定位符 ^文本地开始 $文本地结束 [[:<:]]词的开始 [[:>:]]词的结尾
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name;
// 第十章 创建计算字段
// 拼接
SELECT Concat(vend_name,'(',vend_country,')') FROM vendors ORDER BY vend_name;
// 使用别名
SELECT Concat(vend_name,'(',vend_country,')') AS vend_title FROM vendors ORDER BY vend_name;
// 执行算数计算
SELECT prod_id,quantity,item_price quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 2005;
// 第十一章 使用数据处理函数
// 文本处理函数
SELECT vend_name, Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;
// 日期和时间处理函数
SELECT cust_id,order_num FROM orders WHERE Date(order_data) BETWEEN '2005-09-01' AND '2005-09-30';
// 数值处理函数
// 第十二章 汇总数据
// 聚集函数 运行在行组上,计算和返回单个值的函数
SELECT AVG(prod_price) AS avg_price FROM products;
SELECT AVG(prod_price) AS avg_price FROM products WHERE vend_id = 1003;
SELECT COUNT(*) AS num_cust FROM coustomers;
SELECT COUNT(cust_email) AS num_cust FROM coustomers;
SELECT MAX(prod_price) AS max_price FROM products;
SELECT MIX(prod_price) AS mix_price FROM products;
SELECT SUN(quantity) AS items_ordered FROM orderitems WHERE order_num = 2005;
SELECT SUN(item_price*quantity) AS total_price FROM orderitems WHERE order_num = 2005;
// 聚合不同值
SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 1003;
// 组合聚集函数
SELECT COUNT(*) AS num_items
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg FROM products;
// 第十三章 分组数据
// 创建分组
SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id;
// 过滤分组
SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2;
SELECT vend_id,COUNT(*) AS num_prods FROM products WHERE prod_price >= 10 GROUP BY vend_id HAVING COUNT(*) >= 2;
SELECT order_num,SUM(quantity*item_price) AS ordertotal FROM orderitems
GROUP BY order_num HAVING SUM(quantity*item_price) >= 50 ORDER BY ordertotal;
// SELECT子句顺序 SELECT FROM WHERE GROUP BY HAVING ORDER BY LIMIT
// 第十四章 使用子查询
// 利用子查询进行过滤
1 SELECT order_num FROM orderitems WHERE prod_id = 'TNT2';
2 SELECT cust_id FROM orders WHERE order_num IN (2005,207);
// 子查询由内到外查询
SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');
SELECT cust_name,cust_status,(SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers;
// 第十五章 联结表
SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE vendors.vend_id = products.vend_id ORDER BY vend_name,prod_name;
// 笛卡尔积
SELECT vend_name,prod_name,prod_price FROM vendors, products ORDER BY vend_name,prod_name;
// 内连接
SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;
// 联结多个表
SELECT prod_name,vend_name,prod_price,quality FROM orderitems,products,vendors WHERE products.vend_id = vendors.vend.id
AND orderitems.prod_id = products.prod_id AND order_num = 20005;