1.表格操作
1.创建表格
# 创建新的表格
create table table_one (Id_P int, LastName varchar(255), Address varchar(255))
# 选取其他表格的部分数据创建新的表格
create table table_two select column_name from table_one
# 有条件的创建新的表格
create table table_two select column_name from table_one on column_one = column_two
Id_P 列的数据类型是 int,包含整数。其余列的数据类型是 varchar,最大长度为 255 个字符。
2.删除表格
# 删除表格和数据
drop table table_name
# 逐行删除
delect from table_name where column_name = "value"
# 删除数据,保留表格结构
truncate table table_name
3.修改表格名称
rename table table_name to newname
4.更新表格
update table_name set column_name = 'value'
update table_name set column_name = 'value' where id > 4
5.查看表格编码格式
show create table table_name
2.列操作
1.添加新的列
alter table table_name add column_name varchar(255)
2.修改列名
# 修改列的名称
alter table table_name change column oldname newname 新列名格式
3.删除某列
alter table table_name drop column columnone, columntwo
4.查询某列
select column_name from table_name limit 50
5.某列数据null变成0
select *, ifnull(column_name, 0) as newcolumn from table_name
3.行操作
1.插入行数据
# 默认插入选项
insert into table_name values (值1, 值2)
# 插入时设定指定列
insert into table_name(colume1, column2) values (值1, 值2)
# 从一个表中查询数据插入另一个表
insert into table_two select * from table_one where table_one.id = "001"
2.删除行
delect from table_name where 条件列名 = "value"
3.行排序
# 默认排序 升序
select column2 from table_name order by column1, column2
# 升序 asc
select column2 from table_name order by column1, column2
# 降序 desc
select column2 from table_name order by column1 desc
# 升降序混合
select column2 from table_name order by column1 desc, column2 asc
4.索引
主键和唯一索引的区别
- 主键不允许空值,唯一允许空值;唯一的ID
- 主键只允许一个,唯一可以有多个;
- 主键产生唯一的聚集索引(确定表中数据的物理顺序),唯一索引产生唯一的非聚集索引
1.添加索引
# 添加主键索引
alter table table_name add primary key(column)
# 添加唯一索引
alter table table_name add unique(column)
# 添加普通索引
alter table table_name add index index_name(column)
#添加全文索引
alter table table_name add fulltext(column)
#添加多列索引
alter table table_name add index index_name(column1, column2, column3)
2.查看索引
show index from table_name
3.删除索引
drop index index_name on table_name
5.条件语句
1.去重显示数据
select distinct column_name from table_name
2.行条件过滤——where
select column_name from table_name where column="value"
where句子中的运算符
运算符 | 描述 |
= | 等于 |
<> or != | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
between | 在某范围内 |
like | 某种模式 |
1.like + 条件的模糊查询
- %:表示任意 0 个或多个字符。可匹配任意类型和长度的字符;
- _(下划线):表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句;
- [ ]:匹配字符列中任何单一字符;
# 查询以"w"字母开头的名字 select * from table_name where name like 'z%' # 查询名字中包含"a"字母的名字 select * from table_name where name like '%a%' # 查询名字中不包含"a"字母的名字 select * from table_name where name not like '%a%' # 查询由五个字母构成的名字 select * from table_name where name like '_____' # 查询名字中第二个字母是"b"的名字 select * from table_name where name like '_b%' # 查询名字中含有A或B或C的名字 select * from table_name where name like '%[ABC]%' # 查询名字中不含有A或B或C的名字 select * from table_name where name like '%[!ABC]%'
2.in+值 锁定多个值
# 语法
select 列名/(*) from 表名称 where 列名称 in (值1,值2,值3)
3.between+区间数据
# 语法
select 列名/(*) from 表名称 where 列名称 between 值1 and 值2
注:不同数据库对between...and...的处理方式有差异,使用前需要检查对于两个端点的处理方式
3. 多表关联——join
# 语法
select 列名 from 表A inner|left|right|full join 表B on 表A主键列 = 表B外键列
- join:表中至少有一个匹配,就返回行;
- inner join:内部连接,返回两表匹配的值;
- left join:即使右表没有匹配,也返回左表所有行;
- right join:即使左表没有匹配,也返回右表所有行;
- full join:只要其中一个表存在匹配,就返回行;
6.常用函数
1.聚合函数
- count():统计指定列不为null的行数;
- max():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
- min():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
- sum():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0;
- avg():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0;
2.分组查询——group by
# 查询整个年级每个班的班级号和人数
select class, count(*) from table_name group by class
# 查询整个年级每个班的班级号和总分
select class, sum(score) from table_name group by class
# 查询整个年级每个班的班级号和分数大于90的人数
select class, count(*) from table_name where score>90 group by class
having子句
# 查询总分大于500的班级号和分数总和
select class, sum(score) from table_name group by class having sum(score)>500
注:
- where关键字无法与聚合函数一起使用;
- where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束。