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。

相关推荐
韩立学长2 小时前
基于Springboot的商品库存管理系统369jr3t9(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
java·数据库·spring boot·后端
长安11082 小时前
mysql(C++)----常用的sql命令
java·sql·mysql
scofield_gyb2 小时前
MySQL 批量插入详解:快速提升大数据导入效率的实战方法
大数据·数据库·mysql
不过普通话一乙不改名2 小时前
七:EXPLAIN 深度解析与 SQL 优化实战指南
数据库·sql
polaris06302 小时前
使用Dify访问数据库(mysql)
数据库·mysql
数据知道2 小时前
MongoDB分片集群组件详解:Config Server, Mongos, Shard角色与配置
数据库·mongodb
执笔画情ora2 小时前
pg数据库管理-PostgreSQL 的 COPY TO 和 COPY FROM 命令
数据库·postgresql
璞~2 小时前
DBeaver 连接达梦数据库(DM8)完整步骤
数据库·oracle
一只小bit2 小时前
JavaWeb 开发 —— 从 JDBC 到 Mybatis 数据库使用
数据库·maven·mybatis