1.创建数据库:
create database 数据库名
2.创建表:
create table 表名(
字段1,
字段2,
字段3
)
3.删除数据库
DROP DATABASE 数据库名;
4.删除表
DROP TABLE 表名;
5.增加数据:
inset into 表名 (字段1,字段2)
values
(“值1”,“值2”),
(“值1”,“值2”),
(“值1”,“值2”);
6.删除
delete from 表名 where 条件;
删除全部
delete from 表名;会记录日志,数据可恢复,效率较低
truncate table 表名;不会记录日志,不可恢复数据,效率较高
–查询
7.select * from 表名; * 是通配符,表示查询多有列
8.select 列1 , 列2 from 表名; 查询表中指定列的数据
9.去重–select distinct s_class from t_student; distinct -去重
10.返回指定行数
返回限定行数 显示前三个学生信息
SELECT * FROM t_student LIMIT 0,3;
0表示从第一条数据
3表示显示几条数据
11.定义集合关系
in:—查询值在集合中的记录
– 查询178-179的学生
SELECT * FROM t_student WHERE s_class IN(‘J178’,‘J179’);
not in :----查询值不在集合中的记录
– 查询178-179 之外的学生
SELECT * FROM t_student WHERE s_class NOT IN(‘J178’,‘J179’);
12.模糊查询
SELECT * FROM t_student WHERE s_name LIKE ‘%七’;
%通配符,匹配0个或多个字符
_通配符,匹配一个字符
13.处理空值
不能用 = 或 != ,只能用is null 或 is not null
SELECT * FROM t_student WHERE s_grade IS NULL;
14.排序
SELECT * FROM t_student ORDER BY s_grade DESC;
asc是默认排序-升序
desc是降序
多列排序
先按第一列条件排序
如果第一列的值相等
再按第二例条件排序
– 将学生按成绩排序 如果成绩一样,按 ID排序
SELECT * FROM t_student ORDER BY s_grade DESC,s_id ASC;
15.分组
概念:将某个列值相同的记录分成一个组,在进行数据运算
select count(*) from 表名 group by 要分组的列名
多列分组: 只有两个或多个列值完全相同的记录,才分成一个组
分组查询后,查询列只能出现分组的列和聚合函数,
where 和 having的区别
where 执行在分组之前,不能使用聚合函数
having 执行在分组之后,是对分组的结果进行筛选,只能使用聚合函数
16.SQL查询语句的执行顺序
查询语句执行顺序,决定了查询关键字的书写顺序,后执行的查询语句可以使用先执行查询语句的别名
顺序
1,执行from
2.执行where进行条件过滤
3.执行group by分组
4.执行 select 投影
5.执行 having 对分组结果进行筛选
6.执行order by 排序
7.执行 limit 返回限定行
–mysql函数
***时间函数***
select now():得到当前时间,年月日 时分秒
select curdate():得到当前时间 年月日
select year(日期): 得到指定时间的年份
select date_add(日期,interval 100 day/hours/month/year)--参数 时间都可以
得到日期时间 100天以后的日期
计算今天到某一天还有几天
select timestampdiff(day,now(),'2020-10-1')
***聚合函数***
count() : 统计行的数量
(*):统计所有符合条件的值,包括空值
(列名):只统计非空值
(distinct 列名):去除重复列值,统计数量
sum() ; 统计某个列的总和
(列名) : 计算该列的总和
avg() 统计某个列的平均值
(列名) : 计算该列的平均值(只算非空的值)
max() : 统计某个列的最大值
min() : 统计某个列的最小值
–联表查询
将两个表中的数据,使用查询语句同时显示在查询结果中
联表查询采用笛卡尔乘积实现,将一个表中所有记录和另一个表中所有记录一一关联.
分类
内联接
只能查询两个表之间有联系的数据
关键字:join on
select 查询列 from 表1,表2 where 主键 = 外键
或
select 查询列 from 表1 join 表2 on 主键 = 外键
SELECT c.`c_type`,m.`m_name` FROM t_car c JOIN t_man m ON c.`fk_manId` = m.`pk_id`;
SELECT c.`c_type`,m.`m_name` FROM t_car c, t_man m WHERE c.`fk_manId` = m.`pk_id`;
外连接
可以查出一个表中所有的记录,无论该记录是否有对应的记录
left/right join on
select 查询列 from 表1 left join 表2 on 主键 = 外键
SELECT m.*,COUNT(c.`pk_id`) FROM t_man m LEFT JOIN t_car c ON m.`pk_id` = c.`fk_manId` GROUP BY m.`pk_id`;
多对多查询
select 查询列 from 表1 join 中间表 on 中间表外键 = 表1主键 join 表2 on 中间表外键 = 表2 主键