一、 新建表
二、 基本的增删改查
三、 模糊查询
四、 判断空值
五、 取反关键词not
六、 关键词or
七、 关键词and
八、 关键词and 和 or的优先级(and优先级更高)
九、 分组查询
十、 逻辑运算
十一、 多包含关键词in
十二、 区间关键词between and
十三、 排序
十四、 select 计算方法
十五、 列的别名
十六、 数据统计(汇总,聚合)
十七、 字符串函数
十八、 日期函数
十九、 关键词top
二十、 表之间的链接
二十一、 子查询
一、新建表
--创建一个表名是hao123,主键是id且自动增长。
CREATE TABLE hao123 (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT(3),
语文 DECIMAL(3,1),
数学 DECIMAL(3,1),
TIME DATE
)
--创建一个表名是hao123,主键是id且自动增长,班级不能为空。
CREATE TABLE hao123 (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
class VARCHAR(10) NOT NULL ,
age INT(3),
语文 DECIMAL(4,1),
数学 DECIMAL(4,1),
TIME DATE
)
基本的增删改查
--新增一条完整的信息。
--insert into Table_1 values(1,'张三')
--新增一条不完整的信息。
--insert into Table_1(学号)values(2)
--新增时间(注意:日期时间必须用引号)
insert into hao123 time values('1999-10-10')
--根据条件删除信息。
delete from Table_1 where 学号=2
--根据条件修改信息。
update Table_1 set 姓名='李四' where 学号=1
update student set stu_name='李四',stu_sex='女' where stu_id=1
--修改整列信息。
update Table_1 set 姓名='李四'
--查询表中的指定列的信息
select 学号 from Table_1
--查询数据库中的所有信息。
select * from Table_1
二、模糊查询
--查询表中姓名包含李的信息。
select * from Table_1 where 姓名 like '%李%'
select * from Table_1 where 姓名 like “%李%”
--查询表中姓名开头为李的信息。
select * from Table_1 where 姓名 like '李%'
--查询表中姓名开头为李,且名只有一个字符的信息。
select * from Table_1 where 姓名 like '李_'
--在mybatis中模糊查询
select * from Table_1 where 姓名 like '%${name}%'
select * from Table_1 where 姓名 like “%”#{name}”%”
三、判断空值
--查询姓名为空的信息。
select * from Table_1 where 姓名 is null
四、取反关键词not
--查询姓名不为空的信息。
select * from Table_1 where not(姓名 is null)
五、关键词or
--查询年龄是30和40的人的信息。
select * from Table_1 where 年龄=30 or 年龄=40
--删除表中id为1、3、4的
DELETE FROM hao123 WHERE id=1 OR id=3 OR id=4
六、关键词and
--查询表中年龄为40,并且地址为湖南的信息。
select * from Table_1 where 年龄=40 and 地址='湖南'
七、关键词and 和 or的优先级(and优先级更高)
--查询表中年龄为40和姓名是张三并且年龄是30的信息。
select * from Table_1 where 年龄=40 or 姓名='张三' and 年龄=30
八、分组查询(group by)
--查询姓名出现的次数。
select 姓名,COUNT(姓名) 次数 from Table_1 group by 姓名
--查询姓名重复的信息,并返回次数。
select 姓名 ,COUNT(姓名) 次数 from Table_1 group by 姓名 having count(姓名)> 1
--删除姓名重复的信息保留一条。
delete from Table_1 where 姓名 in (select 姓名 from (select 姓名 from Table_1 group by 姓名 having count(姓名)> 1 ) a) and id not in(select * from(select MIN(id) ID from Table_1 group by 姓名 having COUNT(姓名)>1 ) b)
九、逻辑运算
--查询学生表中id大于3的数据
select * from student where id>3
--查询学生表中id小于3的数据
select * from student where id<3
--查询学生表中id等于3的数据
select * from student where id=3
十、多包含关键词in
--查询姓名为张三和李四的信息。
select * from student where stu_name in('张三','李四')
--查询姓名不为张三的信息。
select * from student where stu_name not in ('张三')
十一、区间关键词between and
--查询学号在3到7之间的信息。
select * from student where stu_id between 3 and 7
十二、order by排序
--根据学生id降序排序。
select * from student order by stu_id desc
--根据学生id升序排序。
select * from student order by stu_id asc
select * from student order by stu_id
十三、select 计算方法
select 1+1 as 结果
select 1+2 结果
select 结果=9+3
十四、列的别名
--合并姓列名列,返回详细信息
select 姓+名 as 姓名 ,* from student
select 姓+名 姓名 ,* from student
--新增一列建表人
select '横扫千军' as 签字,* from student
select '横扫千军' 签字,* from student
select 签字 = '横扫千军',* from student
十五、数据统计(汇总,聚合)
--根据姓名查询总人数
select 总数人 as count(姓+名) from student
--查询总销量
select 总销量 as sum(销量) from student
--查询最大年龄
select 最大年龄as max(ages) from student
--查询最小年龄
select 最小年龄as min(ages) from student
--查询平均年龄
select 平均年龄as avg(ages) from student
十六、字符串函数
--获取字符串长度。
select len('张三') 长度
--从字符串左边截取2个字符。
select LEFT('当我第一次','2') 返回值
--从字符串右边截取2个字符。
select RIGHT('当我第一次','2') 返回值
--从字符串左边第2个开始(包含第二位),截取3个字符。
select SUBSTRING('当我第一次看到你的时候',2,3) 返回值
--替换字符串。
select replace('当我第一次看到你的时候','一','二') 返回值
--删除字符串abcdefg中间的cd。
select REPLACE('abcdefg','cd','')
--将字符串abcdef从第2位开始删除3个字符。
select REPLACE('abcdef',SUBSTRING('abcdef',2,3),'') 返回值
--将大写字母变为小写字母。
select LOWER('ABC') 返回值
--将小写字母变成大写字母。
select UPPER('ABC') 返回值
--将字符串颠倒。
select REVERSE('abc') 返回值
--删除字符串左边的空格。
select LTRIM(' 张三') 返回值
--删除字符串右边的空格。
select RTRIM('张三 ') 返回值
十七、日期函数
--获取当前具体日期和时间(可存储到datetime)
select now ()
--获取当前日期(可存储到date)
select curdate()
--获取当前时间(可存储到time)
select curtime()
十八、表之间的链接
--双表内链接。
select * from student inner join student2 on student2.stu_id=student.stuID
SELECT * FROM table1,table2 WHERE table_id=table2.id
--双表左链接。
select * from student left join student2 on student2.stu_id=student.stuID
--双表右链接。
select * from student right join student2 on student2.stu_id=student.stuID
--双表完全链接。
select * from student full join student2 on student.stuID=student2.stu_id
十九、子查询
--查询表中小于平均年龄的学生姓名。
select stu_name from student where stu_ages<(select AVG(stu_ages) from student)
二十、where、group up、having关键词比较
--显示1601班的学生数量。
select 人数 as COUNT(*) from student group by stu_class having stu_class=1601
二十一、convert关键词
--查询某一天的交易量。
select COUNT(id) from 订单 where CONVERT(varchar(30),订购日期,23)='1999-9-9'
--查询某秒的交易量。
select COUNT(id) from 订单 where CONVERT(varchar(30),订购日期,120)='1999-9-9'
二十二、alter关键词
--在Table_1中增加一列。
alter table Table_1 add sex char(20) null
二十三、流程结构(If关键词)
案例一:
If 表达式
then 满足条件后执行的sql
end if;
案例二(一个if中只能有一个else,一个else中可以嵌套if/then/else/end if):
If 表达式
then 满足条件后执行的sql
else满足条件后执行的sql
end if;
二十四、If关键词
/*每天零流量数量type=0表示豫北,否则是豫南*/
SELECT IF(TYPE=0,'豫北','豫南') 区域 ,start_time 产生时间,COUNT(1) 零流量数量 FROM zeroflow_allday GROUP BY start_time ,TYPE
二十五、外键约束
--创建两个表之间的外键约束(一对多关系中,一的一方是父表,多的一端是子表 ,即引用外键的是子表,被引用的是父表。父表又叫做主表,子表又叫做从表。)
ALTER TABLE 子表 ADD CONSTRAINT 父表字段名 FOREIGN KEY (子表字段名) REFERENCES 父表(字段名);
alter table orders add constraint id foreign key (o_id) references user(id);
--暂停外键约束
SET FOREIGN_KEY_CHECKS=0
SELECT * FROM customer
SELECT * FROM db_dictionary
ALTER TABLE 子表 ADD CONSTRAINT 父表字段名 FOREIGN KEY (子表字段名) REFERENCES 父表(字段名);
ALTER TABLE customer ADD CONSTRAINT id FOREIGN KEY (`level`) REFERENCES db_dictionary(id)
二十六、例题
#查询语文最高的班级
SELECT * FROM hao123 WHERE 语文 IN(SELECT MAX(语文) FROM hao123)
#查询总分最高的班级
SELECT * FROM hao123 WHERE 语文+数学 IN(SELECT MAX(语文+数学) FROM hao123)
#查询每个班语文最高分
SELECT class,MAX(语文) FROM hao123 GROUP BY class
#查询语文成绩最高的学生信息
SELECT * FROM hao123 WHERE 语文 IN(SELECT MAX(语文) FROM hao123)
#查询每个班的语文成绩最高的学生