基本操作
运行
shift + ctrl + enter
其他
MYSQL 对 Sapce、Enter 不敏感,对单引号、双引号不区分
注释
-- 注释内容
选中数据库
USE 数据库名; -- 记得要加分号, 但之后的就不用
列出数据
SELECT * -- 全部
SELECT points -- 子文件
SELECT DISTINCT points -- 无重复子文件
SELECT points_1, points_2 -- 多个子文件
SELECT points + 10 -- 子文件数据运算
SELECT (points + 10) AS new_data -- 子文件起别名
SELECT (points + 10) AS "new data" -- 子文件起别名
数据来源
FROM customers -- 子数据库
筛选数据
WHERE points > 3000 AND points < 6000 -- 或用 OR
WHERE state = 'VA' -- 不等于用 !=和 <>表示
WHERE NOT(prices <= 20) -- 相当于大于20
WHERE state IN ('VA','MA','GA') -- 简化的 AND
WHERE prices BETWEEN 100 AND 400 -- 区间为 100 至 400
WHERE old_name LIKE 'brush%' -- 以 brush 开头的数据, %在前面是结尾, %两边都有是存在
WHERE first_name REGEXP 'brush' -- 存在 brush 的数据, ^在前面是开头, $在后面是结尾
WHERE first_name REGEXP 'field|mac' -- 简化的 AND 与存在
WHERE first_name REGEXP '[gim]e' -- 存在 ge,ie,me ,也可以用 [i-j]表示连续
WHERE last_name LIKE 'k___l' -- 第一个字符为 k ,第五个字符为 l的数据
WHERE phone IS NULL -- phone 为空的数据
数据排序
ORDER BY first_name -- 按照 ASCII码排序
ORDER BY first_name ,last_name -- 排序优先级顺序
ORDER BY first_name DESC,last_name DESC -- 降序优先级顺序, asc是升序 (默认)
数据限制
LIMIT 3 -- 取前三个
LIMIT 6, 3 -- 先向后偏移 6位 ,再取前三个 (从 789开始)
表单合并
-- 当你需要列出 ord.items 和 products 某些数据时
-- 要先确定 两者共同的数据, 并将其合并, 最后再列出
SELECT order_id, oi.product_id, quantity, unit_price -- 要列的数据 注意共同数据的前缀
FROM order_iteams oi -- 合并表单之一 并起别名
JOIN products p ON oi.product_id = p.product_id -- 合并表单之二 共同数据
-- 下面是隐式连接语法 效果和上面一样
SELECT order_id, oi.product_id, quantity, unit_price
FROM order_iteams oi, products p
WHERE oi.product_id = p.product_id
-- 下面是 USING 关键词 效果和上面一样
SELECT order_id, oi.product_id, quantity, unit_price
FROM order_iteams oi, products p
USING(product_id)
表单交叉
建议阅读此博客:CROSS JOIN
-- 下面两者效果是一样的
-- 前者是交叉连接 后者是显示连接
SELECT *
FROM customers c
CROSS JOIN products p
ORDER BY c.first_name
SELECT *
FROM customers c, products p
ORDER BY c.first_name
UNION 操作符
-- 目标:定义 2000分以下的顾客为青铜 2000至3000分的顾客为白银 其他分的顾客为黄金
SELECT
customer_id,
first_name,
points,
'Bronze' AS type
FROM customers
WHERE points < 2000
UNION
SELECT
customer_id,
first_name,
points,
'Silver' AS type
FROM customers
WHERE points BETWEEN 2000 AND 3000
UNION
SELECT
customer_id,
first_name,
points,
'Gold' AS type
FROM customers
WHERE points > 3000
ORDER BY first_name
运行结果:
插入数据
-- 两种插入数据的方法
INSERT INTO products(name, quantity, unit_price)
VALUES ('product_1', 10, 1.95)
('product_2', 12, 1.95)
('product_3', 14, 1.95); -- 记得要加分号
INSERT INTO products
VALUES (LAST_INSERT_ID(), 'product_1', 10, 1.95)
(LAST_INSERT_ID(), 'product_2', 12, 1.95)
(LAST_INSERT_ID(), 'product_3', 14, 1.95); -- 记得要加分号
生成表单
CREATE TABLE orders_archived AS -- 创建表单
SELECT * FROM orders
INSERT INTO orders_archived -- 复制下面内容到表单
SELECT * FROM orders
WHERE order_date < '2019-01-01'
更新表单
-- 普通更新
UPDATE invoices -- 要更新的数据库
SET
invoice_total = 10,
payment_date = '2019-03-01'
WHERE invoice_id = 1
-- 内层更新
UPDATE orders -- 要更新的数据库
SET comments = 'Gold customer'
WHERE customer_id IN
(SELECT customer_id
FROM customers
WHERE points > 3000)
删除数据
-- 内层删除
DELETE FROM invoices -- 删除数据库
WHERE client_id = (
SELECT *
FROM customers
WHERE name = 'Myworks'
)