navicat表记录的增删改查

114 阅读4分钟

DML(Data Manipulation Language 数据操控语言)

  • 增 CREATE:INSERT INTO 表名(字段)

例如:INSERT INTO student(stuno ,name,birthday)

VALUES('500','cherry','2005-5-6');(如果增加多条数据就在第一条数据后边加‘,’来继续写)

  • 改 UPDATE:UPDATE 表名称 SET name='deng;(最好加一个WHERE id=12)
  • 删 DELETE:DELETE FROM 表名 WHERE name='yuan';
  • CRUD

单表基本查询

  • select:例如 SELECT id from user 从数据表user里边找出id属性的值
    • 定别名: as 列的名称 (直接省略as也可以)
    • *: 表示查询所有列
    • case:别样处理
    • distinct:去重
SELECT id, name,
CASE ismale
WHEN 1 THEN '男'
ELSE '女'
END sex,
care
when salary>=10000 then '高'
when salary>=5000 then '中'
else '低'
end `level`,
FROM employee;
  • from:
  • where:对原始表里边的内容进一步查询(先运行from,再where,再select)
    • =:等于,用于匹配与指定值完全相等的记录。
    • in:在某个值列表中,用于匹配与列表中任意一个值相等的记录。
    • is:用于检查某个字段是否为特定值(通常用于NULL)。
    • is not:用于检查某个字段是否不为特定值(通常用于NULL)。
    • :大于,用于筛选字段值大于指定值的记录。

    • <:小于,用于筛选字段值小于指定值的记录。
    • =:大于等于,用于筛选字段值大于或等于指定值的记录。

    • <=:小于等于,用于筛选字段值小于或等于指定值的记录。
    • between:用于筛选字段值在指定范围内的记录。
    • like:用于模糊匹配,通常结合通配符(如%_)使用。
    • and:逻辑与,用于组合多个条件,要求所有条件都满足。
    • or:逻辑或,用于组合多个条件,要求至少一个条件满足。
SELECT *
FROM EMPLOYEE
WHERE ismale = 1;

注意常见错误写法:因为最后循行select,找不到sex

SELECT *,
CASE ismale
WHEN 1 THEN '男'
ELSE '女'
END sex
FROM employee
WHERE sex = '男';
SELECT * FROM employee
WHERE name LIKE '张%'
AND (ismale = 0 AND salary >= 12000
OR birthday >= '1996-1-1')
ORDER BY salary DESC;
  • order by:排序(运行在select之后)(升序:asc,降序:desc)
SELECT *,
CASE ismale
WHEN 1 THEN '男'
ELSE '女'
 END sex
FROM employee
WHERE name LIKE '张%'
AND (ismale = 0 AND salary >= 12000
OR birthday >= '1996-1-1')
ORDER BY sex ASC,salary DESC;
  • limit:(最后运行)跳过n条数据来取出m条数据

连表查询

  • 全连接,笛卡尔积

例如:足球队比赛对战可能

select t1.name 主场 ,t2.name 客场
from team as t1, team as t2
where t1.id != t2.id;

起别名是因为两个名称不能重复

  • 左连接,左外连接:left join

例如:查询部门表(把部门表达出来,把部门表的第一行拿出来,依次判断员工表中哪一行可以满足条件,每满足一行条件会打印出来。如果找不到,也会有一行但是内容值为null

SELECT * 
FROM department AS d LEFT JOIN employee AS e 
ON d.id = e.deptId;
  • 右连接,右外连接:right join

和左连接反过来,如果找不到,右表会至少出现一次

  • 内连接:inner join:不分左右了,但是如果不满足条件不会打印出来
SELECT e.name AS emname, d.name AS dptname, c.name AS companyname
FROM employee AS e
INNER JOIN department AS d ON d.id = e.deptId
INNER JOIN company AS c ON d.companyId = c.id;

image.png 示例

  1. 显示出所有员工的姓名、性别(使用男或女显示)、入职时间、薪资,显示部门名称,所属公司(显示公司名称)。
SELECT e.name AS 员工姓名,
CASE ismale WHEN 1 THEN '男' ELSE '女' END AS 性别,
e.joinDate  入职时间,
e.salary  薪水,
d.name  部门名称,
c.name  公司名称
FROM employee e
INNER JOIN department d ON e.deptId = d.id
inner join company c on d.companyId = c.id;
  1. 查询腾讯和蚂蚁金服的所有员工姓名、性别、入职时间、部门名、公司名。
SELECT e.name AS 员工姓名,
CASE ismale WHEN 1 THEN '男' ELSE '女' END AS 性别,
e.joinDate  入职时间,
e.salary  薪水,
d.name  部门名称,
c.name  公司名称
FROM employee e
INNER JOIN department d ON e.deptId = d.id
inner join company c on d.companyId = c.id
where c.`name` in ('腾讯科技' ,'蚂蚁金服');
  1. 查询渡一教学部的所有员工姓名、性别、入职时间、部门名、公司名。
SELECT e.name AS 员工姓名,
CASE ismale WHEN 1 THEN '男' ELSE '女' END AS 性别,
e.joinDate  入职时间,
e.salary  薪水,
d.name  部门名称,
c.name  公司名称
FROM employee e
INNER JOIN department d ON e.deptId = d.id
inner join company c on d.companyId = c.id
where c.`name` like '%渡一%' and d.`name` = '教学部';
  1. 列出所有公司员工居住的地址(要去掉重复)。
select distinct location from employee;