检索数据
select
select 列名 from 表;
SQL语句不区分大小写
在处理SQL语句的时候,空格是忽略的。
LIMIT
限制结果 只会输出若干条,例如:SELECT 列名 FROM 表 LIMIT 5;
返回不多于5行,有助于性能提升。
LIMIT 5,5; 返回从行5开始的5行,新版本的LIMIT 5 OFFSET 5;
排序检索数据
ORDER BY
指定排序方向 默认升序ASC 如果要降序排列 DESC
一般情况下排序不区分大小写
使用ORDER BY 和 LIMIT 找出一列的最大值或最小值
过滤数据
使用WHERE子句
SELECT 列 FROM 表 WHERE 条件
支持 = <> != < <= >= BETWEEN
BETWEEN 常与 AND 连用
IN和OR
IN 和 OR 有相同的功能
但是IN具有如下优点:当条件太长时,更加清楚直观
计算的次序更容易管理
一般比OR执行的更快
可以包含其他SELECT语句 (主要)
使用通配符进行过滤
LIKE "%XXX%"
搜索是区分大小写的
%可以匹配0个、一个、多个字符,但是不能匹配到NULL
下划线(_)通配符 只能匹配单个字符
正则表达式
REGEXP "正则表达式"
LIKE 和 REGEXP 的差别 LIKE 不能匹配到行内的内容 但是REGEXP可以匹配到行内的内容
正则表达式匹配不区分大小写
如果要区分大小写 需要使用BINARY关键字 如
WHERE prod_name REGEXP BINARY 'Jey .000'
进行OR匹配 如1000|200|300
匹配几个字符之一 [123] Ton 匹配1或2或3
匹配范围[1-3]
匹配特殊字符 '.'
定位符 ^ 文本的开始 $文本的结束
创建计算字段
拼接 将值联结到一起构成单个值
可以使用Concat()函数实现
RTrim()函数去掉值右边的所有空格
类似的还有LTrim() Trim()
AS 使用别名
使用数据处理函数
文本处理函数:
Upper()将文本转换为大写 对应的还有Lower()
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找到串的一个子串
SubString() 返回子串的字符
Soundex() 返回串的SOUNDEX值
SOUNDEX是一个将任意文本字符串转化为描述其语音表示的字母数字模式的算法
数值处理函数:
Abs() 返回一个数的绝对值
Cos () 返回一个角度的余弦
Exp 返回一个数的指数值
Mod 返回除操作的余弦
Pi 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切
汇总数据
聚集函数
AVG() 返回某列的平均值 只能用于单列 忽略值为NULL的行
COUNT() 返回某列的行数 COUNT(*) 对所有行的数目 进行统计 COUNT(column) 对指定列中具有值的行进行计数,忽略NULL值。
MAX() 返回某列的最大值
MAX() 对文本数据进行计算时 返回最后一行
MIN () 返回某列的最小值 MIN ()对文本数据进行计算时 返回最前面一行
SUM() 返回某列的值的和
DISTINCT()
分组数据
GROUP BY
HAVING
HAVING和WHERE的差别
WHERE在数据分组前进行过滤
HAVING在数据分组后进行过滤
SELECT -> FROM -> WHERE -> GROUP BY ->HAVING -> ORDER BY -> LIMIT
使用子查询
SELECT 列 FROM 表 WHERE 条件 IN( SELECT 条件 FROM 表 WHERE 另一个条件)
建议格式化SQL
相关子查询 涉及到外部查询的子查询
联结表
Join
等值联结
SELECT vend_name,prod_name,prod_price FROM vebdors INNER JOIN products ON vendirs.vend_id = products.vend_id
笛卡儿积 由没有联结条件的表关系返回的结果是笛卡儿积
自联结
SELECT p1.prod_id,p1.prod_name FROM products AS p1,products AS p2
WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR'
自然联结
外部联结
组合查询
UNION
必须由两条或者两条以上的SELECT语句构成
每个查询必须包含相同的列表达式或聚合函数
UNION会从查询结果中集中的自动去除了重复的行
全文本查询
两个最常使用的引擎为MyISAM和InnoDB,
前者支持全文本搜索,而后者不支持。
插入数据
INSERT
INSERT INTO Customers VALUES(***)
简单 但是并不安全 不建议使用
在表名后的括号里明确地给出列名是一种繁琐而安全的方式,建议使用
为了提升整体的性能
如果数据检索是重要的,就可以在INSERT 和 INTO 之间加入LOW_PRIORITY
提高INSERT的性能 因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快
更新和删除数据
UPDATE
由三部分组成要更新的表
列名和他们的新值
确定要更新的行的过滤条件
DELECT
删除的是表的内容而不是表
如果要删除所有行 可使用TRUNCATE TABLE 语句
创建和操作表
创建表
CREATE TABLE 表名 IF NOT EXISTS
引擎类型
InnoDB 是一个可靠的事务处理引擎,不支持全文本搜索
MEMORY 在功能上等同于MyISAM 但是数据存储在内存(不是磁盘),速度很快
MyISAM 是一个性能极高的引擎,支持全文本搜索,但不支持事务处理
删除表
DROP TABLE
重命名表
RENAME TABLE
使用视图
视图仅仅是用于查看存储在别处的数据的一种设施,视图本身不包含数据
CREATE VIEW 语句来创建
使用存储过程
所谓的存储过程 就是为以后的使用而保存的一条或者多条MySQL语句的集合
主要有三个好处, 简单 安全 高性能
创建存储过程
CREATE PROCEDURE productpricing()
BEGIN
SELECT ...
FROM
END;
使用存储过程
CALL productpricing()
删除类似表的删除
使用游标
只能用于存储过程
使用游标的步骤在使用之前,必须声明或者定义它
一旦声明,必须打开游标以供使用
对填有数据的游标 根据需要取出各行
在结束游标的使用时,必须关闭游标
CREATE PROCEDURE processorders()
BEGIN
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
END;
打开游标 OPEN
关闭游标 CLOSE
触发器
触发器是MySQL响应一下任意语句而自动执行的一条MySQL语句
支持 DELETE INSERT UPDATE
使用CREATE TRIGGER 创建
例如
GREATE TRIGGER new AFTER INSERT ON products FOR EACH ROW SELECT “***”
事务处理
事务:指一组SQL语句
回退:指撤销指定SQL语句的过程
提交:指将未存储的SQL语句结果写入数据库表
保留点:指事务处理中设置的临时占位符
开始事务
START TRANSACTION
...
ROLLBACK