数据库操作
CREATE DATABASE 数据库名字
创建数据库USE 数据库名字
选择数据库show tables
显示所有表drop database 数据库名字
删除数据库
表操作
CREATE TABLE 表名(字段 类型,字段 类型)
创建表show create table 表名
显示表的创建语句和详细信息desc 表名
显示表的结构DROP TABLE 表名
删除表truncate table 表名
清空表alter table 表名 add 字段 类型
添加表字段alter table 表名 add 字段 类型 after 表字段
添加表字段,并且插入指定字段位置后面alter table 表名 add 字段 类型 first
添加表字段,并插入最前面alter table 表名 modify 字段 新类型
修改字段类型alter table 表名 change 原字段名字 新字段名字 新类型;
修改字段名字并且修改类型alter table 表名 drop column 字段;
删除表字段alter table 旧表名 rename 新表名
修改表名
数据操作
- 条件查询
where
SELECT * from t_doctor WHERE doctor_name = "布隆";
-
order by
排序,默认升序(asc)
, 降序(高到低)desc
-
分组
GROUP BY
分组可能不是特别好理解,我单独举例解释下:
假如有一张护士表,和任务表,护士小姐姐的任务是要随访自己负责的病人,1个护士小姐姐负责多个病人,任务表中存着所有护士小姐姐,执行的所有任务。现在查一下,每个护士小姐姐,各自做了多少次任务
<!--根据nurse_id分组,并且统计数量 -->
SELECT nurse_id,count(*) as tatal FROM t_visit_task GROUP BY nurse_id ORDER BY tatal desc;
with ROLLUP
表明是否对分类聚合后的结果进行再汇总
<!--除了知道每个护士小姐姐执行了多少次任务,还要统计所有护士小姐姐任务总数-->
SELECT nurse_id,count(*) as tatal FROM t_visit_task GROUP BY nurse_id WITH ROLLUP;
- 模糊查询
like
<!--查询doctor_name中包含张的所有行-->
SELECT * from t_doctor WHERE doctor_name LIKE "%张%";
in
查询
SELECT * FROM t_visit_task WHERE nurse_id in ("1126cf7f-d31e-43f1-a2dd-05b37873f99b","8ce40555-4b62-498b-8e39-af4abb18abfd");
<!--如果是where=-->
SELECT * FROM t_visit_task WHERE nurse_id = "1126cf7f-d31e-43f1-a2dd-05b37873f99b" OR nurse_id = "8ce40555-4b62-498b-8e39-af4abb18abfd"
-
insert into 表名(字段1,字段2) values(值1,值2),(值1,值2)
插入数据 -
update 表名 set 字段1="新值",字段2="新值" where 字段='xxx'
更新数据,使用update一定一定
要跟着条件
,否则同一字段全部数据都被更改 -
delete from 表名 where 字段="xx";
删除数据,一定要加条件,不然全删 -
union 和 union all
对多个select查询出来的数据结果进行合并展示(去除重复部分),union all
不去重复-
Union必须由两条或者两条以上的SELECT语句组成,语句之间使用Union链接
-
Union中的每个查询必须包含相同的列、表达式或者聚合函数,他们出现的顺序可以不一致(这里指查询字段相同,表不一定一样)
-
列的数据类型必须兼容,兼容的含义是必须是数据库可以隐含的转换他们的类型
-
<!--第一条查询2020-10-13后入职的护士小姐姐-->
<!--第二条查询名字包含李的小姐姐,不论她什么时候入职的-->
<!--执行后,两条sql结果可能都含有彼此已存在的数据,union去重复合并展示-->
SELECT * FROM t_nurse WHERE created_at > "2020-10-13"
UNION
SELECT * FROM t_nurse WHERE nurse_name LIKE "%李%";
- 多表联查
inner join
查询多张表满足关联条件的数据
SELECT * FROM t_nurse INNER JOIN t_visit_task ON t_nurse.nurse_id = t_visit_task.nurse_id; <!--等同于--> SELECT * FROM t_nurse,t_visit_task WHERE t_nurse.nurse_id = t_visit_task.nurse_id;
left join
以左表为主表,其它表配合给出关联条件的数据,有则显示,没有则空
SELECT * FROM t_nurse LEFT JOIN t_visit_task ON t_nurse.nurse_id = t_visit_task.nurse_id;
right join
以右表为主表,其它表配合给出关联条件的数据,有则显示,没有则空
SELECT * FROM t_nurse RIGHT JOIN t_visit_task ON t_nurse.nurse_id = t_visit_task.nurse_id;