DML(Data Manipulation Language 数据操控语言)
- 增 CREATE:
INSERT INTO 表名(字段)
例如:INSERT INTO student(stuno ,name,birthday)
VALUES('500','cherry','2005-5-6');(如果增加多条数据就在第一条数据后边加‘,’来继续写)
- 改 UPDATE:
UPDATE 表名称 SETname='deng;(最好加一个WHERE id=12) - 删 DELETE:
DELETE FROM 表名 WHEREname='yuan'; - CRUD
单表基本查询
- select:例如
SELECT id fromuser从数据表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;
示例:
- 显示出所有员工的姓名、性别(使用男或女显示)、入职时间、薪资,显示部门名称,所属公司(显示公司名称)。
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;
- 查询腾讯和蚂蚁金服的所有员工姓名、性别、入职时间、部门名、公司名。
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 ('腾讯科技' ,'蚂蚁金服');
- 查询渡一教学部的所有员工姓名、性别、入职时间、部门名、公司名。
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` = '教学部';
- 列出所有公司员工居住的地址(要去掉重复)。
select distinct location from employee;