创建表
create table 表名(
列名1 数据类型,
列名2 数据类型,
)character set 字符集 collate 校验规则 engine 存储引擎
字符集和校验规则如果没有另外设置,以所在数据库的字符集和校验规则为准
举个例子:
create table student(
sno int comment '学号',
sname varchar(20) comment '姓名',
sex varchar(10) comment '性别'
age int comment '年龄'
)
查看表结构
desc 表名
修改表
我们用几个栗子来说明
向表中添加两条记录
insert into student values (1001,'张三',‘男’,19),(1002,'李四','男',20);
向表中添加一个字段保存学生的班级
alter table student add class varchar(50) after age;
修改列的数据类型
alter table student modify sname varchar(50);
删除一列
alter table student drop age;
修改表名
alter table student rname to stu;
这里to可以省略
修改列名
alter table stu change sno xuehao int;
删除表
drop table 表名;
表的增删查改
首先建立一张表,便于我们举例操作
create table users(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
password VARCHAR(50) NOT NULL,
sex VARCHAR(10),
age VARCHAR(10)
)
单行数据+全列插入
INSERT INTO users VALUES (1, '宋江', 'songjing_123','男','35');
多行数据+指定列插入
INSERT INTO users (id, name, password) VALUES
(2, '孙悟空','sunwukong_123'),
(3, '林黛玉','lindaiyu_123');
当字段为主键或者唯一键,第一次插入之后就不能再修改
INSERT INTO users VALUES (1, '宋江', 'songjing_123','男','30');
替换
如果没有主键或者唯一键冲突,则直接插入
如果有主键或者唯一键冲突,则删除原来的再插入
REPLACE INTO users VALUES (4, '宋江', 'songjing_123','男','30');
REPLACE INTO users (id, name) VALUES (3, '宝玉');
select列
全列查询
select * from users
指定列查询
select id,name from users
查询字段为表达式
SELECT id, name, age+10 FROM users
为查询结果指定别名
SELECT name 姓名 FROM users
去重
SELECT DISTINCT name FROM users
where条件
运算符 | 说明 |
---|---|
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
<=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a0 AND a1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, …) | 如果是 option 中的任意一个,返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 |
逻辑运算符
运算符 | 说明 |
---|---|
AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
NOT | 条件为 TRUE(1),结果为 FALSE(0) |
这里就不一一列举了
结果排序
ASC 为升序
DESC 为降序
select ... from 表名
order by 列名 ASC/DESC
注意:没有order by的子句查询,返回的顺序是未定的
筛选分页结果
//从0开始筛选n条结果
select ... from 表名 order by 某列(筛选依据) limit n;
//从s开始筛选n条结果
select ... from 表名 order by 某列(筛选依据) limit s,n;
//从s开始筛选n条结果
select .. from 表名 order by 某列(筛选依据) limit n offset n;
对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死
update
update 表名 set column=更新值 [where ...] [order by ...] [limit ...]
update users set age=50 where name='宋江'
删除数据
delete from 表名 where ... [order by ...]
DELETE from users where name='宋江'
聚合函数
函数 | 说明 |
---|---|
COUNT([DISTINCT] expr) | 返回查询到的数据的 数量 |
SUM([DISTINCT] expr) | 返回查询到的数据的 总和,不是数字没有意义 |
AVG([DISTINCT] expr) | 返回查询到的数据的 平均值,不是数字没有意义 |
MAX([DISTINCT] expr) | 返回查询到的数据的 最大值,不是数字没有意义 |
MIN([DISTINCT] expr) | 返回查询到的数据的 最小值,不是数字没有意义 |
grope by子句的使用
在select语句中,使用group by子句可以对指定列进行分组
select column1, column2, .. from 表名 group by column;
显示每个部门的平均工资和最高工资
select deptno,avg(sal),max(sal) from EMP group by deptno
显示每个部门的每种岗位的平均工资和最低工资
select avg(sal),min(sal),job, deptno from EMP group by deptno, job