数据库笔记(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;