使用MySQL
所需的表与数据可以到http://www.forta.com/books/0672327120/进行下载,也可以到我的码云下载创建表代码段和数据插入代码段
-- 显示数据库
SHOW DATABASES;
-- 选中一个数据库,显示表信息
USE pra_mysql;
SHOW TABLES;
-- 查看表的列信息
SHOW COLUMNS FROM customers;
DESCRIBE customers; -- 上面语句的简写
-- 查看服务器状态
SHOW STATUS;
SHOW ERRORS; -- 显示服务器错误信息
SHOW WARNINGS; -- 显示服务器警告信息
检索数据
通过关键字SELECT实现
DISTINCT关键字实现返回的结果不重复,必须直接放在列名前面
DISTINCT关键字对它后续的列都有效
LIMIT x表示保留从第0行开始x行数据
LIMIT m,n表示保留从第m行开始n行数据
-- 4.2检索单个列
SELECT prod_name FROM products;
-- 4.3检索多个列
SELECT prod_id,prod_name,prod_price FROM products;
-- 4.4检索所有列
SELECT * FROM products;
-- 4.5检索不同的行
SELECT vend_id FROM products; -- 返回结果的供应商id重复,但是我们只需要不重复的供应商id
SELECT DISTINCT vend_id FROM products; -- distinct关键字表示只返回不同的值,必须直接放在列名前面
SELECT vend_id,prod_price FROM products;
SELECT DISTINCT vend_id,prod_price FROM products; -- distinct关键字应用于它后续的所有列
-- 4.6限制结果limit
SELECT prod_name FROM products LIMIT 5; -- limit 5 表明返回不多于5行
SELECT prod_name FROM products LIMIT 5,5; -- limit 5,5 表明从行5开始的后5行,起始行为0
-- 4.7使用完全限定的表名
SELECT products.prod_name FROM products; -- 指定了完全限定列名
SELECT products.prod_name FROM pra_mysql.products; -- 指定了完全限定表名
排序检索数据
排序通过order by实现,默认是升序排序
DESC是降序,ASC是升序,只对其前面的列名有效,并不是对所有列的有效
Limit必须在ORDER BY后面
-- 5.1排序数据
SELECT prod_name FROM products ORDER BY prod_name; -- 按照字母顺序排序,升序
-- 5.2按多个列排序
SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price,prod_name; -- 先按价格排序,再按照名称排序
-- 5.3指定方向排序
SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price DESC; -- 按价格降序排序
SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price DESC,prod_name; -- 先按价格降序排序,再按照名称升序排序,desc只对一个有作用
SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price ,prod_name DESC; -- 先按价格升序排序,再按照名称降序排序,desc只对一个有作用
SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price DESC,prod_name DESC; -- 先按价格降序排序,再按照名称降序排序,desc只对一个有作用
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1; -- 找到一个列中价格最高的,limit必须在order by之后
过滤数据
过滤数据的一种方式可以使用WHERE子句实现
WHERE关键字需要在FROM关键字后面
WHERE子句操作符:=等于,<>不等于, !=不等于, <小于, <=小于等于, >大于, >=大于等于, BETWEEN 在指定两个值之间
-- 6.1使用WHERE子句
SELECT prod_name,prod_price FROM products WHERE prod_price=2.5; -- 找到一个列中价格等于2.5的商品
-- 6.2.1检查单个值
SELECT prod_name,prod_price FROM products WHERE prod_name='fuses'; -- 不区分大小写
SELECT prod_name,prod_price FROM products WHERE prod_price<10; -- 列出小于10美元的商品
SELECT prod_name,prod_price FROM products WHERE prod_price<=10; -- 列出小于等于10美元的商品
-- 6.2.2不匹配检查
SELECT prod_name,vend_id FROM products WHERE vend_id<>1003; -- 列出不是由供应商1003制造的所有产品
SELECT prod_name,vend_id FROM products WHERE vend_id!=1003; -- 列出不是由供应商1003制造的所有产品
-- 6.2.3范围值检查
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10; -- 列出5-10美元的所有商品
-- 6.2.4空值检查
SELECT prod_name FROM products WHERE prod_price IS NULL; -- 判断空值
SELECT cust_id FROM customers WHERE cust_email IS NULL;
数据过滤
可以通过组合WHERE语句和AND和OR或NOT或IN关键字实现
组合AND和OR ,AND的优先级更高,注意添加圆括号
IN取合法值由逗号分割的清单,全部放在圆括号内
NOT操作符 否定它之后所跟的所有条件
IN操作符与OR具有相同的功能
- 在使用长的合法选项清单时,IN操作符更清楚和直观
- 在使用IN时,计算的次序更容易管理,因为使用的操作符更少
- IN操作符一般比OR操作符执行更快
- IN操作符最大的优点是可以包含其他SELECT语句,能够更加动态地建立WHERE语句
-- 7.1.1AND操作符
SELECT prod_name,prod_price FROM products WHERE vend_id=1003 AND prod_price<=10; -- 检索供应商1003制造且价格小于等于10美元的所有产品的名称和价格
-- 7.1.2OR操作符
SELECT prod_name,prod_price FROM products WHERE vend_id=1002 OR vend_id=1003; -- 由1002和1003供应商制造的所有商品的名称和价格
-- 7.1.3计算次序
SELECT prod_name,prod_price FROM products WHERE vend_id=1002 OR vend_id=1003 AND prod_price>=10; -- 选取由供应商1003制造的价格大于等于10的商品和由供应商1002制造的商品,显示名称和价格
SELECT prod_name,prod_price FROM products WHERE (vend_id=1002 OR vend_id=1003) AND prod_price>=10;-- 选取由供应商1003制造或和由供应商1002制造的价格大于等于10的商品,显示名称和价格
-- 7.2IN操作符
SELECT prod_name,prod_price FROM products WHERE vend_id IN(1002,1003) ORDER BY prod_name; -- 检索供应商1002和1003制造的商品名称和价格,按照商品名称升序排列
SELECT prod_name,prod_price FROM products WHERE vend_id IN(1001,1002,1003) ORDER BY prod_name; -- 检索供应商1001,1002和1003制造的商品名称和价格,按照商品名称升序排列
-- 7.3NOT操作符
SELECT prod_name,prod_price FROM products WHERE vend_id NOT IN(1002,1003) ORDER BY prod_name; -- 找出不是有供应商1002和1003的商品名称和价格,按照商品名称升序排列
本文相关代码可到我的码云下载