1.基础知识点:
1)MySQL是世界上最受欢迎的数据库管理系统(DBMS)之一,在实际的应用中有很广阔的空间。
2)表、列、行、主键
本次博客所有内容以《MySQL必知必会》为基础,使用教学数据来进行讲解。
2-1)表
表是一种结构化文件,可用来存储某种特定类型的数据。表是某种特定类型数据的结构化清单。在一个数据库内表名不能相同,但在不同数据库中可以使用相同的表明。
下图是一个表,该表的表名为vendors。
2-2)列
列是表中的一个字段。所有表都是由一个或多个列组成的。每列数据都有相同的数据类型。
例如红色框所示。
2-3) 行
行是表中的一个记录。
例如红色框所示。
2-4)主键
表中每一行都一个有一列(或几列)可以唯一标识自己。因此主键是一列(或一组列),其值能够唯一标识表中每一行。
划重点:
主键用来表示一个特定的行,没有主键,更新或删除表中特定行就极为困难。
表中的任何列都可以作为主键,只要它满足如下操作:
任意两行都不具有相同的主键值;
每一行都必须具有一个主键值(主键列不允许NULL值);
主键列中的值不允许修改或更新;
主键值不能重用。
vendors表中vend_id被设定为主键,之后会详细讲到。
2.检索数据:
检索数据使用的是MySQL中SELECT关键字(Tips,在使用MySQL的过程中,为了使语句更有美感,MySQL的关键字建议大写,操作的表名和列名等等建议小写,虽然说MySQL关键字大小写的效果是一样的,但这样更加美观实用)。
常用语句:
1)检索单个列
SELECT vend_name(列名) FROM vendors(表名);
2)检索多个列
SELECT vand_id, vend_name, vend_city FROM vendors;
3) 检索所有列
SELECT * FROM vendors;
4)检索不同的值(返回的结果去掉相同的值)
SELECT DISTINCT vend_id FROM vendors;
5) 限制检索的结果
下面表示从行3开始的4行。(MySQL从行0开始检索需要注意!)
SELECT vend_name FROM vendors LIMIT 3 , 4; (或者 SELECT vend_name FROM vendors LIMIT 4 OFFEST 3;)
此外,任何程序都需要注释,在MySQL中可以使用以下三种形式进行注释
-- 这是一条注释
# 这是一条注释
/* 这是一条注释 */
3. 排序检索数据:
排序检索主要使用的是ORDER BY关键字。
1)单列排序
使用如下句子进行检索
SELECT prod_name FROM products;可以得知结果呈现出无序的排列
使用SELECT prod_name FROM products ORDER BY prod_name; # 根据prod_name来排序输出结果
2)多个列排序
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name; (先按prod_price排序,前者相同后按prod_name排序)
3) 指定排序方向
默认是升序,DESC是降序。
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;(先按prod_price降序排序,前者相同后按prod_name升序排序)
3. 过滤数据:
过滤数据主要使用WHERE关键字。
1) 使用WHERE关键字
WHERE子句的操作符
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的两个数之间
例子: SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
2) 组合WHERE关键字
2-1)AND操作符
SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;
2-2) OR操作符
SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1002 OR vend_id = 1003;
2-3)IN操作符
SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;
2-4) NOT 操作符
SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
3) LIKE操作符
3-1)%通配符(一次可以匹配多个字符)
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%';
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '%anvil%';
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'S%E';
3-2) _ 通配符(一次只能匹配一个字符)
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '_ ton anvil';
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '__ ton anvil';
4)正则表达式
MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据。
4-1)基本字符匹配
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; ('.' 可以表示任意一个字符)
4-2)OR匹配
SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;
4-3) 匹配几个字符之一
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;
SELECT prod_name FROM products WHERE prod_name REGEXP '[^123] Ton' ORDER BY prod_name;
4-4)匹配范围
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;
4-5)匹配特殊字符
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\.' ORDER BY vend_name;
4-6)匹配字符类
字符表如下所示
SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;
4-7)匹配多个实例
SELECT prod_name FROM products WHERE prod_name REGEXP '\([0-9] sticks?\)'ORDER BY prod_name;
4-8)定位符
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\.]' ORDER BY prod_name;
4.创建计算字段:
1)拼接
Concat()
SELECT Concat(vend_name, '(', vend_country,')') FROM vendors ORDER BY vend_name;
2)算术计算
SELECT prod_id, quantity, item_price FROM orderitems WHERE order_num = 20005;
5.数据处理函数:
函数的使用会导致代码的可移植性降低。
1)文本处理函数
Soundex()函数
SELECT cust_name, cust_contact FROM customers WHERE cust_contact = 'Y.Lie';
SELECT cust_name, cust_contact FROM customers WHERE Soundex(cust_contact) = Soundex('Y Lie');
2)日期和时间处理函数
SELECT cust_id, order_num FROM orders WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30';
3)数值处理函数
SELECT Pi();
4)聚集函数
SELECT MIN(prod_price) AS min_price FROM products;
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;
6.数据分组:
主要使用GROUP BY子句和HAVING子句。
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id;
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id HAVING COUNT(*) >= 3;
7. 数据子查询
在涉及到不同的表之间的数据联合查询时使用。