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
作者
EnderKC
发布于
2024年12月23日
许可协议