两张表中有匹配数据,那就将他们组合起来
select * from 表A inner join 表B on 表A.字段 compopr 表B.字段 where 表.字段=‘值’(compopr运算符号)
例子:从表admin中找到关联check表中id=570的last_check_user的user_name (last_check_user与admin 中的id对应)
select user_name fromadmin
INNER JOINcheck
ONadmin
.id=check
.last_check_user WHEREcheck
.id=‘570’
group by 与 having基于聚合函数的使用
group by把返回的记录分成多个组,分完组后,用聚合函数对每组中的不同字段做运算;having自居可以让我们筛选成组后的各组数据。
– 显示每个地区region的总人口数population和总面积area
select region,sum(population),sum(area)from 表名 group by region
增删改查、去重、模糊查询、排序
语法:insert into 表名称 values (值1,值2,值3,...值n);
例子:insert into user values(‘张三’,‘演员’,22,‘男’);
注意:必须把所有列都进行新增,并且新增值的顺序需要与建表时列的顺序一致。新增值的数据类型要与列的数据类型相对应,数字型数据类型直接写,其他类型的值需要单引号引起来。replace也可以插入数据,相当于insert
新增指明列的记录
语法:insert into 表名称(列名1,列名2,...列名n) values (值1,值2,...值n);
例子:insert into user (name,age,sex) values (‘张三’,22,‘男’);
注意:指明列的顺序可以不和建表时的顺序相同,新增值需要和指明列相对应,未指明列为默认值(default指定的值或者null)。同时,未指明列必须满足约束条件(如:列设置了not null,并且没有设置default)。
修改指明列的记录
语法:update 表名称 set 列名=值 where 条件;
例子:update user set name=‘李四’ where sex=‘男’;(把sex为‘男’的记录的name列的值全部修改为‘李四’)
注意:修改列为多个时使用逗号分隔。条件为多个时使用and或者or分隔。如果没有where条件则指明列的数据都会被修改
删除所有的记录
语法:delete from 表名称;
语法:truncate 表名称;
注意:两种方法都可以使用。但是删除记录时慎重,事物提交后无法恢复删除记录。要想恢复很复杂。truncate速度更快,占用日志更少(直接释放数据页并且在事物日志中也只记录数据页的释放)。而delete一行一行删除,在事物日志中要记录每一条记录的删除
删除指明条件的记录
语法:delete from 表名称 where 条件;
例子:delete from user where name=‘张三’;(删除name为‘张三’的所有记录)
查询表中某个字段
语法:select 列名 from 表名称;
例子:select name from user;
注意:多个列时,列名与列名之间使用逗号分隔,最后一个列名不需要逗号。
另外,查询时使用别名
语法:select 列名 as‘别名’ from 表名称;
例子:select name as‘姓名’ from user;
注意:as关键字可以省略,多个列时不是所有的列都必须添加别名。别名只修改查询时列的名称,真正表的列名不会被修改。
查询时使用算术运算符:(+、-、*、/)
语法:select 列名+值 from 表名称;
例子:select age+20 from user;
注意:算术运算符只作用在数值类型的列上。可以是固定值,也可以指定某列。
去除重复记录:(distinct)
语法:select distinct 列名 from 表名称;
例子:select distinct age from user;
注意:distinct紧跟着在select关键字之后。如果查询多个列则会把查询的所有列的值进行拼接后,在去重
分页:(limit)
语法:select * from 表名称 limit m,n;
公式:select * from 表名称 limit((页码-1) * 行数),行数;
● 例子:select * from user limit 0,10;
注意:m表示从多少下标位开始(默认从0开始),n表示显示多少条记录。m如果省略掉。则默认从0下标位开始显示记录
复制查询出来的表结构及记录:
语法:create table 新表名称 as select * from 表名称;
例子:create table user1 as select * from user ;
注意:as关键字可以省略。复制的表不会把原表中的主外键约束进行复制
只复制表结构不复制记录:
语法:create table 新表名称 select * from 表名称 where 条件;
例子:create table user1 select * from user where 1=2 ;
注意:只需where条件为假就行
多条件的查询:(and、or、not)
● and:并且的意思,查询的记录必须都满足条件
● or: 或者的意思,查询的记录只需满足其中一个条件
● not:取条件表达式的反值
语法:select * from 表名称 where 条件;
例子:select * from user where not name=‘张三’;
(查询出name不为‘张三’的所有记录)
注意:在条件与条件之间需使用and、or把条件进行连接起来
查询空值的记录:(null、‘’)
语法:select * from 表名称 where 列名 is null or 列名=‘’;
例子:select * from user where name is null or name=‘’;
意:查询空值必须两个条件都写,查询null时只用is null。查询非空is not null
查询区间记录:(between)
语法: select * from 表名称 where 列名 between m and n;
例子:select * from user where age between 20 and 50;
(查询出age>=20并且<=50的所有记录)
注意:在m、n之间的记录,并包含m、n。and前写小值,and后写大值。between相当于age>=20 and age<=50的简写
查询具体值的记录:(in)
语法:select * from 表名称 where 列名 in(值1,值2,....值n);
例子:select * from user where age in(20,22,23);
(查询出age为20,22,23的所有记录)
注意:in相当于age=20 or age=22 or age=23的简写
模糊查询:(like、not like)
语法:select * from 表名称 where 列名 like ‘条件’;
例子:select * from user where name like ‘%三%’;
(查询出name含有三的所有记录)
注意:%表示任意长度的字符。_表示一个长度的字符
正则查询:(rlike)
语法:select * from 表名称 where 列名 rlike ‘[条件]’;
● 例子:select * from user where name rlike ‘[张王]三’;
(查询出张三或王三的所有记录)例子:select * from user where name rlike
‘[^张王]三’;(查询出除了张三或王三的所有记录)
注意:[…]范围也可以为[0-9][a-z],也可以写固定的值
查询出来的结果进行排序:(order by)
语法:select * from 表名称 order by 排序列名 排序要求;
语法:select * from 表名称 order by 排序列名 排序要求,排序列名 排序要求;(多列排序)
例子:select * from user order by age desc;
(查询出来的记录根据age的降序排序)
注意:排序是对整行记录进行排序。desc表示降序,asc表示升序,如果省略了asc或者desc默认为升序