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。

相关推荐
入瘾1 天前
etcd 显示连接失败
数据库·chrome·etcd
本体智能1 天前
预制指标、宽表、SQL、本体ABC:真正决定长期成本的,是一次变更会波及多少层
数据库·sql·本体神经网络·uino数据智能引擎
长安11081 天前
数据库基础知识----数据库大观
数据库·oracle
瀚高PG实验室1 天前
使用hgdbdeveloper开发工具导出数据后在异机恢复时报错
数据库·瀚高数据库
百结2141 天前
PostgreSQL 初体验
数据库·postgresql
ward RINL1 天前
Redis 安装及配置教程(Windows)【安装】
数据库·windows·redis
bingHHB1 天前
金蝶云星空旗舰版 × 赛狐ERP:亚马逊卖家业财一体化的最后一公里
运维·数据库·集成学习
Nontee1 天前
Redis高可用架构解析
数据库·redis·架构
淼淼爱喝水1 天前
DVWA SQL 注入(Medium/High 级别)过滤绕过与防范实验(超详细图文版)
数据库·sql·网络安全
csdn_aspnet1 天前
MySQL主从延迟根因诊断法,从网络、IO、SQL到参数,系统化定位高并发下的同步瓶颈
数据库·mysql·主从