SQL基础0

常用数据类型

数据查询


1. 基本语法:选择特定列

复制代码
-- 查询 employees 表中的 first_name 和 last_name 列
SELECT first_name, last_name FROM employees;

2. 检索所有列

复制代码
-- 查询 employees 表中的所有列和所有行
SELECT * FROM employees;

3. 使用 DISTINCT去重

复制代码
-- 查询 employees 表中不重复的部门名称
SELECT DISTINCT department FROM employees;

4. 使用 WHERE条件筛选

复制代码
-- 查询工资大于 50000 的所有员工信息
SELECT * FROM employees WHERE salary > 50000;

5. 使用 ORDER BY排序

复制代码
-- 查询所有员工信息,并按入职日期从晚到近排序
SELECT * FROM employees ORDER BY hire_date DESC;

DESC ​ - Descending(降序):从大到小、从晚到早、从 Z 到 A

ASC ​ - Ascending(升序):从小到大、从早到晚、从 A 到 Z

6. 使用 LIMIT限制结果数量

复制代码
-- 查询 employees 表的前 10 条记录
SELECT * FROM employees LIMIT 10;

7. 使用聚合函数

复制代码
-- 计算 employees 表中所有员工的平均工资
SELECT AVG(salary) AS avg_salary FROM employees;

AVG()是一个聚合函数,用于计算一组数值的平均值。

这里的 salary是列名,函数会计算该列所有非空值的平均值。

加上 AS avg_salary后,结果列会有一个清晰的名称 avg_salary。

8. 使用 GROUP BY分组

复制代码
-- 按部门分组,统计每个部门的员工人数
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department;

9. 使用 HAVING过滤分组结果

复制代码
-- 按部门分组计算平均工资,只显示平均工资大于 60000 的部门
SELECT department, AVG(salary) AS avg_salary FROM employees 
GROUP BY department HAVING AVG(salary) > 60000;

10. 连接多个表

复制代码
-- 连接 employees 和 departments 表,查询员工姓名及其部门名称
SELECT e.name, d.department_name FROM employees e
JOIN departments d ON e.department_id = d.id;

11. 使用子查询

复制代码
-- 查询部门所在地为 'New York' 的所有员工姓名
SELECT name FROM employees WHERE department_id IN 
(SELECT id FROM departments WHERE location = 'New York');

12. 使用 CASE条件判断

复制代码
-- 查询员工姓名,并根据工资水平添加分类标签
SELECT name,
       CASE
           WHEN salary > 70000 THEN 'High'
           WHEN salary > 50000 THEN 'Medium'
           ELSE 'Low'
       END AS salary_level
FROM employees;

13. 使用 LIKE模糊匹配

复制代码
-- 查询姓名以 'J' 开头的所有员工姓名
SELECT name FROM employees WHERE name LIKE 'J%';

14. 组合查询结果

复制代码
-- 合并 employees 和 contractors 表的姓名,并自动去重
SELECT name FROM employees
UNION
SELECT name FROM contractors;

15. 无表查询

复制代码
-- 直接计算表达式(某些数据库支持)
SELECT 1 + 1;
  • 不同数据库系统(MySQL、PostgreSQL、SQL Server等)可能在语法细节上略有差异

SQL语言向表格中添加、更新、删除记录

好的,SQL 中用于修改表中数据(而非查询)的三个核心命令是:

  1. INSERT ​ - 向表中添加新记录

  2. UPDATE ​ - 更新表中已存在的记录

  3. DELETE ​ - 从表中删除记录


1. INSERT - 添加新记录

功能:向表中插入一行或多行新数据。

基本语法(插入单行,指定列):
复制代码
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);

示例

复制代码
-- 向 employees 表插入一条新员工记录
INSERT INTO employees (first_name, last_name, salary, hire_date, department_id)
VALUES ('小明', '张', 75000, '2024-03-20', 3);
-- 解释:在 employees 表中为员工"张小明"创建一条记录,设置其薪资、入职日期和部门ID
插入多行:
复制代码
INSERT INTO employees (first_name, last_name, department_id)
VALUES 
  ('小红', '李', 2),
  ('小刚', '王', 1),
  ('小美', '刘', 3);
插入查询结果:(查询+插入)
复制代码
-- 从 interns 表中选择优秀实习生转为正式员工
INSERT INTO employees (first_name, last_name, salary, department_id)
SELECT name, surname, 50000, dept_id 
FROM interns 
WHERE performance = 'A';

2. UPDATE - 更新现有记录

功能 :修改表中已存在的数据。必须使用 WHERE子句指定要更新哪些行,否则会更新整个表!

基本语法:
复制代码
UPDATE 表名
SET 列1 = 新值1, 列2 = 新值2, ...
WHERE 条件;

示例

复制代码
-- 为部门ID为2的所有员工加薪10%
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 2;
-- 解释:找到部门ID为2的员工,将他们的 salary 列值更新为原值的1.1倍

-- 更新特定员工的职位和薪资
UPDATE employees
SET position = 'Senior Manager', salary = 90000
WHERE employee_id = 101;
-- 解释:将员工ID为101的员工的职位和薪资更新为新值

重要警告 :忘记 WHERE子句会导致灾难!

复制代码
-- 错误示范:这将更新表中所有行!
UPDATE employees SET salary = 50000; -- 所有人的工资都变成 50000!

3. DELETE - 删除记录

功能 :从表中删除一行或多行。必须使用 WHERE子句指定要删除哪些行,否则会清空整个表!

基本语法:
复制代码
DELETE FROM 表名
WHERE 条件;

示例

复制代码
-- 删除离职员工(离职日期不为空的记录)
DELETE FROM employees
WHERE resignation_date IS NOT NULL;
-- 解释:从 employees 表中删除那些 resignation_date 列不为空的记录(已离职员工)

-- 删除特定员工
DELETE FROM employees
WHERE employee_id = 205;
-- 解释:删除员工ID为205的记录

重要警告 :忘记 WHERE子句会导致灾难!

复制代码
-- 错误示范:这将删除表中所有数据!
DELETE FROM employees; -- 整个表被清空!

关键注意事项总结:

  1. 数据备份 :在执行 UPDATEDELETE前,尤其是在生产环境,最好先备份数据或使用事务。

  2. WHERE子句是安全阀 :对于 UPDATEDELETE永远 先检查 WHERE条件是否正确。可以先使用 SELECT测试:

    复制代码
    -- 先查询确认要操作的数据
    SELECT * FROM employees WHERE department_id = 2;
    -- 确认无误后,再执行 UPDATE
    UPDATE employees SET salary = salary * 1.1 WHERE department_id = 2;
  3. 事务控制 :可以使用 BEGIN TRANSACTION开始事务,确认无误后 COMMIT,有问题则 ROLLBACK

  4. TRUNCATE TABLE命令 :如果想快速删除表中所有数据(不可恢复,不触发删除触发器),可以使用:

    复制代码
    TRUNCATE TABLE employees; -- 清空整个表,比 DELETE 快

    DELETE不同,TRUNCATE不能加 WHERE条件,且会重置自增ID。

相关推荐
Mr.朱鹏4 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
摇滚侠4 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
qiuhaipeng14 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
wxwx_bscxy3225 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向6 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
词却6 小时前
数据库基础:DQL 数据查询语言
数据库·oracle
昌原的儿子LEO8 小时前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle
山岚的运维笔记8 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
聚美智数9 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全
坐吃山猪9 小时前
【多线程】Semaphore使用
java·数据库·oracle·多线程