一.简单查询(select 查询列表 from 表名)
1.查询列表可以是单个字段,多个字段,也可以是常量,表达式,函数等;
例:select 100;
select 100+200;
select '100'+200;
select student_no,student_name from student;
2.可以给查询的字段重命名,用as或者空格
例: select student_no as id from student;
select student_no id from student;
3.可以给查询到的结果去重,用distinct
例: select distinct student_no as id from student;
4.查询的结果是一个虚拟的表格
5.补充:'+' 号只有运算符的功能,没有拼接功能,null值与任何数相加都为null
二.条件查询(select 列表 from 表名 where 条件语句)
1.简单条件运算符(<, >, =, <>, !=, >=, <= )
例: select student_no from result where score>90;
2.逻辑运算符(and, or, not )
例: select student_name
from student
where born_date>'1992-01-01' and/or gender='male';
3.模糊查询
① like:主要与通配符搭配使用 %,_
例: select student_name from student
where student_name like '%a%';
(where student_name like '_a%';)
② between and
③ in
④ is null/ is not null
例:select student_name from student
where email is not null;
三.排序查询(select 列表 from 表名 [where 条件语句] order by 列表)
1. 排序查询分为升序跟降序,用到关键字ASC, DESC
2.order by 后跟的列表可以是多个字段,表达式,函数,别名等等
例:select student_name as s_name from student order by s_name DESC;
四.常见函数
1.单行函数
①字符函数
length(), concat(), upper(), lower(), trim(), replace(),find()
lpad(), rpad()-----用指定的字符实现填充指定的长度
substr(字符串,起始索引,长度)-----返回指定长度的字符串
instr(字符串,截取的字符串)-----返回截取字符串的起始索引
②数学函数
round() 四舍五入,truncate() 截断,ceil()向上取整,floor()向下取整
mod() 取余:被除数为正则结果为正
random() 获取0-1之间的随机数
③日期函数
now(),curdate(),curtime()
year(), month(),day(), minute(), monthname()---返回英文的月份
date_sub(date,interval expr type)
date_add(date, interval expr type)
例: date_sub(now(), interval 1 week)
datediff()---返回两个日期相差的天数
timediff()---返回时间差
timestampdiff()---两个日期返回指定差,可以是年月日,week,分钟等等
例:timestampdiff(year, date1,date2)
str_to_date()---解析日期格式的字符
(%Y 四位数年份,%y两位数年份,%m两位数月份,%c一位数月份,%M英语月份)
例:str_to_date('2-20-2021','%c-%d-%Y')----2021-02-20
date_format()---将日期转换成字符
例:date_format(‘2019/02/16’,'%y-%m-%d')----19-02-16
④其他函数
select version(); select database(); select user(); show databases;
⑤流程控制函数
Ⅰ. if(条件表达式,true, false)
Ⅱ. [case 字段
when 常量1 then ...
when 常量2 then ...
else... end;]
Ⅲ. [case when 条件1 then...
when 条件2 then...
else... end];
2.分组函数:用作统计使用,又称为聚合函数
count(); sum(); avg(); max(); min()
※:可以和distinct搭配使用,例:select sum(distinct score) from result;
※※:所有的分组函数均忽略null值!!!
※※※:一般使用count(*)和count(1) 来求个数,效率要比count(字段)高,
因为count(字段)还要判断该字段是否为null,不为null才会+1;
五.分组查询
select column, group_function(column) from table
【where 条件语句】
group by column
having 分组后的条件
【order by ...】
六.连接查询
语法分类: 按年代分:sql92标准:Mysql仅仅支持内连接
sql99标准
按功能分:内连接(等值连接,非等值连接,自连接)
外连接(左外连接,右外连接,全外连接)
交叉连接
语法:select 查询列表 from table1
inner/ lefter outer/ right outer join table2 on 连接条件
【where 条件语句】
七.union联合查询
select 查询列表 from 表1
union
select 查询列表 from 表2
八.分页查询
select 查询列表
from table1
【inner/ lefter outer/ right outer join table2 on 连接条件】
【where 条件语句】
【group by 分组列表】
【having 分组后的条件】
【order by 排序字段】
limit offset,size;
※ offset: 起始索引,从0开始; size: 要显示的条目个数
※※要显示的页数是page,每页的条目数是size,所以起始索引为(page-1)*size
九.DML语言(数据操作语言)
主要涉及数据的增加insert,修改update,删除delete
1. 插入数句:插入的值的类型要与原表的类型相同
insert into student(列名1,列名2...) values(值1,值2...); 【支持多行插入值,支持子查询】
insert into student set 列名1=值1,列名2=值2...【仅支持单行插入值】
2.修改数据
※修改单表数据:update student set phone='13903306000' where id=201;
※修改多表数据:update student s inner join result r on s.student_no=r.student_no where...
3.删除数据
※删除单表数据:delete from student where...
※删除多表数据:delete 表1【,表2】 from 表1 inner join 表2 on 连接条件 where...
※※删除全表数据:truncate不可加where条件,只能清空全部数据,包括自增长列。
truncate table student;
十.DDL语言(数据定义语言)
1.数据库的创建修改删除
数据库的创建:create database if not exists Library;
数据库的删除:drop database if exists Library;
数据库字符集修改: alter database Library character set gbk;
2.表的创建修改删除
①表的创建:
create table 表名(列名1 列的类型 列的约束,
列名2 列的类型 列的约束...)
例: create table student(student_no int primary key,
student_name varchar(20),
login_pd varchar(20),
gender varchar(6),
phone int,
email varchar(20),
born_date timestamp);
②表的修改有:
修改表名 alter table student rename to s_info;
修改列名 alter table student change column student_no s_no int; 【修改列名要加类型】
修改列的类型 alter table student modify column gender int;
增加新列 alter table student add column grade int;
删除列 alter table student drop column grade;
③表的删除:
drop table if exists s_info;
show tables; 【查看当前库的所有表】
④表的复制:
Ⅰ.仅仅复制表的结构: create table s_01 like s_info;
Ⅱ.复制表的结构+数据:create table s_02 select * from s_info;
常见的数据类型:
数值型:整型,小数(浮点型,定点型)
float(M,D)/double(M,D):M代表总长度,D代表小数点位数。M跟D可以省略
字符型:较短的文本char() / varchar(),较长的文本text()
char():代表固定长度的字符
日期型:timestamp
常见约束:
NOT NULL:非空
DEFAULT:默认,用于保证该字段有默认值
PRIMARY KEY:主键,唯一,非空,只能有一个
UNIQUE:唯一,可以为空,可以有多个
FOREIGN KEY:外键
CONSTRAINT 外键名 FOREIGN KEY major_id REFERENCE major(id);
CHECK:检查约束,mysql中不支持
标识列:又称自增长列: AUTO_INCREMENT,跟KEY搭配使用,只能有一个。
例表1,student表
student_no, student_name, login_pd, gender, phone, email, born_date
例表2,result表
major_id, student_no, score