手动整理汇总MySQL基础知识1

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. 数据子查询

在涉及到不同的表之间的数据联合查询时使用。

 

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. 数据子查询

在涉及到不同的表之间的数据联合查询时使用。

 

猜你喜欢

转载自www.cnblogs.com/zhuozige/p/12398586.html