MySQL数据库的基本操作
程序员文章站
2022-03-25 12:17:33
...
表连接
- 可以实现三表连接?
案例:查询员工名、部门名和所在的城市
SELECT last_name,department_name,city
FROM t_mysql_employees e,t_mysql_departments d,t_mysql_locations l
WHERE e.`department_id`=d.`department_id`
AND d.`location_id`=l.`location_id`
AND city LIKE 's%'
ORDER BY department_name DESC;
2. 自连接
案例:查询 员工名和上级的名称
SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
FROM t_mysql_employees e,t_mysql_employees m
WHERE e.`manager_id`=m.`employee_id`;
3. join连接
语法:select 查询列表 from 表1 别名 【连接类型left/right】join 表2 别名 on 连接条件
案例1.查询员工名、部门名
常见函数
- 转小写LOWER(‘SQL Course’)
SELECT LOWER(last_name)
FROM t_mysql_employees e
WHERE e.last_name LIKE 'A%'
- 日期函数DATE_FORMAT(‘2018/6/6’,‘%Y年%m月%d日’)
SELECT DATE_FORMAT(p.releaseDate,'%Y年%m月') relDate,count(*)
FROM t_p1_blog p
GROUP BY relDate
子查询
- 含义:出现在其他语句中的select语句,称为子查询或内查询,外部的查询语句,称为主查询或外查询
案例1:谁的工资比 Abel 高?
SELECT *
FROM t_mysql_employees
WHERE salary >(
SELECT salary
FROM t_mysql_employees
WHERE last_name = 'Abel'
)
案例2:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和工资
SELECT last_name,job_id,salary
FROM t_mysql_employees
WHERE job_id=(
SELECT job_id
FROM t_mysql_employees
WHERE employee_id = 141
)
AND salary>(
SELECT salary
FROM t_mysql_employees
WHERE employee_id = 141
)
案例3:返回公司工资最少的员工的last_name,job_id和salary
SELECT last_name,job_id,salary
FROM t_mysql_employees t
WHERE salary= (
SELECT min(salary)
FROM t_mysql_employees
)
分页查询
- 应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
offset要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数
案例1:查询前五条员工信息
SELECT*
FROM t_mysql_employees
LIMIT 0,5
案例2:查询第11条——第25条
SELECT * FROM t_mysql_employees LIMIT 10,15;
案例3:有奖金的员工信息,并且工资较高的前10名显示出来
SELECT *
FROM t_mysql_employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC
LIMIT 0,10
DML(数据管理语言)
- DML可以在下列条件下执行:
向表中插入数据
修改现存数据
删除现存数据 - 事务是由完成若干项工作的DML语句组成的
使用 INSERT 语句向表中插入数据。
INSERT INTO 表
VALUES (列); - 隐式方式: 在列名表中省略该列的值。
SELECT * FROM t_mysql_departments
INSERT INTO t_mysql_departments (department_id, department_name )
VALUES (430, 'Pur');
11. 显示方式: 在VALUES 子句中指定空值。
INSERT INTO t_mysql_departments
VALUES (800, 'Fin', NULL, NULL);
12. 拷贝数据
#系统升级可能会对现有数据造成冲突
#新建一张临时表存储现有数据
CREATE TABLE t_mysql_departments_1
as
SELECT * FROM t_mysql_departments WHERE 1=2;
INSERT INTO t_mysql_departments_1
SELECT * FROM t_mysql_departments
#升级之前两个模式,相关数据是在升级之前,升级之后又会有新的数据
INSERT INTO t_mysql_departments_1
- 更新数据
使用 UPDATE 语句更新数据。
UPDATE table
SET column = value [, column = value, …]
[WHERE condition];
使用 WHERE 子句指定需要更新的数据。
UPDATE t_mysql_employees
SET department_id = 70
WHERE employee_id = 113;
如果省略 WHERE 子句,则表中的所有数据都将被更新
UPDATE copy_emp
SET department_id = 110;
- 删除数据
使用 DELETE 语句从表中删除数据。
DELETE FROM table
[WHERE condition];
使用 WHERE 子句删除指定的记录。
DELETE FROM t_mysql_departments
WHERE department_name = 'Finance';
如果省略 WHERE 子句,则表中的全部数据将被删除
DELETE FROM copy_emp;
- 一次删除多表的数据
案例1:删除张无忌的女朋友的信息
DELETE b
FROM t_mysql_beauty b
INNER JOIN t_mysql_boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';
案例2:删除黄晓明的信息以及他女朋友的信息
DELETE b,bo
FROM t_mysql_beauty b
INNER JOIN t_mysql_boys bo ON b.`boyfriend_id`=bo.`id`
WHERE bo.`boyName`='黄晓明';
上一篇: JavaScript基础之Array对象
下一篇: Spring注入复杂类型属性