数据库

数据库操作DDL

创建

create database 数据库名

查询

show databases ; show database like '数据库名';

修改

alter database 数据库名 set 字段名 类型 约束;

删除

drop database 数据库名;

使用

use 数据库名;

数据库表操作DDL

创建

create table 表名(字段  类型  索引);

查看表结构

desc 表名;

复制数据表

create table 表名1 like 表名2; 

复制表结构和数据

create table 表名1 as select * from 表2;

修改字段数据类型

alter table 表名 modify 字段名 数据类型;

修改字段名

alter table 表名 change <旧字段><新字段><数据类型>;

增加字段

alter table 表名 add<新字段><数据类型>;

删除字段

alter table 表名 drop<字段>;

删除

drop database 数据表;

delete:删除表数据
truncate:保留表结构,删除表中所有数据
drop:删除表

数据操纵语句DML

insert插入数据
INSERT INTO <表名> [ <列名1> [ , … <列名n>] ]
VALUES (值1) [… , (值n) ];
update修改数据
UPDATE <表名> SET 字段1=值1 [,字段2=值2… ] [WHERE 子句 ] [LIMIT 子句]
UPDATE emp SET is_enable = 0 WHERE id = 1
delete删除数据
DELETE FROM <表名> [WHERE 子句] [LIMIT 子句]
DELETE FROM emp WHERE is_enable = 0;
执行顺序

from > on > join > where > group by > having > select > distinct > order by > limit

distinct去重数据
SELECT DISTINCT <字段名>,<字段名>, FROM <表名>;
  • distinct只能在select语句中使用
  • distinct必须在所有字段前面
  • 如果有多个字段需要去重,则会对多个字段进行组合去重,即所有字段的数据重复才会被去重
as取别名
#as可省略
<表名> [AS] <别名>  
<字段名> [AS] <别名>
select age as "年龄",sex"性别",username"姓名" from TableA as a
limit限制返回数量
LIMIT 初始位置,记录数   #初始位置从0开始
select * from Table limit 2,2;  #从第3条记录开始返回2条
select * from Table limit 5 offset 1; #从第2条记录开始返回5条
order by对查询排序
ORDER BY <字段名> [,<字段名>...] [ASC | DESC]   #默认ASC升序,DESC降序
select * from Table order by id desc, sex asc;
where条件查询
WHERE 查询条件
select * from Table where id = 1;
比较运算法:
=:等于
<=>:安全等于
!=、<>:不等于
<、>、<=、>=:小于、大于、小于等于、大于等于
逻辑运算符:
and、&&:所有查询条件均满足才会被查询出来
or、||:满足任意一个查询条件就会被查询出来
xor:满足其中一个条件,并且不满足另一个条件时,才会被查询出来
like模糊查询
LIKE  '字符串'
NOT LIKE  '字符串'
select * from Table where username like "%test%";
#%表示任意长度的字符串,包括0
#_表示单个字符,字符长度不能等于0
#匹配字符串必须加双引号或单引号
is null空值查询
IS NULL
IS NOT NULL
select * from Table where sex is null;
#is null是一个整体,不能用=null 替代 
#is not null同理,不能用!= null或<>替代
between and范围查询
BETWEEN 取值1 AND 取值2
NOT BETWEEN 取值1 AND 取值2
select * from Table where age between 19 and 21;
group by分组查询
GROUP BY  <字段名>[,<字段名>,<字段名>]
select count(*) from Table group by department;
#group by一般配合聚合函数使用
  count():统计记录的条数
  sum():字段值的总和
  max():字段值的最大值
  min():字段值的最小值
  avg():字段值的平均值
having过滤分组结果集
HAVING <查询条件>
#having关键字对group by分组后的数据进行过滤
select *from Table where sex = "1" group by department having department = "ART"
where having
不可以使用聚合函数 可以使用聚合函数
数据 group by 前过滤 数据 group by 后过滤
查询条件中不可以使用字段别名 查询条件中可以使用字段别名
用于过滤数据行 用于过滤分组后的结果集
根据数据表的字段直接过滤 根据已查询出的字段进行过滤
多表查询
#cross join:交叉连接  两张表的笛卡尔积
SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE]
#inner join:内连接  两张表的交集,两张表记录都不为null才会返回
SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]
#left join:左外连接  表1为主表,右表为空字段补null
SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>
#right join:右外连接 表2为主表,左表为空字段补null
SELECT <字段名> FROM <表1> RIGHT OUTER JOIN <表2> <ON子句>
#union、union all:全连接  获取左右两表的所有记录
#union 连接的每条 sql 指定的字段顺序最好一致
select * from emp as a left join dept as b on a.dept_id = b.id
union all
select * from emp as a right join dept as b on a.dept_id = b.id;
子查询
#字段、表名、查询条件都可以嵌套子查询
select <子查询> from <表名> where <查询条件>
select <字段> from <子查询> as <别名> where <查询条件>
select <字段> from <表名> where <子查询>
posted @ 2025-09-18 21:36  嗑嗑  阅读(28)  评论(0)    收藏  举报