SQL基础
ClearSky Drizzle Lv4

SQL语法总结

常用指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
dror database if exists xx; 删除数据库
show databases; 展示所有数据库
use xxx 进入指定的数据库
show tables; 展示所有表
select * from xxxx; 展示表中的内容
SELECT DISTINCT country FROM Websites; 返回表中不同的值
describe user; 查看表格数据结构
desc user; 查看表格建构 简写
select * from diaochabiao where sixth='男'; 'where'作为条件筛选数据
CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 创建用户命令
# 数据库备份sql文件命令
mysqldump -u root -p123456 --databases 数据库名称 -r 备份文件路径
# 数据库导入sql文件命令
source name.sql

ALTER 语法

1
2
3
4
5
ALTER TABLE 表名 DROP [COLUMN] 字段名 ;删除字段
ALTER TABLE 表名 ADD [COLUMN] 字段名 字段类型 是否可为空 COMMENT '注释' AFTER 指定某字段 ; 在指定位置插入新字段
ALTER TABLE 表名 COMMENT '新注释'; 修改注释
ALTER TABLE 旧表名 RENAME TO 新表名 ; 修改表名
ALTER TABLE 表名 MODIFY [COLUMN] 字段名 新数据类型 新类型长度 新默认值 新注释;

SQL ORDER BY 语法

1
2
3
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
  • column1, column2, …:要排序的字段名称,可以为多个字段。
  • ASC:表示按升序排序。
  • DESC:表示按降序排序。

SQL INSERT INTO 语句

1
2
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
  • table_name:需要插入新记录的表名。
  • column1, column2, …:需要插入的字段名。
  • value1, value2, …:需要插入的字段值

SQL UPDATE 语句

1
2
3
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • table_name:要修改的表名称。
  • column1, column2, …:要修改的字段名称,可以为多个字段。
  • value1, value2, …:要修改的值,可以为多个值。
  • condition:修改条件,用于指定哪些数据要修改。

SQL DELETE 语句

1
2
DELETE FROM table_name
WHERE condition;
  • table_name:要删除的表名称。
  • condition:删除条件,用于指定哪些数据要删除。

删除所有数据

DELETE FROM table_name;

MySQL SELECT LIMIT

用于规定要返回的记录的数目

1
SELECT * FROM Websites LIMIT 2;

LIKE

1
2
3
select *
from diaochabiao
where name Like 'l%';
  • %l 以’l’结尾所有项
  • %l% 包含’l’的所有项
    注释:从diaochabiao中找出name列中以’l’开头的所有项

SQL [charlist] 通配符

MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式

1
2
select * from diaochabiao
WHERE name REGEXP '^[^A-H]';

SQL IN 操作符

1
2
3
SELECT column1, column2, ...
FROM table_name
WHERE column IN (value1, value2, ...);
  • column1, column2, …:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
  • table_name:要查询的表名称。
  • column:要查询的字段名称。
  • value1, value2, …:要查询的值,可以为多个值
    1
    2
    3
    4
    5
    6
    7
    8
    9
    mysql> select * from diaochabiao
    -> WHERE BrithYear IN ('2002','2003');
    +----+------+-----------+-------+
    | id | Name | BrithYear | sixth |
    +----+------+-----------+-------+
    | 1 | ljn | 2002 ||
    | 2 | ljh | 2003 ||
    +----+------+-----------+-------+
    2 rows in set (0.00 sec)

SQL BETWEEN 操作符

1
2
3
SELECT column1, column2, ...
FROM table_name
WHERE column BETWEEN value1 AND value2;
  • column1, column2, …:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
  • table_name:要查询的表名称。
  • column:要查询的字段名称。
  • value1:范围的起始值。
  • value2:范围的结束值。

实列

1
2
3
4
5
6
7
8
9
mysql> select * from diaochabiao
-> WHERE id BETWEEN 3 AND 5;
+----+------+-----------+-------+
| id | Name | BrithYear | sixth |
+----+------+-----------+-------+
| 4 | lhh | 2005 ||
| 5 | NULL | NULL | NULL |
+----+------+-----------+-------+
2 rows in set (0.00 sec)

带有 IN 的 BETWEEN 操作符实例

1
2
3
4
5
6
7
8
9
mysql> select * from diaochabiao
-> WHERE (id BETWEEN 3 AND 5)
-> AND sixth NOT IN ('NULL');
+----+------+-----------+-------+
| id | Name | BrithYear | sixth |
+----+------+-----------+-------+
| 4 | lhh | 2005 ||
+----+------+-----------+-------+
1 row in set (0.01 sec)

SQL 别名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> select name,concat(BrithYear,sixth)
-> AS bs from diaochabiao;
+------+--------+
| name | bs |
+------+--------+
| ljn | 2002|
| ljh | 2003|
| lhh | 2005|
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
| NULL | NULL |
+------+--------+
10 rows in set (0.01 sec)

SQL 连接(JOIN)

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。

1
2
3
SELECT column1, column2, ...
FROM table1
JOIN table2 ON condition;
  • column1, column2, …:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
  • table1:要连接的第一个表。
  • table2:要连接的第二个表。
  • condition:连接条件,用于指定连接方式。

不同的 SQL JOIN

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    mysql> select * from newlist;
    +---------------------+---------+
    | date | shenfen |
    +---------------------+---------+
    | 2022-12-22 00:00:00 | 2222222 |
    | 2023-12-21 00:00:00 | 2222 |
    | NULL | NULL |
    | NULL | NULL |
    | NULL | NULL |
    | NULL | NULL |
    | NULL | NULL |
    +---------------------+---------+
    7 rows in set (0.00 sec)

    mysql> select * from diaochabiao;
    +----+------+-----------+-------+
    | id | Name | BrithYear | sixth |
    +----+------+-----------+-------+
    | 1 | ljn | 2002 ||
    | 2 | ljh | 2003 ||
    | 3 | lhh | 2005 ||
    | 4 | NULL | NULL | NULL |
    +----+------+-----------+-------+
    4 rows in set (0.00 sec)

INNER JOIN

1
2
3
4
5
6
7
8
9
10
11
mysql> select * from newlist
-> inner join diaochabiao
-> on newlist.id = diaochabiao.id;
+----+---------------------+---------+----+------+-----------+-------+
| id | date | shenfen | id | Name | BrithYear | sixth |
+----+---------------------+---------+----+------+-----------+-------+
| 1 | 2022-12-22 00:00:00 | 2222222 | 1 | ljn | 2002 ||
| 2 | 2023-12-21 00:00:00 | 2222 | 2 | ljh | 2003 ||
| 3 | NULL | NULL | 3 | lhh | 2005 ||
+----+---------------------+---------+----+------+-----------+-------+
3 rows in set (0.00 sec)

注释:INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 “diaochabiao” 表中的行在 “newlist” 中没有匹配,则不会列出这些行。

LEFT JOIN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> select * from newlist
-> left join diaochabiao
-> on newlist.id = diaochabiao.id;
+----+---------------------+---------+------+------+-----------+-------+
| id | date | shenfen | id | Name | BrithYear | sixth |
+----+---------------------+---------+------+------+-----------+-------+
| 1 | 2022-12-22 00:00:00 | 2222222 | 1 | ljn | 2002 ||
| 2 | 2023-12-21 00:00:00 | 2222 | 2 | ljh | 2003 ||
| 3 | NULL | NULL | 3 | lhh | 2005 ||
| 4 | NULL | NULL | NULL | NULL | NULL | NULL |
| 5 | NULL | NULL | NULL | NULL | NULL | NULL |
| 6 | NULL | NULL | NULL | NULL | NULL | NULL |
| 7 | NULL | NULL | NULL | NULL | NULL | NULL |
+----+---------------------+---------+------+------+-----------+-------+
7 rows in set (0.00 sec)

RIGHT JOIN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> select * from diaochabiao
-> right join newlist
-> on diaochabiao.id = newlist.id
-> ;
+------+------+-----------+-------+----+---------------------+---------+
| id | Name | BrithYear | sixth | id | date | shenfen |
+------+------+-----------+-------+----+---------------------+---------+
| 1 | ljn | 2002 || 1 | 2022-12-22 00:00:00 | 2222222 |
| 2 | ljh | 2003 || 2 | 2023-12-21 00:00:00 | 2222 |
| 3 | lhh | 2005 || 3 | NULL | NULL |
| NULL | NULL | NULL | NULL | 4 | NULL | NULL |
| NULL | NULL | NULL | NULL | 5 | NULL | NULL |
| NULL | NULL | NULL | NULL | 6 | NULL | NULL |
| NULL | NULL | NULL | NULL | 7 | NULL | NULL |
+------+------+-----------+-------+----+---------------------+---------+
7 rows in set (0.00 sec)

注释:RIGHT JOIN 关键字从右表(access_log)返回所有的行,即使左表(Websites)中没有匹配。

SQL UNION 操作符

SQL UNION 操作符合并两个或多个 SELECT 语句的结果。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

1
2
3
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

实列

1
2
3
4
5
6
7
8
9
10
11
12
mysql> select country from diaochabiao
-> union
-> select country from newlist;
+---------+
| country |
+---------+
| US |
| CN |
| UT |
| |
+---------+
4 rows in set (0.00 sec)

SQL UNION ALL 语法

1
2
3
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> select country from diaochabiao
-> union all
-> select country from newlist;
+---------+
| country |
+---------+
| US |
| CN |
| UT |
| CN |
| US |
| |
| |
| |
| |
| |
+---------+
10 rows in set (0.00 sec)

SQL SELECT INTO 语句

通过 SQL,您可以从一个表复制信息到另一个表。

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

1
2
3
SELECT *
INTO newtable [IN externaldb]
FROM table1;

SQL INSERT INTO SELECT 语句

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

语法

1
2
INSERT INTO table2
SELECT * FROM table1;

实列

1
2
3
4
5
6
7
mysql> select * from persons;
+----------+-----------+---------+
| personID | FristName | country |
+----------+-----------+---------+
| 1 | ljn | cn |
+----------+-----------+---------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> insert into persons(FristName,country)
-> select name,country from diaochabiao;
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from persons;
+----------+-----------+---------+
| personID | FristName | country |
+----------+-----------+---------+
| 1 | ljn | cn |
| 2 | ljn | US |
| 3 | ljh | CN |
| 4 | lhh | UT |
+----------+-----------+---------+
4 rows in set (0.00 sec)
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
This site is deployed on
Unique Visitor Page View