MYSQL_mysql必知必会

文章目录

  • 第三章、使用mysql
  • 第四章、检索数据
  • 第五章、排序检索数据
  • 第六章、过滤数据
  • 第七章、数据过滤
  • 第八章、用通配符进行过滤
  • 第九章、用正则表达式进行搜索
  • 第十章、创建计算字段
  • 第十一章、使用数据处理函数
  • 第十二章、汇总数据
  • 第十三章、分组数据
  • 第十四章、使用子查询
  • 第十五章、联结表
  • 第十六章、创建高级联结
  • 第十七章、组合查询
  • 第十八章、全文本搜索
  • 第十九章、插入数据
  • 第二十章、更新和删除数据
  • 第二十一章、创建和操纵表
  • 第二十二章、使用视图
  • 第二十三章、使用视图

第三章、使用mysql

  1. 作为MySQL语言组成部分的一个保留字,决不要使用关键字命名一个表或列。
  2. 使用某个数据库:USE <数据库名>,例如:USE community.
    MYSQL_mysql必知必会_第1张图片

第四章、检索数据

  1. SQL语句不区分大小写;
  2. 检索所有列
select * from tracking_info_tbl;

除非确实需要表中的每个列,否则最好别使用“*”通配符;

  1. 检索不同的行(DISTINCT)

第五章、排序检索数据

  1. 关键字:ORDER BY
  2. 指定排序方向
DESC:降序 ASC:升序。 升序是默认的排序顺序
SELECT prod_id,prod _price,prod_name
FROM products
ORDER BY prod_price DESC,prod_name

上面例子以产品价格降序排序产品,再对产品名排序;DESC 关键字只应用到直接位于其前面的列名,如果也想对prod_name降序,应该写为:

SELECT prod_id,prod _price,prod_name
FROM products
ORDER BY prod_price DESC,prod_name DESC
  1. 使用 ORDER BY 和 LIMIT 结合,可以找出一个列中的最高或最低的值;

第六章、过滤数据

  1. 关键字:WHERE
  2. 位置:在同时使用ORDER BY和WHERE子句时,ORDER BY位于WHERE之后
  3. WHERE子句操作符
操作符 说明
= 等于
!= 不等于
<> 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定两个值之间
  1. MYSQL在执行匹配时默认不区分大小写
  2. NULL:无值,与字段包含0、空字符串或仅仅包含空格不同。判断方法:IS NULL / IS NOT NULL

第七章、数据过滤

  1. IN操作符
SELECT prod_name,prod_price
FROM products
WHERE vend_id IN(1002,1003)
ORDER BY prod_name
  1. NOT操作符
SELECT prod_name,prod_price
FROM products
WHERE vend_id NOT IN(1002,1003)
ORDER BY prod_name

MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反

第八章、用通配符进行过滤

  1. LIKE操作符
  2. ‘%’通配符:表示任何字符出现任意次数
SELECT prod_id,prod_name
FROM products
WHERE prod_name LIKE 'jet%'
  1. '_'通配符:只匹配单个字符而不是多个字符,与‘%’能够匹配0个字符不一样,_总是匹配一个字符,不能多也不能少。

不要过度使用通配符。如果其他操作符也能达到相同的目的,应该使用其他操作符。

第九章、用正则表达式进行搜索

  1. 操作符:REGEXP

第十章、创建计算字段

与前面介绍过的列不同,计算字段并不实际存在于数据库表中。计算字段是运行时在SElECT语句内创建的。

1.起别名:AS

第十一章、使用数据处理函数

  1. 如果决定使用函数,应该保证做好代码注释,以便以后你(或其他人)能够确切知道所编写SQL代码的含义
  2. 文本处理函数
函数 说明
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
SubString() 返回子串的字符
Upper() 将字符转换为大写
  1. 日期和时间处理函数
函数 说明
Date() 返回日期时间的日期部分
Time() 返回日期时间的时间部分
  1. 数值处理函数

第十二章、汇总数据

  1. SQL聚集函数
函数 说明
AVG() 返回某列的平均值 (忽略列值为NULL的行)
COUNT() 返回某列的行数
MAX() 返回某列的最大值(忽略列值为NULL的行)
MIN() 返回某列的最小值(忽略列值为NULL的行)
SUM() 返回某列值之和(忽略列值为NULL的行)
  1. COUNT()函数
函数 说明
COUNT(*) 统计所有记录(包括NULL
COUNT(1) 统计所有记录(包括NULL
COUNT(字段) 统计该字段不为NULL的记录
COUNT(distinct 字段) 统计该字段去重且不为NULL的记录

第十三章、分组数据

1.GROUP BY使用规定

a. GROUP BY 子句可以包含任意数目的列,这使得能对分组进行嵌套
b. 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总
c. 如果分组列中有NULL值,则NULL将作为一个分组返回,如果列中有多行NULL值,它们将分为一组
d. GROUP BY 子句必须出现在WHERE子句之后,ORDER BY 子句之前

2.过滤分组:HAVING

WHERE HAVING
过滤行 过滤分组
在数据分组前进行过滤 在数据分组后进行过滤

3.SElECT子句顺序.

子句 说明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 仅在按组计算聚集时使用
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数

第十四章、使用子查询

1.子查询:嵌套在其他查询中的查询

第十五章、联结表

1.关系表的设计就是要保证把信息分解为多个表,一类数据一个表,各表通过某些常用的值(即关系设计中的关系)互相关联

第十六章、创建高级联结

1.表别名只在查询执行中使用,与列别名不一样,表别名不返回到客户机。

第十七章、组合查询

1.UNION的规则

UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)

2.UNION从查询结果集中自动去除了重复的行,如果想要保留重复的部分,使用“UNION ALL”

第十八章、全文本搜索

1.MySQL最常使用的两个引擎为MyISAM和InnoDB,前者支持全文本搜索,后者不支持
2.启用全文本搜索支持
一般在创建表时启用全文本搜索

CREATE TABLE productnotes
{
  note_id int NOT NULL AUTO_INCREMENT,
  prod_id char(10) NOT NULL,
  note_date datetime NOT NULL,
  note_text text NULL,
  PRIMSRY KEY(note_id),
  FULLTEXT(note_text)
}ENGINE=MyISAM

为了进行全文本搜索,MySQL根据子句FULLTEXT(note_text)的指示对它进行索引。这里的FULLTEXT索引单个列,如果需要也可以索引多个列。在定义之后,MySQL自动维护该索引。在增加、更新和删除行时,索引随之自动更新。

第十九章、插入数据

1.插入一行数据

INSERT INTO 表名(
  列名1,
  列名2,
  ...VALUES(1,2,
  ...  )

2.插入多行数据

INSERT INTO 表名(
  列名1,
  列名2,
  ...VALUES(1,2,
  ...  ),
 (1,2,
  ... 
 ),
 ...

3.插入检索出的数据

INSERT INTO 表名(
  列名1,
  列名2,
  ...SELECT 列名a,
  列名b,
  ...
FROM 表名
 ...

INSERT SELECT 使用的是列的位置,而不是列名,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一个列,第二列将用来填充表列中的第二个列,如此等等。

第二十章、更新和删除数据

基本的UPDATE语句由三个部分组成:
a.要更新的表
b.列名和他们的新值
c.确定要更新的行的过滤条件

1.更新一列

UPDATE 表名
SET 列名 = 列值
WHERE 条件

2.更新多列

UPDATE 表名
SET 列名1 =1,
    列名2 =2...
WHERE 条件

3.删除一列
如果想删除某个列的值,可以将它设置为NULL

UPDATE 表名
SET 列名 = NULL
WHERE 条件

4.删除一行

DELETE FROM 表名
WHERE 条件

5.删除一行

DELETE FROM 表名
WHERE 条件

1.DELETE语句从表中删除行,甚至是删除表中所有行,但是,DELETE不删除表本身。
2.如果想从表中删除所有行,不要使用DELETE,可使用“TRUNCATE TABLE 表名”语句,它可以实现相同的功能,但是速度更快(实际上是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。
3.除非确实打算更新或删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句

第二十一章、创建和操纵表

1.创建表

CREATE TABLE 表名(
)

1.主键值必须唯一。如果主键使用单个列,则它的值必须是唯一的。如果使用多个列,则这些列的组合必须是唯一的。
2.不要把NULL值和空串相混淆。NULL是没有值,它不是空串,空串是一个有效值。
3.主键只能使用不允许NULL值的列。

2.AUTO_INCREMENT
每个表只允许一个AUTO_INCREMENT列,并且它必须被索引(如,通过使它成为主键)。
3.引擎

引擎 介绍
InnoDB 是一个可靠的事务处理引擎,不支持全文本搜索
MEMORY 功能和MyISAM等同,但由于数据存储在内存中(不是磁盘)中,速度很快(特别适合于临时表)
MyISAM 是一个性能极高的引擎,它支持全文本搜索,但是不支持事务处理
  1. 更新表

更新表,使用“ALTER TABLE”。但是理想状态下,当表中存储数据以后,该表就不应该再被更新。在表的设计过程中需要花大量时间来考虑,以便后期不对该表进行大的改动。

给表添加一个列

ALTER TABLE vendors
ADD vend_phone CHAR(20)

删除刚刚添加的列

ALTER TABLE vendors
DROP COLUMN vend_phone

常见用途是定义外键,如:

ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_roders
FOREIGN KEY (order_num) REFERENCES orders(order_num)

5.删除表
删除表(删除表而不是其内容)

DROP TABLE 表名

6.重命名表

RENAME TABLE 旧表名 TO 新表名

第二十二章、使用视图

1.视图仅仅是用来查看存储在别处数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。

1.视图语法

创建视图:CREATE VIEW 视图名
删除视图:DROP VIEW 视图名

2.视图应用举例

原写法:直接从三个表中获取数据

SELECT cust_name,cust_contact
FROM customers,orders,orderitems
WHERE customers.cust_id = orders.cust_id
  AND ordersitems.order_num = orders.order_num
  AND prod_id = 'TNT2'
1.使用视图,把查询包装成一个名为productcustomers的虚拟表
CREATE VIEW productcustomers AS
SELECT cust_name,cust_contact,prod_id
FROM customers,orders,orderitems
WHERE customers.cust_id = orders.cust_id
  AND ordersitems.order_num = orders.order_num

2.检索订购了产品TNT2的客户
SELECT cust_name,cust_contact
FROM productcustomers 
WHERE prod_id = 'TNT2'

可以看出,视图极大简化了复杂SQL语句的使用,利用视图,可以一次性编写基础的SQL,然后根据需要多次使用。

第二十三章、使用视图

你可能感兴趣的:(MySQL,mysql,数据库)