工作常用的MySQL语句
文中的大部分SQL摘自MySQL Tutorial
Bases
INSERT INTO SELECT(将查找的结果插入目标表)
INSERT INTO table_name(column_list)
SELECT
select_list
FROM
another_table
WHERE
condition;
INSERT ON DUPLICATE KEY UPDATE statement(插入更新数据)
如果目标表里已经存在相同的主键,则执行下面的更新字段的SQL
INSERT INTO table (column_list)
VALUES (value_list)
[SELECT ...FROM ... WHERE]
ON DUPLICATE KEY UPDATE
c1 = v1,
c2 = v2,
...;
UPDATE JOIN syntax(联表更新数据)
UPDATE T1, T2,
[INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2. C1
SET T1.C2 = T2.C2,
T2.C3 = expr
WHERE condition
DELETE JOIN with JOIN(联表删除数据)
DELETE T1[, T2]
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;
Tips
1. 比较两个表的数据是不是能够完全关联上
SELECT pk,c1 FROM (
SELECT t1.pk, t1.c1
FROM t1
UNION ALL
SELECT t2.pk, t2.c1
FROM t2
) t
GROUP BY pk, c1
HAVING COUNT(0) = 1
ORDER BY pk
2. 查找单个表里可能存在的重复数据
SELECT
col,
COUNT(col)
FROM
table_name
GROUP BY col
HAVING COUNT(col) > 1;
3. 注册一个值,在下面使用
(可以在同一个会话中直接用@Variable_name
调用)
SET @variable_name := value;
SELECT @variable_name := value;
4. 在mysql里使用正则
SELECT
productname
FROM
products
WHERE
productname REGEXP '^(A|B|C)'
ORDER BY productname;
Metacharacter | Behavior |
---|---|
^ | matches the position at the beginning of the searched string |
$ | matches the position at the end of the searched string |
. | matches any single character |
[…] | matches any character specified inside the square brackets |
[^…] | matches any character not specified inside the square brackets |
p1|p2 | matches any of the patterns p1 or p2 |
* | matches the preceding character zero or more times |
+ | matches preceding character one or more times |
{n} | matches n number of instances of the preceding character |
{m,n} | matches from m to n number of instances of the preceding character |
查找数据的时候 REGEXP,LIKE,IN,=都可以查找
但是需要考虑:效率哪个更高
5. 特殊的排序方式
ORDER BY
FIELD(key,'value','value2','value3');
需要特殊注意:如果排序字段的值不在上述列出,则会排在最前面
6. 使用sql进行表备份
CREATE TABLE new_table
SELECT col, col2, col3
FROM
existing_table;