mySQL教程
mySQL教程
教程链接(点击这里)
select(查找)
格式:
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 的单字符 |
内连接 (例):
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 一样
外连接 (例):
连接到其他数据库的表格:
SELECT *
FROM orders_items [AS] oi # 从这个 表格 并把orders简化成o
JOIN sql_inventory.products [AS] p # 外部数据库名称.表格名称 简化为 名字
ON oi.product_id = c.product_id
左右链接:
内连接:
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
*/
外连接 左/右 连接:
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
*/
自 外连接:
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
多表连接(例):
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
复合连接条件(多个主键)(例):
适用于不能用一列区分每一行的表格,通过两列或多列确定每一个
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 子句改写:
SELECT *
FROM order_items AS oi
JOIN order _item_notes AS oin
USING (order_id,product_id)
隐式链接语法(例):
(内连接)
SELECT *
FROM orders AS o
JOIN customers AS c
ON o.customer_id = c.customer_id
(表达的内容同上面的内连接一样)
SELECT *
FROM orders AS o, customer AS C
WHERE o.customer_id = c.customer_id
INSERT(插入):
列属性:
功能 | 描述 |
---|---|
Column | 列 |
Datatype | 数据类型 |
PK | 主键 |
NN | 勾选表示不可为NULL |
AI | 自动自增 |
Default | 默认值 |
插入行:
插入单行:
INSERT INTO (表格) -- 要输入每个列的值
VALUES('每个列的值')
----------------------
INSERT INTO (表格)('要插入的列') -- 输入有默认值的列的值
VALUES('每个列的值')
插入多行:
INSERT INTO (表格)('要插入的列') -- 输入有默认值的列的值
VALUES('value1'),('value2'),('value3'),('value4')
插入分层行:
LAST_INSERT_ID() -- 返回上insert一个自动填充的值
-- (例)
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)
创建表复制:
CREATE TABLE order_archived AS -- 创建表格
SELECT * FROM orders -- c
INSERT INTO orders_archived (列) -- 要复制的目标表格
SELECT *
FROM orders -- 复制这个表格
WHERE order_date < '2019-01-01' -- 复制进去的条件
update(更新):
更新(改)单行(例):
UPDATE invoices -- 表格
SET payment_total = 2.69,payment_date = '2020-02-03' -- 更新的列以及内容
WHERE invoiced_id = 1 -- 更新哪一行
更新多行:
UPDATE invoices -- 表格
SET payment_total = 2.69,payment_date = '2020-02-03' -- 更新的列以及内容
WHERE client_id IN (3,4) -- 在多行中更新
在 update 中用子查询:
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(删除):
DELETE FROM invoices -- 要删除的表格
WHERE client_id = -- 找到删除的行
(SELECT client_id
FROM clients
WHERE name = 'Myworks')
聚合函数:
聚合函数只计算非空值
SELECT
MAX( 参数/表达式 ) AS 别名 , -- 求最大值 可以数字、日期
MIN( 参数/表达式 ) AS 别名 , -- 求最小值
AVG( 参数/表达式 ) AS 别名 , -- 求平均值
SUM( 参数/表达式 ) AS 别名 , -- 求数据的和
COUNT( 参数/表达式 ) AS 别名 -- j
FROM -- 表格
WHERE -- 筛选条件
mySQL教程
http://localhost:8090//archives/d2317ff2-0388-4ca7-8d16-c815bd1f5b24