mysql -u root -p
牛马规则:联合索引中,出现范围查询(<, >),范围查询右侧的列索引失效。可以用>=或者<=来规避索引失效问题。所以,在业务允许的情况下,尽可能的使用类似于 >= 或 或 < 。
查询所有数据库
show databases ;
查询当前数据库
show database();
创建数据库
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ] ;
# create database itheima default charset utf8mb4;
在同一个数据库服务器中,不能创建两个名称相同的数据库,否则将会报错。可以通过if not exists 参数来解决这个问题,数据库不存在, 则创建该数据库,如果存在,则不 创建。
删除数据库
drop database [ if exists ] 数据库名 ;
切换数据
use 数据库名 ;
查询当前数据库所有表
# use sys;
# show tables;
查看指定表结构
通过这条指令,我们可以查看到指定表的字段,字段的类型、是否可以为NULL,是否存在默认值等信息。
desc 表名 ;
查询指定表的建表语句
show create table 表名 ;
通过这条指令,主要是用来查看建表语句的,而有部分参数我们在创建表的时候,并未指定也会查询 到,因为这部分是数据库的默认值,如:存储引擎、字符集等。
CREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ],
字段2 字段2类型 [COMMENT 字段2注释 ],
字段3 字段3类型 [COMMENT 字段3注释 ],
......
字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
[ ] 表示可选参数
添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度)
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
删除某个属性
ALTER TABLE 表名 DROP 字段名;
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
DROP TABLE [ IF EXISTS ] 表名
删除指定表, 并重新创建表
TRUNCATE TABLE 表名;
增 删 改
给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
insert into employee(id,workno,name,gender,age,idcard,entrydate)
values(1,'1','Itcast','男',10,'123456789012345678','2000-01-01');
给all字段添加数据, 省略列名
INSERT INTO 表名 VALUES (值1, 值2, ...);
批量添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
# 将所有的员工入职日期修改为 2008-01-01
update employee set entrydate = '2008-01-01';
# 修改id为1的数据, 将name修改为小昭, gender修改为 女
update employee set name = '小昭' , gender = '女' where id = 1;
DELETE FROM 表名 [ WHERE 条件 ] ;
# 删除gender为女的员工
delete from employee where gender = '女';
# 删除所有员工!!!
delete from employee;
DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数 据。
DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即 可)。
SELECT 字段列表 FROM 表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
起别名
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;
去重
SELECT DISTINCT 字段列表 FROM 表名;
比较运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN … AND … | 在某个范围内(含最小、最大值) |
IN(…) | 在in之后的列表中的值,多选一 |
LIKE 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
IS NULL | 是NULL |
逻辑运算符 | 功能 |
---|---|
AND 或 && | 并且(多个条件同时成立) |
OR 或 || | 或者(多个条件任意一个成立) |
NOT 或 ! | 非,不是 |
# 年龄等于 88 的员工
select * from emp where age = 88;
# 询年龄小于= 20 的员工信息
select * from emp where age <= 20;
# 没有身份证号的员工信息
select * from emp where idcard is null;
# 年龄在15岁(包含) 到 20岁(包含)之间的员工信息
select * from emp where age >= 15 && age <= 20;
select * from emp where age >= 15 and age <= 20;
select * from emp where age between 15 and 20;
# 性别为 女 且年龄小于 25岁的员工信息
select * from emp where gender = '女' and age < 25;
# 年龄等于18 或 20 或 40 的员工信息
select * from emp where age = 18 or age = 20 or age =40;
select * from emp where age in(18,20,40);
# 姓名为两个字的员工信息 _ %
select * from emp where name like '__';
# 查询身份证号最后一位是X的员工信息
select * from emp where idcard like '%X';
select * from emp where idcard like '_________________X';
将一列数据作为一个整体,进行纵向计算
me: 查完一个列整体后做一个计算
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
SELECT 聚合函数(字段列表) FROM 表名 ;
# NULL值是不参与所有聚合函数运算的。
# 统计该企业员工数量
select count(*) from emp; -- 统计的是总记录数
select count(idcard) from emp; -- 统计的是idcard字段不为null的记录数
# 西安地区员工的年龄之和
select sum(age) from emp where workaddress = '西安';
INSERT INTO 表名 VALUES (值1, 值2, ...);
SELECT 字段列表 FROM 表名
[ WHERE 条件 ]
GROUP BY 分组字段名
[ HAVING 分组后过滤条件 ];
where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;
而having是分组 之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
- 执行顺序: where > 聚合函数 > having 。
- 支持多字段分组, 具体语法为 : group by columnA,columnB
# 根据性别分组 , 统计男性员工 和 女性员工的数量
select gender, count(*) from emp group by gender ;
# 根据性别分组 , 统计男性员工 和 女性员工的平均年龄
select gender, avg(age) from emp group by gender ;
# 查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from emp
where age < 45
group by workaddress
having address_count >= 3;
# 统计各个工作地址上班的男性及女性员工的数量
select workaddress, gender, count(*) '数量' from emp group by gender , workaddress;
SELECT 字段列表 FROM 表名
ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
ASC : 升序(默认值)
DESC: 降序
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
• 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。???看案例
• 分页查询是数据库的方言,不同的数据库有不同的实