竖着的这些东西 叫做字段(列) 横着的叫做记录(行)。
主要的几种SQL操作语言
SQL(Structured Query Language)是一种标准化的语言,用于在关系数据库管理系统(RDBMS)中进行数据管理和操作。SQL 语句不仅用于查询数据,还包括以下几种主要类型的操作:
1. **查询(SELECT)**:检索数据。
- `SELECT` 用于从数据库表中选择数据。
2. **插入(INSERT)**:向表中添加新数据。
- `INSERT INTO` 用于向表中添加新的行。
3. **更新(UPDATE)**:修改表中的现有数据。
- `UPDATE` 用于修改表中的行数据。
4. **删除(DELETE)**:从表中删除数据。
- `DELETE` 用于从表中删除行。
5. **创建(CREATE)**:创建新的数据库对象。
- `CREATE TABLE` 用于创建新表。
- `CREATE DATABASE` 用于创建新数据库。
- `CREATE INDEX` 用于创建索引以优化查询性能。
6. **修改(ALTER)**:修改现有数据库对象的结构。
- `ALTER TABLE` 用于修改表的结构,如添加、删除列或修改列的数据类型。
7. **授权(GRANT)**:为用户设置数据库权限。
- `GRANT` 用于授予用户对数据库对象的特定权限。
8. **撤销(REVOKE)**:撤销用户的数据库权限。
- `REVOKE` 用于撤销之前授予用户的权限。
9. **事务控制(Transaction Control)**:管理数据库事务。
- `BEGIN TRANSACTION` 或 `START TRANSACTION` 用于开始一个新的事务。
- `COMMIT` 用于提交当前事务,使更改永久生效。
- `ROLLBACK` 用于回滚当前事务,撤销所有更改。
10. **锁定(Locking)**:控制对数据库资源的访问。
- `LOCK TABLES` 用于锁定表,防止其他用户访问。
- `UNLOCK TABLES` 用于解锁表,允许其他用户访问。
11. **注释(Comment)**:向 SQL 语句添加注释。
- 使用 `--` 或 `/* ... */` 来添加注释,以提高代码的可读性。
12. **设置(SET)**:设置会话级别的变量。
- `SET` 用于设置会话级别的变量或配置。
这些是 SQL 中最常用的操作类型,它们共同构成了 SQL 语言的核心功能,使得用户能够全面地管理和操作数据库。这里先只学习掌握Select语句。
SELECT查询语句↓
前两个(Select 和 from)是必须的结构,后四个是根据要求可能会用到
where是对行hang进行选择,比如写 where 性别=‘女’
order by默认是升序(asc),降序的话要输入(desc)
having一定要配合group by一起使用,不能单独使用,group by是对设置分组的条件
AS(起别名)
运算符>,<,=,<=……
Where
In & Not In
Between
like(模糊查询)
例题1:查询“某一种类”字段的所有信息语句
尝试解答:
select from xscj where 性别=男
正确逻辑:
select学号,姓名,性别,出生日期,专业成绩 from xscj where 性别=“男”
或者
select * from xscj where 性别=“男” # * 代表所有列
例题2:查询“某一种类”字段的要求信息语句
标点要用英文的
例题3:order语句
select * from xscj where 性别=“男” order by 专业成绩 #默认升序 asc
select * from xscj where 性别=“男” order by 专业成绩 #如果是降序 就要输入 desc
例题4:into语句
例题5:group by 语句
select 性别,avg(专业成绩) as 平均专业成绩 from xscj group by 性别
这里的group by 就是按照什么进行分类分组 avg就是一个函数计算。
例题6:having语句
这里的having就相当于是筛选,having必须搭配 group by(分组)来使用
WHERE
子句在数据分组前对每条记录进行过滤,而 HAVING
子句则是在数据分组后对形成的分组进行过滤。
例题7:修改更新 update 语句
格式:update 表名 set 字段=表达式 【where 条件】
update xscj set 姓名=“孙韬” where 学号=20170105
例题8:insert 插入记录语句
格式:insert into 表名 (字段名表) values (内容列表)#就是在哪一个表里插入什么内容
insert into xscj (学号,性别,出生日期,专业成绩) values ("20170106",”女“,#2000/09/13#,95)
文本就加双引号,日期就加#号
因为是所有的 所以可以省略
例题9:删除delete语句
格式:delete from 表名 【where条件】
这里的意思是 只要 学号=20170101 就会把所有的 可能是多个 学号=20170101的行信息全部删除
例题10:Join语句
JOIN
语句用于根据两个或多个表之间的相关列,将这些表中的数据结合起来。常见的 JOIN
类型包括:INNER JOIN
、LEFT JOIN
、RIGHT JOIN
、FULL JOIN
。
1.inner join
2.left join
3.right join
RIGHT JOIN 可以用于查找在右表中有但在左表中没有的记录。例如:
- 查找订单记录中有但是客户表中没有匹配客户的订单。
- 查找右表中有数据,但左表中没有关联数据的情况,帮助识别数据不一致的问题
4.full join
5.self join
自连接(SELF JOIN)是将一个表与其自身进行连接。自连接主要用于表中的行之间的比较或基于表中的数据生成关系。它通常用来处理层级数据、查找重复记录、或在同一表的不同行之间建立关联。
应用场景
1. 查找层级结构(例如,组织结构图)
自连接特别适用于管理层级结构的数据,例如公司中的员工和经理关系、文件系统中的文件和文件夹关系等。
2. 查找重复记录
如果我们要查找表中重复的记录,可以使用自连接来比较表中的行。
例题:
select 学号,课程号,学分 into 课程表 from 成绩表 where 课程号="C1"
一些辨析
* 与column_name(具体列的区别)
group by语句和where语句的不同
`GROUP BY` 和 `WHERE` 子句在 SQL 中确实都用于筛选数据,但它们的目的和使用场景是不同的。下面是它们的主要区别:
WHERE 子句:
1. **过滤记录**:`WHERE` 子句用于在数据分组前对表中的记录进行过滤。它决定了哪些记录将被包含在查询结果中。
2. **作用于行**:`WHERE` 子句作用于表中的单个行,对每一行数据进行条件判断。
3. **在分组前**:在数据被送往 `GROUP BY` 子句之前,`WHERE` 子句已经完成了过滤工作。
4. **简单条件**:通常用于简单的条件判断,如比较操作符(`=`, `<`, `>`, `!=`, `IN`, `LIKE` 等)。
GROUP BY 子句:
1. **数据分组**:`GROUP BY` 子句用于将结果集按照一个或多个列的值进行分组。它不是用来过滤记录,而是用来组织数据。
2. **作用于列**:`GROUP BY` 子句作用于列,它根据列的值将数据分组。
3. **在过滤后**:数据首先通过 `WHERE` 子句(如果有的话)进行过滤,然后 `GROUP BY` 对过滤后的数据进行分组。
4. **聚合函数**:通常与聚合函数(如 `SUM()`, `AVG()`, `COUNT()` 等)一起使用,对每个分组执行计算。
HAVING 子句:
- `HAVING` 子句与 `WHERE` 类似,但它是用于过滤分组后的结果。`HAVING` 子句可以在聚合函数计算后,根据聚合结果来过滤分组。
示例说明区别:
假设有一个 `Orders` 表,包含 `OrderID`, `CustomerID`, 和 `Amount` 列。
- 使用 `WHERE` 来筛选:
```sql
SELECT * FROM Orders WHERE Amount > 100;
```
这条语句将返回所有 `Amount` 大于 100 的订单记录。
- 使用 `GROUP BY` 和 `WHERE`:
```sql
SELECT CustomerID, COUNT(OrderID) AS NumberOfOrders
FROM Orders
WHERE Amount > 100
GROUP BY CustomerID;
```
这条语句首先使用 `WHERE` 筛选出 `Amount` 大于 100 的订单,然后 `GROUP BY` 按照 `CustomerID` 对这些筛选后的订单进行分组,并计算每个客户的订单数量。
- 使用 `HAVING` 来进一步筛选分组:
```sql
SELECT CustomerID, COUNT(OrderID) AS NumberOfOrders
FROM Orders
GROUP BY CustomerID
HAVING COUNT(OrderID) > 1;
```
这条语句首先按 `CustomerID` 对所有订单进行分组,并计算每个客户的订单数量,然后 `HAVING` 子句过滤出那些订单数量大于 1 的客户。
总结来说,`WHERE` 用于在分组前过滤原始数据,而 `GROUP BY` 用于组织数据,通常与聚合函数一起使用,`HAVING` 则用于在分组和聚合计算后对结果进行进一步的过滤。
select 姓名,年龄 from 学生表 where 院系 in (“网络工程系”,“信息工程系”,“计算机系”)
update语句(字段内容更新)
格式:update 表名 set 字段=表达式 【where 条件】
insert语句(插入记录)
格式:insert into 表名 (字段名表) values (内容列表)#就是在哪一个表里插入什么内容
DELETE语句(删除记录)
格式:delete from 表名 【where条件】