二、DDL-2.表操作-创建&查询
发布人:shili8
发布时间:2025-01-07 22:35
阅读次数:0
**数据库管理系统**
### 二、DDL-2. 表操作-创建&查询####1. 创建表在关系型数据库中,表是数据的基本存储单位。每个表都有一个唯一的名称,可以通过以下语法来创建:
sqlCREATE TABLE 表名 ( 列名 数据类型, 列名 数据类型, ... );
例如,我们可以使用以下语句创建一个学生信息表:
sqlCREATE TABLE 学生信息 ( 学号 INT PRIMARY KEY, 姓名 VARCHAR(20), 年龄 INT, 性别 CHAR(1) );
在上述语句中,`学号`被设置为主键(Primary Key),这意味着每个学生的学号都是唯一的。
####2. 查询表要从表中获取数据,我们可以使用以下语法:
sqlSELECT 列名1, 列名2, ... FROM 表名;
例如,我们可以使用以下语句查询所有学生信息:
sqlSELECT * FROM 学生信息;
在上述语句中,`*`表示选择表中的所有列。
####3. 条件查询我们可以通过添加 `WHERE` 子句来根据条件筛选数据:
sqlSELECT 列名1, 列名2, ... FROM 表名WHERE 条件;
例如,我们可以使用以下语句查找年龄大于18的学生:
sqlSELECT * FROM 学生信息WHERE 年龄 >18;
####4. 排序和分页我们可以通过添加 `ORDER BY` 子句来对结果进行排序:
sqlSELECT 列名1, 列名2, ... FROM 表名ORDER BY 列名 ASC|DESC;
例如,我们可以使用以下语句按学号升序排列学生信息:
sqlSELECT * FROM 学生信息ORDER BY 学号 ASC;
我们也可以通过添加 `LIMIT` 子句来限制结果的数量:
sqlSELECT 列名1, 列名2, ... FROM 表名LIMIT 开始行数, 结果数量;
例如,我们可以使用以下语句获取前5条学生信息:
sqlSELECT * FROM 学生信息LIMIT0,5;
####5. 分组和聚合我们可以通过添加 `GROUP BY` 子句来对结果进行分组:
sqlSELECT 列名1, 列名2, ... FROM 表名GROUP BY 列名;
例如,我们可以使用以下语句按性别分组统计学生数量:
sqlSELECT 性别, COUNT(*) AS 数量FROM 学生信息GROUP BY 性别;
我们也可以通过添加 `HAVING` 子句来对结果进行过滤:
sqlSELECT 列名1, 列名2, ... FROM 表名GROUP BY 列名HAVING 条件;
例如,我们可以使用以下语句按性别分组统计学生数量,要求每个性别的学生数量大于5:
sqlSELECT 性别, COUNT(*) AS 数量FROM 学生信息GROUP BY 性别HAVING COUNT(*) >5;
####6. 子查询我们可以通过使用子查询来在一个语句中执行多个查询:
sqlSELECT 列名1, 列名2, ... FROM 表名WHERE 条件 = (子查询);
例如,我们可以使用以下语句查找年龄大于18且性别为男的学生:
sqlSELECT * FROM 学生信息WHERE 年龄 >18 AND 性别 = (SELECT 性别 FROM 学生信息 WHERE 年龄 >18 GROUP BY 性别 HAVING COUNT(*) >5);
####7. 联合查询我们可以通过使用 `UNION` 或 `UNION ALL` 子句来将两个或多个查询的结果联合起来:
sqlSELECT 列名1, 列名2, ... FROM 表名1UNIONSELECT 列名1, 列名2, ... FROM 表名2;
例如,我们可以使用以下语句将学生信息和老师信息联合起来:
sqlSELECT * FROM 学生信息UNIONSELECT * FROM 老师信息;
####8. 交叉连接我们可以通过使用 `CROSS JOIN` 子句来将两个表的每一行与另一个表的每一行进行匹配:
sqlSELECT 列名1, 列名2, ... FROM 表名1CROSS JOIN 表名2;
例如,我们可以使用以下语句将学生信息与老师信息进行交叉连接:
sqlSELECT * FROM 学生信息CROSS JOIN 老师信息;
####9. 自联接我们可以通过使用 `SELF JOIN` 子句来将一个表与自身进行匹配:
sqlSELECT 列名1, 列名2, ... FROM 表名 AS 表名别名JOIN 表名 AS 表名别名 ON 条件;
例如,我们可以使用以下语句将学生信息与自身进行匹配,要求每个学生的学号与自己相同:
sqlSELECT * FROM 学生信息 AS s1JOIN 学生信息 AS s2 ON s1.学号 = s2.学号;
####10. 外联接我们可以通过使用 `LEFT JOIN`、`RIGHT JOIN` 或 `FULL OUTER JOIN` 子句来将一个表与另一个表进行匹配,并保留未匹配的行:
sqlSELECT 列名1, 列名2, ... FROM 表名 AS 表名别名LEFT|RIGHT|FULL OUTER JOIN 表名 AS 表名别名 ON 条件;
例如,我们可以使用以下语句将学生信息与老师信息进行左外联接,要求每个学生都有一个老师:
sqlSELECT * FROM 学生信息 AS s1LEFT JOIN 老师信息 AS t1 ON s1.学号 = t1.学号;
以上是关于表操作-创建&查询的内容。