数据库笔记(MySQL必知必会读书笔记)
第一章 了解数据库
表(table) 模式(schema)列(column)行(row)主键(primary key)
第二章 什么是MySQL
第三章 使用MySQL
第四章 检索数据
1.select语句
1.查列 -从表中检索一个名为pro_name的列
SELECT pro_name FROM products;
2.查多个列-从表中选取3列
SELECT pro_id, pro_name, pro_price FROM products;
3.查所有列
SELECT * FROM products;
4.去重--将id查出的重复值去掉,distinct关键字必须放在列名前
SELECT DISTINCT vend_id FROM products;
5.限制结果
SELECT pro_name FROM products LIMIT 5;
查到结果后,返回的不超过5行。
SELECT pro_name FROM products LIMIT 5,5;
返回从查到结果的行5开始的5行。第一个数为开始位置
检索出来的第一行是行0,也就是和数组的索引从0开始一样
LIMIT 3, 4的意思是从行3开始的4行。MySQL 5支持LIMIT的另一种替代语法。LIMIT 4 OFFSET 3意为从行3开始取4行,就像LIMIT 3, 4一样。(关键字OFFSET)
6.使用完全限定的表名
SELECT products.prod_name FROM products; //同时使用表名和列字(段) 同样可以有 SELET products.pro_name FROM crashcourse.products; //假定位于crashcourse数据库中
第五章 排序检索数据
5.1 排序
为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。
SELECT prod_name FROM products ORDER BY prod_name; //以字母顺序排
5.2 按多个列排序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name; //先按价格排序,再按名称排序
5.3指定方向排序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC; //DESC降序排序(ASC升序,一般默认) SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC, pro_name; //先价格降序,再产品名排序 SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1; //找出这个价格中,最贵的,并只返回一个 //order by在from后,limit再order by后。
第六章 过滤数据
6.1 使用where字句
(where在from字句后面)(order by在where后面)
SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50; //只返回价格为2.5的,并以名字和价格做列名的两列
6.2 where字句操作符
6.2.1 检查单个值
SELECT prod_name, prod_price FROM products WHERE prod_price < 10; //列出价格小于10的所有产品
6.2.2 不匹配检查
SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003; //用!=也可以 //列出供应商不是1003的所有产品名字
6.2.3 范围值检查(使用between,这是闭区间)
SELECT prod_name, prod_price FROM products WHERE prod_price BETWEETN 5 AND 10; //选择两列,并返回价格在5到10区间的数据
6.2.4 空值检查
SELECT prod_name FROM products WHERE prod_price IS NULL; //这条语句返回没有价格(空prod_price字段,并不是价格为0)
在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们。
因此,在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行。
第七章 数据过滤
7.1 组合WHERE子句
7.1.1 AND操作符
SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 AND prod_price <=10; //检索由供应商1003制造,且价格小于10美元的所有产品的名称和价格
7.1.2 OR操作符
SELECT prod_price, prod_name FROM products WHERE vend_id = 1003 OR vend_id = 1002;
7.1.3 计算次序
SELECT prod_price, prod_name FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >=10; //SQL在处理OR前,优先处理AND //所以应理解为,由1003制造的大于10,或者1002制造的所有产品,给出其价格和名字 //检索价格10以上,并且由1002或1003制造的所有产品的写法如下 SELECT prod_price, prod_name FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >=10; //能用括号就用,能消除歧义
7.2 IN操作符
SELECT prod_name, prod_price FROM products WHERE vend_id IN (1002,1003) //WHERE vend_id = 1002 OR vend_id = 1003 功能相同 ORDER BY prod_name; //检索由1002和1003两个供应商制造的所有产品
但IN的好处更大,优点如下:
1.在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
2.在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
3.IN操作符一般比OR操作符清单执行更快。
4.IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。
7.3 NOT操作符
SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002,1003) //列出1002,1003之外的所有供应商制造的产品 ORDER BY prod_name;