SQL简介

SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。

演示用数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 801 | 金贤重 | 男 | CS | 23 |
| 802 | 李敏镐 | 男 | MA | 25 |
| 803 | 那英 | 女 | CS | 41 |
| 804 | 金秀贤 | 女 | MA | 24 |
| 805 | 刘德华 | 男 | NULL | 52 |
| 806 | 文章 | 男 | CS | 27 |
| 807 | 刘欢 | 男 | MA | 51 |
| 808 | 马伊琍 | 女 | CS | 36 |
| 809 | 姚笛 | 女 | MA | 23 |
| 810 | 周杰伦 | 男 | NULL | 39 |
+-----+-----------+--------+------+------+

SQL SELECT 语句

SQL SELECT 语法

SELECT 语句用于从数据库中选取数据。
结果被存储在一个结果表中,称为结果集。

1
2
3
4
SELECT 
column_name,column_name
FROM
table_name;
1
SELECT * FROM table_name;

SELECT Column 实例

1
2
3
4
SELECT
sno,age,sname
FROM
s;

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+-----+------+-----------+
| sno | age | sname |
+-----+------+-----------+
| 801 | 23 | 金贤重 |
| 802 | 25 | 李敏镐 |
| 803 | 41 | 那英 |
| 804 | 24 | 金秀贤 |
| 805 | 52 | 刘德华 |
| 806 | 27 | 文章 |
| 807 | 51 | 刘欢 |
| 808 | 36 | 马伊琍 |
| 809 | 23 | 姚笛 |
| 810 | 39 | 周杰伦 |
+-----+------+-----------+

SQL SELECT DISTINCT 语句

在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。

SELECT DISTINCT 实例

1
2
3
4
SELECT DISTINCT
age
FROM
s;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+------+
| age |
+------+
| 23 |
| 25 |
| 41 |
| 24 |
| 52 |
| 27 |
| 51 |
| 36 |
| 23 |
| 39 |
+------+

SELECT DISTINCT

1
2
3
4
5
6
7
8
9
10
11
12
13
+------+
| age |
+------+
| 23 |
| 25 |
| 41 |
| 24 |
| 52 |
| 27 |
| 51 |
| 36 |
| 39 |
+------+

SQL WHERE 子句

WHERE 子句用于提取那些满足指定条件的记录。

SQL WHERE 语法

1
2
3
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

WHERE 子句实例

1
2
3
4
5
6
SELECT
*
FROM
s
WHERE
gender = '男';

运行结果:

1
2
3
4
5
6
7
8
9
10
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 801 | 金贤重 | 男 | CS | 23 |
| 802 | 李敏镐 | 男 | MA | 25 |
| 805 | 刘德华 | 男 | NULL | 52 |
| 806 | 文章 | 男 | CS | 27 |
| 807 | 刘欢 | 男 | MA | 51 |
| 810 | 周杰伦 | 男 | NULL | 39 |
+-----+-----------+--------+------+------+

文本字段 数值字段

1
SELECT * FROM s WHERE age = 23;
1
SELECT * FROM s WHERE gender = '男';

WHERE 子句中的运算符

下面的运算符可以在 WHERE 子句中使用:

运算符 描述
= 等于
<> 不等于  ** 一些sql版本中写作 !=**
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值

WHERE 子句中的运算符与逻辑运算符实例

1
2
3
4
5
6
7
8
SELECT
*
FROM
s
WHERE
age < 30
AND
age > 20;

运行结果:

1
2
3
4
5
6
7
8
9
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 801 | 金贤重 | 男 | CS | 23 |
| 802 | 李敏镐 | 男 | MA | 25 |
| 804 | 金秀贤 | 女 | MA | 24 |
| 806 | 文章 | 男 | CS | 27 |
| 809 | 姚笛 | 女 | MA | 23 |
+-----+-----------+--------+------+------+
1
2
3
4
5
6
7
8
SELECT
*
FROM
s
WHERE
age < 25
OR
age > 40;

运行结果:

1
2
3
4
5
6
7
8
9
10
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 801 | 金贤重 | 男 | CS | 23 |
| 803 | 那英 | 女 | CS | 41 |
| 804 | 金秀贤 | 女 | MA | 24 |
| 805 | 刘德华 | 男 | NULL | 52 |
| 807 | 刘欢 | 男 | MA | 51 |
| 809 | 姚笛 | 女 | MA | 23 |
+-----+-----------+--------+------+------+
1
2
3
4
5
6
7
SELECT
*
FROM
s
WHERE
NOT
dept = 'CS';

运行结果:

1
2
3
4
5
6
7
8
9
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 802 | 李敏镐 | 男 | MA | 25 |
| 804 | 金秀贤 | 女 | MA | 24 |
| 807 | 刘欢 | 男 | MA | 51 |
| 809 | 姚笛 | 女 | MA | 23 |
+-----+-----------+--------+------+------+

WHERE 子句中特殊条件判断实例

1
2
3
4
5
6
SELECT
*
FROM
s
WHERE
dept IS NULL;

运行结果:

1
2
3
4
5
6
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 805 | 刘德华 | 男 | NULL | 52 |
| 810 | 周杰伦 | 男 | NULL | 39 |
+-----+-----------+--------+------+------+
1
2
3
4
5
6
SELECT
*
FROM
s
WHERE
age BETWEEN 30 AND 40;

运行结果:

1
2
3
4
5
6
7
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 808 | 马伊琍 | 女 | CS | 36 |
| 810 | 周杰伦 | 男 | NULL | 39 |
+-----+-----------+--------+------+------+

1
2
3
4
5
6
SELECT
*
FROM
s
WHERE
age IN (23, 25, 27);

运行结果:

1
2
3
4
5
6
7
8
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 801 | 金贤重 | 男 | CS | 23 |
| 802 | 李敏镐 | 男 | MA | 25 |
| 806 | 文章 | 男 | CS | 27 |
| 809 | 姚笛 | 女 | MA | 23 |
+-----+-----------+--------+------+------+
  • % 表示多个字值,_ 下划线表示一个字符
  • M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的
  • %M% : 表示查询包含M的所有内容
  • %M_ : 表示查询以M在倒数第二位的所有内容
1
2
3
4
5
6
7
8
9
10
SELECT
*
FROM
s
WHERE
sname LIKE '金%'
OR
sname LIKE '%杰%'
OR
sname LIKE '%刘_';

运行结果:

1
2
3
4
5
6
7
8
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 801 | 金贤重 | 男 | CS | 23 |
| 804 | 金秀贤 | 女 | MA | 24 |
| 807 | 刘欢 | 男 | MA | 51 |
| 810 | 周杰伦 | 男 | NULL | 39 |
+-----+-----------+--------+------+------+

SQL ORDER BY 关键字

ORDER BY 关键字用于对结果集进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

SQL ORDER BY 语法

1
2
3
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

ORDER BY 实例

1
2
3
4
5
6
SELECT	
*
FROM
s
ORDER BY
age;

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 801 | 金贤重 | 男 | CS | 23 |
| 809 | 姚笛 | 女 | MA | 23 |
| 804 | 金秀贤 | 女 | MA | 24 |
| 802 | 李敏镐 | 男 | MA | 25 |
| 806 | 文章 | 男 | CS | 27 |
| 808 | 马伊琍 | 女 | CS | 36 |
| 810 | 周杰伦 | 男 | NULL | 39 |
| 803 | 那英 | 女 | CS | 41 |
| 807 | 刘欢 | 男 | MA | 51 |
| 805 | 刘德华 | 男 | NULL | 52 |
+-----+-----------+--------+------+------+
1
2
3
4
5
6
7
SELECT	
*
FROM
s
ORDER BY
age
DESC;

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 805 | 刘德华 | 男 | NULL | 52 |
| 807 | 刘欢 | 男 | MA | 51 |
| 803 | 那英 | 女 | CS | 41 |
| 810 | 周杰伦 | 男 | NULL | 39 |
| 808 | 马伊琍 | 女 | CS | 36 |
| 806 | 文章 | 男 | CS | 27 |
| 802 | 李敏镐 | 男 | MA | 25 |
| 804 | 金秀贤 | 女 | MA | 24 |
| 801 | 金贤重 | 男 | CS | 23 |
| 809 | 姚笛 | 女 | MA | 23 |
+-----+-----------+--------+------+------+

ORDER BY 多列

1
2
3
4
5
6
SELECT
*
FROM
s
ORDER BY
gender,age;

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+-----+-----------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+-----------+--------+------+------+
| 809 | 姚笛 | 女 | MA | 23 |
| 804 | 金秀贤 | 女 | MA | 24 |
| 808 | 马伊琍 | 女 | CS | 36 |
| 803 | 那英 | 女 | CS | 41 |
| 801 | 金贤重 | 男 | CS | 23 |
| 802 | 李敏镐 | 男 | MA | 25 |
| 806 | 文章 | 男 | CS | 27 |
| 810 | 周杰伦 | 男 | NULL | 39 |
| 807 | 刘欢 | 男 | MA | 51 |
| 805 | 刘德华 | 男 | NULL | 52 |
+-----+-----------+--------+------+------+

SQL INSERT INTO 语句

INSERT INTO 语句用于向表中插入新记录。

INSERT INTO 语法

1
2
INSERT INTO table_name
VALUES (value1,value2,value3,...);
1
2
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

SQL INSERT INTO 实例

1
2
3
4
5
INSERT INTO
s
(sno, sname, gender, dept, age)
VALUES
(811, '张三', '男', NULL, 66);

运行结果:

1
Query OK, 1 row affected (0.00 sec)

检查:

1
2
3
4
5
6
mysql> SELECT * FROM s WHERE sname = '张三';
+-----+--------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+--------+--------+------+------+
| 811 | 张三 | 男 | NULL | 66 |
+-----+--------+--------+------+------+

SQL UPDATE 语句

UPDATE 语句用于更新表中的记录

SQL UPDATE 语法

1
2
3
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

SQL UPDATE 实例

1
2
3
4
5
6
UPDATE
s
SET
gender = '女'
WHERE
sname = '张三';

运行结果 :

1
2
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

检查:

1
2
3
4
5
6
7
mysql> SELECT * from s WHERE sname = '张三';
+-----+--------+--------+------+------+
| sno | sname | gender | dept | age |
+-----+--------+--------+------+------+
| 811 | 张三 | 女 | NULL | 66 |
+-----+--------+--------+------+------+
1 row in set (0.00 sec)

Update 警告!

在更新记录时要格外小心!
注意WHERE!!!
注意WHERE!!!
注意WHERE!!!

SQL DELETE 语句

DELETE 语句用于删除表中的记录。

SQL DELETE 语法

1
2
DELETE FROM table_name
WHERE some_column=some_value;

SQL DELETE 实例

1
2
3
4
5
DELETE 
FROM
s
WHERE
sname = '张三';

运行结果:

1
Query OK, 1 row affected (0.00 sec)

检查:

1
2
mysql> SELECT * FROM s WHERE sname = '张三';
Empty set (0.00 sec)

28/05/2022 17:34