SQL 数据库操作语言详解

 1. SQL 语言概述

SQL(Structured Query Language)是用于管理关系型数据库的标准语言,主要分为以下几个子语言:

- DQL(数据查询语言):SELECT - 用于数据查询
- DML(数据操作语言):INSERT, DELETE, UPDATE - 用于数据操作
- DCL(数据控制语言):GRANT, REVOKE - 用于权限控制
- DDL(数据定义语言):CREATE, ALTER, DROP - 用于数据库对象定义
- TCL(事务控制语言):COMMIT, ROLLBACK - 用于事务控制

 2. DDL(数据定义语言)

 2.1 创建表

```sql
CREATE TABLE t_student(
    `stuid` INT(4) AUTO_INCREMENT PRIMARY KEY, -- 行级约束
    `sname` VARCHAR(15) NOT NULL,
    `ssex` VARCHAR(1) NOT NULL DEFAULT '男',
    `age` INT(3) CHECK(age>=0 AND age<=100),
    `email` VARCHAR(30) UNIQUE
);
```

 2.2 查看表结构

```sql
-- 查看建表语句
SHOW CREATE TABLE t_student;

-- 查看表结构
DESC t_student;
```

 2.3 修改表结构

```sql
-- 添加字段
ALTER TABLE t_student ADD cid INT(4);

-- 添加字段并指定位置
ALTER TABLE t_student ADD cid INT(4) FIRST; -- 添加到第一列
ALTER TABLE t_student ADD cid INT(4) AFTER ssex; -- 添加到指定列后

-- 删除字段
ALTER TABLE t_student DROP cid;

-- 修改字段
ALTER TABLE t_student MODIFY cid INT(5); -- 修改字段类型
ALTER TABLE t_student CHANGE cid class_id INT(4); -- 修改字段名和类型

-- 添加外键约束
ALTER TABLE t_student ADD CONSTRAINT fk_stu_cid 
FOREIGN KEY (cid) REFERENCES t_class(cid);
```

 2.4 完整性约束

- 主键(PRIMARY KEY):非空 + 唯一
- 非空(NOT NULL)
- 自增(AUTO_INCREMENT)
- 默认值(DEFAULT)
- 检查(CHECK)
- 唯一(UNIQUE)
- 外键(FOREIGN KEY)

 2.5 删除表

```sql
DROP TABLE t_student; -- 删除表及所有数据
```

 3. DML(数据操作语言)

 3.1 插入数据

```sql
-- 指定字段插入
INSERT INTO t_student(sname, ssex, age, email, cid)
VALUES('李方雷', DEFAULT, 10, '123456', 1);

-- 简写形式(为所有字段赋值)
INSERT INTO t_student VALUES(NULL, '李方雷', DEFAULT, 10, '123456', 1);
```

 3.2 更新数据

```sql
-- 更新所有记录(不推荐)
UPDATE t_student SET age = 20;

-- 更新指定记录(推荐)
UPDATE t_student SET age = 20 WHERE stuid = 1;
```

 3.3 删除数据

```sql
-- 删除所有记录(不推荐)
DELETE FROM t_student;

-- 删除指定记录(推荐)
DELETE FROM t_student WHERE stuid = 1;
```

 3.4 删除方式比较

| 操作 | 类型 | 回滚 | 索引 | 效率 |
|------|------|------|------|------|
| DELETE | DML | 支持 | 不重置 | 低 |
| TRUNCATE | DDL | 不支持 | 重置 | 高 |
| DROP | DDL | 不支持 | 删除 | 最高 |

 4. DQL(数据查询语言)

 4.1 基本语法结构

```sql
SELECT 字段1, 字段2, ..., 字段n
FROM 表名
WHERE 条件
GROUP BY 分组字段
HAVING 分组条件
ORDER BY 排序字段
LIMIT 分页参数;
```

 4.2 执行顺序

1. FROM - 确定表
2. WHERE - 筛选条件
3. GROUP BY - 分组
4. HAVING - 分组条件
5. SELECT - 确定显示内容
6. ORDER BY - 排序
7. LIMIT - 分页

 4.3 SELECT 子句详解

```sql
-- 查询所有字段(不推荐)
SELECT  FROM emp;

-- 查询指定字段
SELECT empno, ename, sal FROM emp;

-- 使用别名
SELECT empno AS empn, ename AS '员工姓名' FROM emp;

-- 计算字段
SELECT ename, sal12+IFNULL(comm, 0) AS '年薪' FROM emp;

-- 去重查询
SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL;
```

 4.4 ORDER BY 子句

```sql
-- 多字段排序
SELECT  FROM emp ORDER BY deptno ASC, mgr DESC;
```

 4.5 WHERE 子句

```sql
-- 关系运算符
SELECT  FROM emp WHERE sal > 2000;
SELECT  FROM emp WHERE deptno != 10;

-- 逻辑运算符
SELECT  FROM emp WHERE mgr = 7521 AND deptno != 10;

-- 模糊查询
SELECT  FROM emp WHERE ename LIKE '%a%'; -- 包含a
SELECT  FROM emp WHERE ename LIKE '_a%'; -- 第二个字母是a
SELECT  FROM emp WHERE ename LIKE 'as%'; -- 以as开头
SELECT  FROM emp WHERE ename LIKE '%a'; -- 以a结尾

-- NULL值查询
SELECT  FROM emp WHERE comm IS NULL;
SELECT  FROM emp WHERE comm IS NOT NULL;

-- 使用函数
SELECT  FROM emp WHERE DATEDIFF(CURDATE(), hiredate) > 15000;
```

 4.6 常用函数

 字符串函数

```sql
SELECT REPLACE(ename, SUBSTRING(ename, 2, LENGTH(ename)-2), ''), ename FROM emp;
```

 时间函数

```sql
-- 系统时间
SELECT CURDATE(), CURTIME(), NOW(), SYSDATE();

-- 日期计算
SELECT DAYOFYEAR(CURDATE()) FROM DUAL;
SELECT DATEDIFF(CURDATE(), '2004-4-23') FROM DUAL;

-- 日期格式化
SELECT DATE_FORMAT(hiredate, '%Y:%m:%d') FROM emp;

-- 日期加减
SELECT DATE_ADD(hiredate, INTERVAL 3 MONTH) FROM emp;
```

 流程函数

```sql
SELECT ename, job,
CASE deptno 
    WHEN 10 THEN '开发部'
    WHEN 20 THEN '测试部'
    WHEN 30 THEN '运维部'
END AS 部门名称
FROM emp;
```

 聚合函数

```sql
SELECT 
    COUNT() AS 总人数,
    MAX(sal) AS 最高工资,
    MIN(sal) AS 最低工资,
    AVG(sal) AS 平均工资,
    SUM(sal) AS 工资总额
FROM emp;
```

 5. 多表查询

```sql
-- 避免笛卡尔积
SELECT  FROM emp, dept WHERE emp.deptno = dept.deptno;

-- 内连接
SELECT  FROM emp INNER JOIN dept ON emp.deptno = dept.deptno;

-- 左外连接
SELECT  FROM emp LEFT JOIN dept ON emp.deptno = dept.deptno;

-- 右外连接
SELECT  FROM emp RIGHT JOIN dept ON emp.deptno = dept.deptno;
```

 总结

SQL 是数据库操作的核心语言,掌握其各种语句和函数的使用对于数据库管理和数据分析至关重要。在实际应用中,应注意:

1. 合理使用索引提高查询效率
2. 避免使用 SELECT ,明确指定需要的字段
3. 注意 NULL 值的处理
4. 使用 JOIN 时注意关联条件,避免笛卡尔积
5. 合理使用事务保证数据一致性

通过不断练习和实践,可以更加熟练地运用 SQL 语言进行数据库操作和数据分析。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值