mySQL教程

教程链接(点击这里

select(查找)

格式:

1
2
3
4
5
6
7
use (那个数据库) 
select (哪一列)[as] (命名)
from (表格)
join (表格) on (连接条件) / using (名称相同的列)
where (判断条件)
order by (列表)[desc(降序)], (列表)[desc(降序)], ...(--默认升序)
limit (数字(跳过几个)) , (数字(截取几个))

运算符:

运算符 描述
+ - * / % 基础加减乘除
between (数字或日期) and (数字或日期) 获取–到–之间的
(查询条件) in (多个字符串或数字) 精确查询
like (sql通配符条件) 模糊查询
regexp (正则表达式) 用正则表达式查询
(查询列表) is null 查找没有值的单元格

通配符:

通配符 描述
% 替代 0 个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符 例:[ALN]
[^charlist] 或 [!charlist] 不在字符列中的任何单一字符 例:[!ALN]

正则表达式:

正则表达式 描述
^ 表示字符串开始
$ 表示字符串结尾
| 代表一个逻辑上的 或
[abcd] 匹配任意在括号里列举的单字符
[a-f] 匹配 a - f 的单字符

内连接 (例):

1
2
3
4
SELECT order_id,o.customer_id,first_name,last_name	# 查找这几个 列表
FROM orders [AS] o # 从这个 表格 并把orders简化成o
JOIN customers [AS] c # 内连接到这个 表格 并把customers简化成c
ON o.customer_id = c.customer_id # 确保 orders 中的 customers_id 和 customers 中的 customer_id 一样

外连接 (例):

连接到其他数据库的表格:

1
2
3
4
SELECT *
FROM orders_items [AS] oi # 从这个 表格 并把orders简化成o
JOIN sql_inventory.products [AS] p # 外部数据库名称.表格名称 简化为 名字
ON oi.product_id = c.product_id

左右链接:

​ 内连接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
c.customer_id,
c.first_name,
o.order_id
FROM customers AS c
JOIN orders AS o
ON c.customer_id = o.customer_id -- 返回了满足这个条件的记录
ORDER BY c.customer_id
/*
运行结果:(只能显示已经有订单的顾客信息,不能显示没有订单的顾客信息)
customer_id first_name order_id
2 Ines 4
2 Ines 7
5 Clemmie 5
5 Clemmie 8
6 Elka 1
6 Elka 10
7 Ilene 2
8 Thacher 3
10 Levy 6
10 Levy 9
*/

​ 外连接 左/右 连接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SELECT
c.customer_id,
c.first_name,
o.order_id
FROM customers AS c
LEFT JOIN orders AS o
ON c.customer_id = o.customer_id
ORDER BY c.customer_id

/*
运行结果(会显示所有客户的信息,以左边表格为主 FROM customers AS c 不管有没有对应的值都会显示):

customer_id first_name order_id
1 Babara null
2 Ines 4
2 Ines 7
3 Freddi null
4 Ambur null
5 Clemmie 5
5 Clemmie 8
6 Elka 1
6 Elka 10
7 Ilene 2
8 Thacher 3
9 Romola null
10 Levy 6
10 Levy 9
*/

​ 自 外连接:

1
2
3
4
5
6
7
8
9
USE sql_hr;

SELECT
e.employee_id,
e.first_name,
m.first_name AS manager
FROM employees AS e
LEFT JOIN employees AS m
ON e.reports_to = m.employee_id

多表连接(例):

1
2
3
4
5
6
7
8
9
10
11
SELECT 
o.order_id,
o.order_date,
c.first_name,
c.last_name,
os.name AS status
FROM orders AS o
JOIN customers AS c
ON o.customer_id = c.customer_id
JOIN order_statuses AS os
ON o.status = os.order_status_id

复合连接条件(多个主键)(例):

​ 适用于不能用一列区分每一行的表格,通过两列或多列确定每一个

1
2
3
4
5
SELECT *
FROM order_items AS oi
JOIN order _item_notes AS oin
ON oi.order_id = oin.order_idf
AND oi.product_id = oin.product_id

​ 用 using 子句改写:

1
2
3
4
SELECT *
FROM order_items AS oi
JOIN order _item_notes AS oin
USING (order_id,product_id)

隐式链接语法(例):

​ (内连接)

1
2
3
4
SELECT *
FROM orders AS o
JOIN customers AS c
ON o.customer_id = c.customer_id

​ (表达的内容同上面的内连接一样)

1
2
3
SELECT *
FROM orders AS o, customer AS C
WHERE o.customer_id = c.customer_id

INSERT(插入):

列属性:

功能 描述
Column
Datatype 数据类型
PK 主键
NN 勾选表示不可为NULL
AI 自动自增
Default 默认值

插入行:

​ 插入单行:

1
2
3
4
5
INSERT INTO (表格) -- 要输入每个列的值
VALUES('每个列的值')
----------------------
INSERT INTO (表格)('要插入的列') -- 输入有默认值的列的值
VALUES('每个列的值')

​ 插入多行:

1
2
INSERT INTO (表格)('要插入的列') -- 输入有默认值的列的值
VALUES('value1'),('value2'),('value3'),('value4')
     插入分层行:
1
LAST_INSERT_ID() -- 返回上insert一个自动填充的值
1
2
3
4
5
6
7
8
-- (例)
INSERT INTO orders (customer_id,order_date,status) -- 需要填入值的列
VALUES (1,'2019-01-02',1); -- 填入的分别是订单的 客户ID ,订单日期,订单状态 (自动填入订单ID)

INSERT INTO order_items
VALUES
(LAST_INSERT_ID(),1,1,2.95) -- LAST_INSERT_ID() 返回的时订单的id ,填入的分别是 订单id,产品id,需要的数量,产品单价
(LAST_INSERT_ID(),2,1,9.95)

​ 创建表复制:

1
2
CREATE TABLE order_archived AS -- 创建表格
SELECT * FROM orders -- c
1
2
3
4
INSERT INTO orders_archived (列) -- 要复制的目标表格
SELECT *
FROM orders -- 复制这个表格
WHERE order_date < '2019-01-01' -- 复制进去的条件

update(更新):

更新(改)单行(例):

1
2
3
UPDATE invoices -- 表格
SET payment_total = 2.69,payment_date = '2020-02-03' -- 更新的列以及内容
WHERE invoiced_id = 1 -- 更新哪一行

更新多行:

1
2
3
UPDATE invoices -- 表格
SET payment_total = 2.69,payment_date = '2020-02-03' -- 更新的列以及内容
WHERE client_id IN (3,4) -- 在多行中更新

在 update 中用子查询:

1
2
3
4
5
6
UPDATE invoices -- 表格
SET payment_total = 2.69,payment_date = '2020-02-03' -- 更新的列以及内容
WHERE client_id = -- 更改这个id的信息
(SELECT client_id
FROM clients
WHERE name = 'Myworks') -- 查找名字叫这个的id

delete(删除):

1
2
3
4
5
DELETE FROM invoices -- 要删除的表格
WHERE client_id = -- 找到删除的行
(SELECT client_id
FROM clients
WHERE name = 'Myworks')

聚合函数:

聚合函数只计算非空值

1
2
3
4
5
6
7
8
SELECT
MAX( 参数/表达式 ) AS 别名 , -- 求最大值 可以数字、日期
MIN( 参数/表达式 ) AS 别名 , -- 求最小值
AVG( 参数/表达式 ) AS 别名 , -- 求平均值
SUM( 参数/表达式 ) AS 别名 , -- 求数据的和
COUNT( 参数/表达式 ) AS 别名 -- j
FROM -- 表格
WHERE -- 筛选条件